디시인사이드 갤러리

갤러리 이슈박스, 최근방문 갤러리

갤러리 본문 영역

솔직히 프로그래밍= 개좆도 모르겠고 아는척함

ㅆㅇㅆ(124.216) 2024.09.21 16:38:25
조회 106 추천 0 댓글 0

ㅋㅋㅋㄹㅇ


내가 짠 코드보면 한숨 나옴



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
using System.Collections.Generic;
using UnityEngine;
using Core;
using MainGame;
 
namespace Target2DSystem
{
    /// <summary>
    /// QuadTree를 사용하여 2D 환경에서 타겟팅 시스템을 관리하는 클래스
    /// 이 클래스는 적 또는 다른 타겟을 QuadTree에 추가 및 제거하며,
    /// 지정된 위치에서 가장 가까운 타겟, 가장 먼 타겟, 또는 우선순위가 가장 높은 타겟을 검색하는 기능을 제공
    /// </summary>
    public class QuadTreeTargetingSystem : Singleton<QuadTreeTargetingSystem>
    {
        private QuadTree quadTree; // QuadTree 객체
        private Rect worldBounds;  // QuadTree가 커버하는 월드 범위
 
        private bool isInitialized = false// 초기화 여부를 확인하기 위한 플래그
 
        /// <summary>
        /// QuadTreeTargetingSystem을 초기화하는 메서드
        /// 던전 빌더로부터 던전 경계를 가져와 QuadTree를 생성
        /// </summary>
        private void Initialize()
        {
            worldBounds = DungeonBuilder.Instance.GetDungeonBounds(); // 던전 경계를 가져옴
            quadTree = new QuadTree(worldBounds, 4); // QuadTree를 생성, 최대 4개의 객체를 가지는 노드로 설정
            isInitialized = true// 초기화 완료
        }
 
        /// <summary>
        /// QuadTreeTargetingSystem이 초기화되었는지 확인하고, 초기화되지 않은 경우 초기화를 수행
        /// </summary>
        private void EnsureInitialized()
        {
            if (!isInitialized)
            {
                Initialize();
            }
        }
 
        /// <summary>
        /// 새로운 타겟을 QuadTree에 추가
        /// </summary>
        /// <param name="target">추가할 타겟</param>
        public void AddTarget(ITargetable target)
        {
            EnsureInitialized(); // 초기화 확인
            // 타겟 추가 전 Faction 정보를 출력
            //Faction faction = target.GetFactionDetails().GetFaction();
            //Debug.Log($"[쿼드트리 타겟 추가] 타겟: {target}, Faction: {faction}");
            quadTree.Insert(target); // 타겟 추가
        }
 
        /// <summary>
        /// 타겟을 QuadTree에서 제거
        /// </summary>
        /// <param name="target">제거할 타겟</param>
        public void RemoveTarget(ITargetable target)
        {
            EnsureInitialized(); // 초기화 확인
            quadTree.Remove(target); // 타겟 제거
        }
 
