디시인사이드 갤러리

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

갤러리 본문 영역

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

ㅆㅇㅆ(124.216) 2024.09.21 16:38:25
조회 92 추천 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 - -
2771853 후하후하 ㅇㅅㅇ [4] 나트륨찡갤로그로 이동합니다. 11.09 40 0
2771852 딱국이 본다 ㅇㅅㅇ [5] 나트륨찡갤로그로 이동합니다. 11.09 53 0
2771851 맞아 이 우주는 벡터야. 그래서 엑셀이 방향바꾸잖아 [5] 딱국(118.235) 11.09 45 0
2771850 솔직히 자가 있으면 개발 조무사도 나쁜 직업은 아님. 프갤러(125.249) 11.09 39 0
2771848 나토리 사랑해. 너가 저번에 무슨상처를 받았길래 그렇게됐냐고해줘서 딱국(118.235) 11.09 27 0
2771846 님들 수행평가 도와주세요 프갤러(211.215) 11.09 39 0
2771845 나토리 나 내가 어떤 상처를 입었는지 알았어 수컷에대한 적대심 딱국(118.235) 11.09 39 0
2771844 아이스크림 픽 ㅁㅌㅊ?? ㅇㅇ(223.62) 11.09 40 1
2771842 돈은 없지만 pc랑 다 팔면 잔고 많이 나온다. 도리스아(14.35) 11.09 29 0
2771840 사람을 통솔한다는게 뭔가 두렵다 [4] 공기역학갤로그로 이동합니다. 11.09 72 0
2771837 저녁 공기는 왜 나님을 설레게 하는걸깡? [1] ♥함께일때우린아무것도두려울것이없냥덩♥갤로그로 이동합니다. 11.09 46 1
2771836 형님들 일본 it 취업 어떻게 생각하시나요 [3] ㅇㅇ(125.184) 11.09 108 1
2771834 전 죄 지은적 없습니다. 도리스아(112.170) 11.09 22 0
2771830 돈이 없는게 한이다... 시발 너무 좆같다 [4] ㅇㅇ(123.213) 11.09 85 0
2771825 동아리장 부숴졌다 [9] 공기역학갤로그로 이동합니다. 11.09 80 0
2771823 요즘 컴공 개발자경쟁률 망했는데 뭘로가는게대세입니까 [2] ㅇㅇ갤로그로 이동합니다. 11.09 114 0
2771822 사진 개인정보에 스티커 붙여서 가리는거 무슨 앱이죠? 발명도둑잡기갤로그로 이동합니다. 11.09 78 0
2771817 스위치 수리 하다가 뒷목 잡게 생겼음. 도리스아(14.35) 11.09 43 0
2771809 이 기능은 잘 못 코딩됐어요 [1] 헬마스터갤로그로 이동합니다. 11.09 44 0
2771807 대방어와 슈톨렌의 계절이 오는구나... 낭만이다. ㅇㅇ(123.213) 11.09 25 0
2771802 엄마랑 안구건조증 이야기 한뒤로 쇼츠에 자꾸 [1] 재현갤로그로 이동합니다. 11.09 37 0
2771800 야 근데 진짜냐? [3] ㅇㅇ(115.138) 11.09 83 0
2771799 스펙평가좀...진지 [2] 프갤러(118.235) 11.09 42 0
2771796 kbs 노무현 [1] 프갤러(14.43) 11.09 43 0
2771792 너네 여행 동선 플래너 같은거 왜 안만들어? [2] 프갤러(14.39) 11.09 48 0
2771788 프로텍티드? 러스트에는 그런거 없는데? [2] 프갤러(223.32) 11.09 73 1
2771783 버스비 1600으로 올랐더라 ㅇㅇ(211.235) 11.09 25 0
2771781 영어 못하면서 코딩한다고 깝치는 놈들은 [5] 푸루린갤로그로 이동합니다. 11.09 104 1
2771780 protected도 못쓰는놈이 어찌 개발자를하겠다고 ㅋㅋ [1] 프갤러(119.172) 11.09 67 0
2771777 28살 프론트 평가좀 [13] 프갤러(211.177) 11.09 128 0
2771774 여기 혹시 ㄴㄱㄴ ㅎㄹㅇㅋ 쓴책 본사람있냐? [1] ㅇㅇ(125.240) 11.09 28 0
2771773 Synoeca 님 방명록 확인해주세요 [1] 딱님갤로그로 이동합니다. 11.09 40 0
2771771 인생 조진거 같다... 형들 조언좀 [5] 프갤러(218.149) 11.09 102 0
2771768 라이브러리 왜 다하나같이 나사가 빠져있지 [10] 공기역학갤로그로 이동합니다. 11.09 93 0
2771767 "킹갓제네럴엠페러충무공마제스티하이퍼울트라판타스틱익스트림지니어스화룡정점 발명도둑잡기갤로그로 이동합니다. 11.09 28 0
2771764 학점은행제 학사에서 방통대 편입 어케 생각함 [1] ㅇㅇ(116.38) 11.09 39 0
2771755 Ghost in the machine [1] 발명도둑잡기갤로그로 이동합니다. 11.09 27 0
2771750 엔지니어 라는 타이틀이 절대쉬운게아닌데 [3] 프갤러(211.36) 11.09 92 1
2771748 면접때 mbti 물어보길래 [1] 프갤러(58.238) 11.09 61 0
2771747 생물체는 코딩해서 만든게 맞는듯 뉴진파갤로그로 이동합니다. 11.09 43 0
2771745 "퇴사한 직원은 에이스였다" [3] 발명도둑잡기갤로그로 이동합니다. 11.09 126 0
2771743 딱국아 왜나대 쳐와바 [3] 프갤러(119.172) 11.09 52 0
2771741 자연광에 몸뎁히며 자는 강아지.jpg ㅇㅇ(123.213) 11.09 61 1
2771739 노드 서버와 AI 그림- 프갤러(121.172) 11.09 61 0
2771734 한국판 개발자들 현실 알려드림 [2] 프갤러(59.18) 11.09 128 0
2771733 에반게리온잼냐 [8] 골방외톨이갤로그로 이동합니다. 11.09 42 0
2771731 발명대회 작품 중 나도 수년 전에 썼던 내용 발명도둑잡기갤로그로 이동합니다. 11.09 31 0
2771727 22살에 제대로시작하면 늦은거임? [4] 프갤러(118.235) 11.09 88 0
2771723 맑고 선선한 가을 주말 우리 프붕이들은 열심히 40대프린이(220.87) 11.09 28 0
2771714 Rx The Virus의 서클 버튼만 가져와서 리뉴얼 사이트 만들고 있당 프갤러(121.172) 11.09 45 1
갤러리 내부 검색
제목+내용게시물 정렬 옵션

오른쪽 컨텐츠 영역

실시간 베스트

1/8

뉴스

디시미디어

디시이슈

1/2