디시인사이드 갤러리

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

갤러리 본문 영역

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

ㅆㅇㅆ(124.216) 2024.09.21 16:38:25
조회 95 추천 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
등록순정렬 기준선택
본문 보기

하단 갤러리 리스트 영역

왼쪽 컨텐츠 영역

갤러리 리스트 영역

갤러리 리스트
번호 제목 글쓴이 작성일 조회 추천
설문 축의금 적게 내면 눈치 줄 것 같은 스타는? 운영자 24/11/11 - -
2771515 서민정 지하철 알바설 발명도둑잡기갤로그로 이동합니다. 11.08 47 0
2771514 테스트코드하니까 또 짜증나는게 생각나는데 [2] 프갤러(118.218) 11.08 66 0
2771513 지듣노 발명도둑잡기갤로그로 이동합니다. 11.08 20 0
2771512 술 마시느라 저녁 못 먹었는데 발명도둑잡기갤로그로 이동합니다. 11.08 29 0
2771511 하나뿐인 고등학교 친구 군대간다고 132000 썼어 ㅇㅅㅇ;: [1] ㅇㅇ(223.62) 11.08 56 0
2771509 유사 난수도 예측 불가능함 [3] 재현갤로그로 이동합니다. 11.08 44 0
2771508 지하철 앉아 가는데 20~30대 남자가 내 앞에 서서 발명도둑잡기갤로그로 이동합니다. 11.08 38 0
2771506 내가 일기에 노인을 와인이라고 비유하면 좋다고 썼었는데 발명도둑잡기갤로그로 이동합니다. 11.08 36 0
2771505 가끔 그런 상상하는데 프로그래머를 qa로 뽑고 테스트 코드만 짜는거임 프갤러(118.218) 11.08 52 0
2771504 네트워크 엔지니어 있냐 네트워크는 어느 갤로 가야함 [1] 프갤러(153.246) 11.08 62 0
2771503 qa가 코딩도 하나요 [2] 발명도둑잡기갤로그로 이동합니다. 11.08 44 0
2771502 와인 마시고 지하철 탔는데 맞은편 모르는 여자도 술취해서 발명도둑잡기갤로그로 이동합니다. 11.08 34 0
2771501 플라스틱 와인잔 발명도둑잡기갤로그로 이동합니다. 11.08 29 0
2771500 c샵의 생산성과 c의 속도를 달성한 언어는 이미 있다. [2] 프갤러(118.218) 11.08 95 0
2771499 하나뿐인 친구 군대간다고 102000원씀 ㅇㅅㅇ ㅇㅇ(223.62) 11.08 30 0
2771498 완전히 닌텐도가 운명하셨습니다. [1] 도리스아(112.170) 11.08 35 0
2771494 c#의 생산성을 잡으면서 C++의 실행 속도를 잡은 블록코딩 언어 [2] 재현갤로그로 이동합니다. 11.08 83 0
2771493 루비 ON 레일즈 시작한다 프갤러(59.2) 11.08 24 0
2771491 미래의 어느 역사학자들의 대화라는데 (에필로그) 아갤러(121.129) 11.08 47 0
2771490 미래의 어느 역사학자들의 대화라는데 (요약편) [1] 아갤러(121.129) 11.08 51 0
2771489 요즘 nextjs 쓸 때 모듈화 잘 안하는 추세임? [3] 프갤러(121.139) 11.08 61 0
2771488 미래의 어느 역사학자들의 대화라는데 아갤러(121.129) 11.08 34 0
2771487 역시 고졸 꼴통들상대로하는 장사만큼 꿀통장사가없노 프갤러(211.36) 11.08 48 0
2771482 중소에서 1년 찍었는데 이직 난이도 어떰?? [2] 프갤러(220.116) 11.08 125 1
2771481 지금 인프런보고잇는사람잇음ㅇ ㅇ?? [4] ㅇㅇ(211.234) 11.08 109 0
2771480 객관적으로 좀 봐주라 [1] ㅇㅇ(221.142) 11.08 73 0
2771476 네트워크기초인데 아이피 라는게 돌려 쓰는거야? [11] 프갤러(153.246) 11.08 95 0
2771471 정신분열에 걸릴거 같다 [2] 프갤러(39.121) 11.08 62 0
2771469 파이썬 사용하는데 프레임워크 뭐 써야함? [1] 프갤러(221.141) 11.08 60 0
2771467 제발 개발자 하지 마라 니 인생 소중하다 [7] 프갤러(118.235) 11.08 161 1
2771464 금요일인데 ㅅㅅ 못하는 프붕이들 손들어보세요 [2] 40대프린이(118.235) 11.08 88 0
2771463 아 오늘 금요일이였네. 40대프린이(118.235) 11.08 32 0
2771460 공부하다가 이런거 알게되면 웃기네 ㅋㅋ [1] ㅇㅇ(211.198) 11.08 105 0
2771457 이직하고 첫 주말 월급일인데 [5] 프갤러(211.234) 11.08 84 0
2771456 대전신입은 씨발 연봉이 왜다 이따구냐? [4] 프갤러(223.39) 11.08 122 0
2771454 누구 hikariCP 잘 아는 사람? [3] 2dws(106.246) 11.08 58 0
2771452 솔직히 컴공 편입은 [1] 프갤러(183.108) 11.08 60 0
2771449 국비학원은 세뇌 어플 만들어라 [2] 프갤러(211.197) 11.08 65 0
2771448 이게 다 러스트나 씨를 전정프로 안해서 그렇다. [2] 프갤러(223.63) 11.08 60 1
2771447 전공자가 비전공자 국비충 난립한다고 욕하면 왜 안되는거임? [1] ㅇㅇ(124.49) 11.08 80 0
2771446 스팸 발명도둑잡기갤로그로 이동합니다. 11.08 26 0
2771445 마크인현상?이라는게잇음? [2] ㅇㅇ갤로그로 이동합니다. 11.08 45 0
2771444 출퇴근 국비교육 들을거야 수강신청도 해놨어.. 텬됴대한의아들갤로그로 이동합니다. 11.08 57 0
2771443 이문제 좀 어려웠는데 가망없냐 ㅇㅇ갤로그로 이동합니다. 11.08 30 0
2771442 OS 알고리즘이 대부분 Push/Pop 아키텍처인 듯하다.. +abcd3421갤로그로 이동합니다. 11.08 53 0
2771441 스프링 부트도 불편한데 XYZ갤로그로 이동합니다. 11.08 45 0
2771439 I/O 장치함수에도 클라이언트/서버 아키텍처가 있는 듯.. +abcd3421갤로그로 이동합니다. 11.08 32 0
2771437 알기는 어려운데 Low Level 들이 Byte 공학이기는 함. [1] +abcd3421갤로그로 이동합니다. 11.08 52 0
2771436 으아 러스트 시켜줘 마이크로 서비스 해줘 러스트 러스트 [2] 프갤러(223.32) 11.08 40 0
2771435 러시아 때문에 러빠라고 못하고 러스트빠라고 해야 [2] 프갤러(223.32) 11.08 43 0
갤러리 내부 검색
제목+내용게시물 정렬 옵션

오른쪽 컨텐츠 영역

실시간 베스트

1/8

뉴스

디시미디어

디시이슈

1/2