        /// <summary>
        /// 지정된 유닛과 현재 저장할 타겟을 기반으로 가장 가까운 적절한 타겟을 반환합니다.
        /// </summary>
        /// <param name="sender">타겟을 찾는 유닛</param>
        /// <param name="currentTarget">결과로 저장할 타겟</param>
        /// <returns>가장 가까운 타겟, 없으면 null 반환</returns>
        public ITargetable GetClosestTargetWithDifferentFaction(ITargetable sender, ITargetable currentTarget)
        {
            EnsureInitialized(); // 초기화 확인
 
            Vector3 position = sender.GetTargetTransform().position;
            Faction senderFaction = sender.GetFactionDetails().GetFaction(); // Sender의 Faction
 
            List<ITargetable> potentialTargets = quadTree.Retrieve(position); // 잠재적 타겟 검색
            //Debug.Log($"검색된 잠재적 타겟 수: {potentialTargets.Count}");
 
 
            ITargetable closestTarget = null;
            float closestDistance = float.MaxValue;
 
            foreach (ITargetable potentialTarget in potentialTargets)
            {
                Faction targetFaction = potentialTarget.GetFactionDetails().GetFaction(); // 잠재적 타겟의 Faction
                //Debug.Log($"잠재적 타겟: {potentialTarget}, Faction: {potentialTarget.GetFactionDetails().GetFaction()}");
 
                if (targetFaction == senderFaction)
                {
                    //Debug.Log($"[타겟 검색] 타겟이 같은 Faction입니다: {targetFaction}, 건너뜀.");
                    continue// 같은 Faction의 타겟은 건너뜀
                }
                //Debug.Log($"[타겟 발견] 다른 Faction 발견! 타겟: {potentialTarget}, Faction: {targetFaction}");
 
                float distance = Vector3.Distance(position, potentialTarget.GetTargetTransform().position);
                if (distance < closestDistance)
                {
                    closestDistance = distance;
                    closestTarget = potentialTarget;
                    //Debug.Log($"[타겟 검색] 새로운 가장 가까운 타겟: {closestTarget}, 거리: {closestDistance}");
 
                }
            }
 
            currentTarget = closestTarget; // 가장 가까운 타겟을 currentTarget에 저장
            Debug.Log($"최종 반환할 타겟: {currentTarget}");
            return currentTarget; // 가장 가까운 타겟을 반환
        }
 
 
        /// <summary>
        /// 지정된 위치에서 현재 유닛과 같은 팩션에 속하지 않은 또는 팩션이 없는 가장 가까운 타겟을 반환합니다.
        /// </summary>
        /// <param name="sender">타겟을 찾는 유닛</param>
        /// <param name="currentTarget">결과로 저장할 타겟</param>
        /// <returns>가장 가까운 타겟, 없으면 null 반환</returns>
        public ITargetable GetClosestTargetWithDifferentOrNoFaction(ITargetable sender, ref ITargetable currentTarget)
        {
            EnsureInitialized(); // 초기화 확인
 
            Vector3 position = sender.GetTargetTransform().position;
            Faction currentFaction = sender.GetFactionDetails().GetFaction();
 
            List<ITargetable> potentialTargets = quadTree.Retrieve(position); // 잠재적 타겟 검색
 
            ITargetable closestTarget = currentTarget;
            float closestDistance = currentTarget != null ? Vector3.Distance(position, currentTarget.GetTargetTransform().position) : float.MaxValue;
 
            foreach (ITargetable potentialTarget in potentialTargets)
            {
                if (potentialTarget.GetFactionDetails().GetFaction() != currentFaction) // 같은 팩션이 아닌 경우
                {
                    float distance = Vector3.Distance(position, potentialTarget.GetTargetTransform().position);
                    if (distance < closestDistance)
                    {
                        closestDistance = distance;
                        closestTarget = potentialTarget;
                    }
                }
            }
 
            currentTarget = closestTarget; // 가장 가까운 타겟을 currentTarget에 저장
 
            return closestTarget; // 가장 가까운 타겟을 반환
        }
 
    }
}
 
cs

추천 비추천

0

고정닉 0

0

댓글 영역

전체 댓글 0
본문 보기

하단 갤러리 리스트 영역

왼쪽 컨텐츠 영역

갤러리 리스트 영역

