디시인사이드 갤러리

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

갤러리 본문 영역

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

ㅆㅇㅆ(124.216) 2024.09.21 16:38:25
조회 97 추천 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 - -
2770852 우리 사회에 낭만이 사라졌다. 관용과 용서는 어디로 갔는가. ㅇㅇ(123.213) 11.06 43 0
2770850 ㅅㅂ 내꿈은 si 개발자인데 sm취업했음 [1] 프갤러(39.120) 11.06 119 0
2770849 학벌은 진짜 꼬리표인것같음 [1] 프갤러(221.158) 11.06 110 0
2770847 선생님들 자바 코드좀 질문드려요. [1] ㅇㅇ(125.242) 11.06 71 0
2770846 맥 커맨드 커서 기능 맥쓴지 4년 만에 깨달음 [3] ㅇㅇ갤로그로 이동합니다. 11.06 66 0
2770844 2050년에는 지금대비 GDP 28% 감소한다는데 그에엑(121.134) 11.06 47 0
2770843 asp.net으로 취업해서 경력 좀 쌓고 [2] 프갤러(39.120) 11.06 64 0
2770842 흠.. 나님 예언대로 트럼프 당선 ♥인생무상냥덩♥갤로그로 이동합니다. 11.06 44 0
2770841 트럼프는 장사꾼이기 때문에 뺏는 게 있으면 프갤러(106.101) 11.06 48 0
2770840 학점이 왜 이렇게 낮아요? ☜ 컴공한테는 ㅈ도 안물어보는 면접질문 [4] ㅇㅇ(120.51) 11.06 186 0
2770839 콘서타가 내 인생 절반을 가져가서 끊을까 고민이다 ㅇㅅㅇ [3] ㅇㅇ(123.213) 11.06 59 0
2770838 불합격 문자는 어떻게 보내도 기분이 나쁘겠지?? [4] 창업게이(106.101) 11.06 71 0
2770837 딱국이랑 딱군이랑 누가 더 낮냐 프갤러(140.248) 11.06 45 0
2770835 미국은 강한 대통령을 선택했군 헬마스터갤로그로 이동합니다. 11.06 56 0
2770834 코딩할때마다 백만개의 인격이 충돌함 [5] 공기역학갤로그로 이동합니다. 11.06 95 0
2770833 지금 한국 경제 상황 안좋아? [2] ㅇㅇ(210.94) 11.06 83 0
2770832 미 대선 초박빙이라더니 [3] 프갤러(59.14) 11.06 120 0
2770831 가디단 구디단은 진짜 특유의 우울한 분위기가 있음 [2] 창업게이(218.235) 11.06 105 0
2770830 si가 구로, 가산에 주로 있냐? [2] N돌핀갤로그로 이동합니다. 11.06 130 0
2770829 교수님이 대학원가라는데 조언좀 해주셈 [3] 프갤러(220.68) 11.06 90 0
2770827 차문이 열리고: 타!! 너가 없으면 세계 멸망한다!! [1] 딱국(118.235) 11.06 69 0
2770826 딱군 요즘 왜 프갤 안 오냐고 ㅇㅅㅇ 프갤러(140.248) 11.06 47 0
2770825 윈도우 로딩 질문해도 됨? 프갤러(220.68) 11.06 60 0
2770823 개발자 근무지 추천좀 [4] 프갤러(59.18) 11.06 138 0
2770822 호돈지뉴시절 브라질이 지단앙리 프랑스에 진걸 명심해 [2] 딱국(118.235) 11.06 66 0
2770821 preA라도 받은 스타트업은 대부분이 명문대라 [4] 창업게이(218.235) 11.06 108 0
2770820 결국 모로코 다니는 애들 잘들어. 좋은 회사분위기란 [1] 딱국(118.235) 11.06 90 0
2770819 어 옆새끼가 갈락티코니 애들 믿자 딱국(118.235) 11.06 45 0
2770818 오랜만에 재택근무중 hrin(220.120) 11.06 31 0
2770817 내가 회사 들어갈 때 참고하던 것 발명도둑잡기갤로그로 이동합니다. 11.06 52 0
2770816 한국식 공화정이 문제가, 책임을 아무도 안짐 딱국(118.235) 11.06 92 0
2770815 좆뉴비들 회사 입사할 때 이건 보고 가라 ㅇㅇ 프갤러(203.230) 11.06 79 0
2770814 린공지능 공부할때 공학수학은 몰라도되지? [4] 프갤러(121.166) 11.06 92 0
2770813 10000원인데 11000원이라고 해도 암말도 못하고 결제하는 찐따인생 ㅇㅇ(223.62) 11.06 31 1
2770812 회사에서 자바 갈아엎고 노드나 파이썬으로 전환한다는데 [4] ㅇㅇ(211.36) 11.06 136 0
2770811 흑백요리사 보니깐 팀플은 독재가 이기더라 [3] 헬마스터갤로그로 이동합니다. 11.06 98 1
2770810 자료구조를 2번 공부하기도 하냐??? [4] 40대프린이(118.235) 11.06 117 0
2770809 흑백요리사 안대까지만 재밋군 [2] 헬마스터갤로그로 이동합니다. 11.06 56 0
2770808 앱개발 혼자 공부 할라는데 어려움? 프갤러(211.192) 11.06 41 0
2770806 개발은 직업이 아니다 "라이프스타일"이다 창업게이(218.235) 11.06 50 0
2770805 취업 얼마나 힘들어? [4] 지갤러(14.43) 11.06 218 1
2770804 40먹은 백수가 아침에 일어나서 엘든링하면 [12] 40대프린이(118.235) 11.06 140 0
2770802 금융권 가고싶은데 싸피하는게 좋을까 4대은행 국비교육 듣는게 좋을까? ㅇㅇ(117.111) 11.06 98 0
2770801 3NF BCNF는 또 뭐노 ㅅㅂ [7] Synoeca갤로그로 이동합니다. 11.06 98 0
2770800 오늘 패딩 입을 날씨 아니냐?? 방금 공동현관 나갔다가 바로 빠꾸중 [2] ㅇㅇ(223.62) 11.06 54 0
2770799 쿠버 가기전에 도커스웜 써야겠다 [3] 딱국(106.246) 11.06 68 0
2770798 념글에 db관련해서 하나 말해준다. [9] 프갤러(126.114) 11.06 136 0
2770797 유니티3d개발 질문 [2] 프갤러(223.39) 11.06 84 0
2770796 자바에 클로저 없어 병신아 [1] 프갤러(126.114) 11.06 76 0
2770795 나 떡볶이 하나 먹겠다고 지하철타고 왕복 1시간30분 다녀올거임 [2] ㅇㅇ(123.213) 11.06 60 0
갤러리 내부 검색
제목+내용게시물 정렬 옵션

오른쪽 컨텐츠 영역

실시간 베스트

1/8

뉴스

디시미디어

디시이슈

1/2