갤러리 리스트
번호 제목 글쓴이 작성일 조회 추천
설문 현역으로 군대 안 간게 의아한 스타는? 운영자 25/06/30 - -
AD 휴대폰 바꿀까? 특가 구매 찬스! 운영자 25/07/02 - -
2868513 리버싱하면 할수록 느끼는거 [21] 루도그담당(223.39) 06.30 166 0
2868512 한국인만큼 똑똑하고 정많은 민족 없더라 뒷통수한방(1.213) 06.30 48 0
2868511 리액트 단점 ) 리액트 네이티브 뒷통수한방(1.213) 06.30 53 0
2868510 자바 싫어하는데 러스트하라고 하면 자바함 [1] 뒷통수한방(1.213) 06.30 55 0
2868509 원인이 머엿음 [3] 프갤러(125.240) 06.30 65 0
2868508 개발자라도 무조건 중견 대기업 가는 게 좋은가? 프갤러(110.13) 06.30 51 1
2868507 비it 제조업 erp 유지보수인데 [3] 프갤러(115.21) 06.30 74 0
2868506 나 뭐할까요....? 아니 OS가 비밀번호틀렸다고 잠가버리네... 넥도리아(121.139) 06.30 38 0
2868505 spa를 너무 어렵게 생각하는데 그냥 클라 렌더링임 ㅆㅇㅆ(124.216) 06.30 57 0
2868503 아버지가 이전 수명 하드 에서 백업하드 로 옮기고 넥도리아(121.139) 06.30 39 0
2868502 Spa핵심이 ui동적 변환이고 [2] ㅆㅇㅆ찡갤로그로 이동합니다. 06.30 62 0
2868501 근데 spa 에 리액트가 필요한 이유가 뭐임? [5] 프갤러(211.234) 06.30 67 0
2868500 원래 지들끼리 놀던건 알았지만 현타오네 [8] 프갤러(211.245) 06.30 79 0
2868499 실력없는것들이나 리액트싫어하지 [2] 프갤러(211.234) 06.30 71 0
2868498 납품했다. 진짜 납품한거 실행됐음 좋겠어. 이제 그만하고 싶어 [12] ㅆㅇㅆ(124.216) 06.30 75 0
2868497 문제는 한국에서는 러스트에 대한 토론 자체가 힘듬. 이유가 뭐냐면 [6] ㅆㅇㅆ(124.216) 06.30 65 0
2868496 GEMINI <- 이거 뭐라 부름 [7] 프갤러(1.235) 06.30 72 0
2868494 카카오 네이버 ai가 뭐있음 [2] 뒷통수한방(117.111) 06.30 62 0
2868493 좇센같이 자바 공화국에사 굳이 러스트 하라고?? [1] 뒷통수한방(117.111) 06.30 42 0
2868492 1초 느린건 기업들이 참아도 몇십억 벌금은 못참으니까 러스트가 쓰이는거 [7] ㅆㅇㅆ(124.216) 06.30 85 0
2868487 국제 금융규제 바젤Ⅲ 에따라 가계대출 줄이기 들어가. 프갤러(183.101) 06.30 32 0
2868486 근데 러스트같은거 쓰는 이유가 뭘까 [8] 프갤러(115.21) 06.30 83 0
2868485 경찰 포렌식 과학수사대 인터폴 누가 가장 권력쌔냐 ㅇㅇ 뒷통수한방(1.213) 06.30 32 0
2868484 솔직히 좇센보다 우간다 북한 중국 인도에서 태어나는게 더 이득이 맞음 [1] 뒷통수한방(1.213) 06.30 46 0
2868483 리버싱 할때 구조체 값들은 찾기가 귀찮아 루도그담당(211.184) 06.30 43 0
2868481 c와 c++의 차이점 - typedef [1] ㅇㅇ(118.235) 06.30 80 1
2868479 내가 전생에 뭔지랄을했길래 하필좇센에서 태어난거지 [3] 뒷통수한방(1.213) 06.30 46 0
2868478 파이썬은 만드는건 존나 편한데 배포가 짜증나. ㅆㅇㅆ(124.216) 06.30 52 0
2868477 크롬에서 왜 자꾸 탭그룹 기능 미나햇는데 [5] 헬마스터갤로그로 이동합니다. 06.30 76 0
2868476 c와 c++의 차이점 - inline [5] ㅇㅇ(118.235) 06.30 103 1
2868470 오늘은 꼭 미루지말고 신규 노드를 설치해야지 [2] 아스카영원히사랑해갤로그로 이동합니다. 06.30 45 0
2868469 코딩은 구글 제미나이가 더 좋은거같은데 [1] 프갤러(114.202) 06.30 55 0
2868468 안녕 조센징들? [4] 개멍청한유라갤로그로 이동합니다. 06.30 57 0
2868467 연 ㅇㅅㅇ 헤르 미온느갤로그로 이동합니다. 06.30 37 0
2868466 태연 ㅇㅅㅇ 헤르 미온느갤로그로 이동합니다. 06.30 38 0
2868465 하루 한 번 헤르미온느 찬양 헤르 미온느갤로그로 이동합니다. 06.30 32 0
2868463 파이 인스톨러 빌드 한번 할때마다 20~30분 걸리는거 토나온다 [3] ㅆㅇㅆ(124.216) 06.30 58 0
2868461 참조된 계정이 현재 잠겨 있으므로 그 계정으로 [1] 넥도리아(121.139) 06.30 51 0
2868460 ffmpeg 동영상 인코딩하다가 서버가 털릴 수 있다? 프갤러(42.25) 06.30 55 0
2868445 수술 범죄의 수법과 배경 ㅇㅇ(121.169) 06.30 36 0
2868441 클라이언트 진짜 좆같다 그냥 [2] ㅆㅇㅆ(124.216) 06.30 94 0
2868439 래퍼 여자친구한테 고백하는 방법 | 개그콘서트 발명도둑잡기갤로그로 이동합니다. 06.30 41 0
2868436 [4K] 싸이(PSY), '오프닝부터 분위기 후끈' 발명도둑잡기갤로그로 이동합니다. 06.30 36 0
2868432 문제를 해결하는 INTJ 발명도둑잡기갤로그로 이동합니다. 06.30 42 0
2868431 맥미니 2018분해 모셔온 SSD 넥도리아(175.196) 06.30 62 0
2868429 nimf 러스트로 짜면 어떨까 프갤러(125.240) 06.30 43 0
2868428 영부인 가방 발명도둑잡기갤로그로 이동합니다. 06.30 39 1
2868426 일단 해외선물 프로그램 납품은 했는데 여전히 클라이언트컴에서 안될듯 [1] ㅆㅇㅆ(124.216) 06.30 88 0
2868425 가자에서 "인도지원 가장한 학살"…유엔·국경없는의사회 이어 프랑스도 발명도둑잡기갤로그로 이동합니다. 06.30 34 0
2868423 "이스라엘군에 죽음을"…英축제 그대로 생중계한 BBC 발칵 발명도둑잡기갤로그로 이동합니다. 06.30 39 0
뉴스 ‘41세’ 손담비, 출산 후 체중 충격 급변… “쥐젖 320개” 토로도 디시트렌드 14:00
갤러리 내부 검색
제목+내용게시물 정렬 옵션

오른쪽 컨텐츠 영역

실시간 베스트

1/8

뉴스

디시미디어

디시이슈

1/2