디시인사이드 갤러리

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

갤러리 본문 영역

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

ㅆㅇㅆ(124.216) 2024.09.21 16:38:25
조회 94 추천 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 - -
2771743 딱국아 왜나대 쳐와바 [3] 프갤러(119.172) 11.09 53 0
2771741 자연광에 몸뎁히며 자는 강아지.jpg ㅇㅇ(123.213) 11.09 61 1
2771739 노드 서버와 AI 그림- 프갤러(121.172) 11.09 61 0
2771734 한국판 개발자들 현실 알려드림 [2] 프갤러(59.18) 11.09 129 0
2771733 에반게리온잼냐 [8] 골방외톨이갤로그로 이동합니다. 11.09 43 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
2771709 이거 재귀말고 답없지않냐? [9] 프갤러(119.172) 11.09 120 0
2771708 도축할 젊은 한남이 없자 노선 틀기 시작한 한녀들 프갤러(113.192) 11.09 60 0
2771707 지금 업계 상황보니깐 닥치고 입사가 맞는듯 [2] 프갤러(39.120) 11.09 88 0
2771706 다시 만들러 가야쥐. [2] 프갤러(121.172) 11.09 63 0
2771705 프론트 고찰- 프갤러(121.172) 11.09 55 2
2771704 설물리도 3대장에 넣어야되겠구나 [2] 딱국(118.235) 11.09 49 0
2771703 구현하는 대상도 딱 내가 수학이고 쟨 물리임 딱국(118.235) 11.09 24 0
2771702 Rx 설물리같네. 난 설수리고 ㅇㅇㅇ 딱국(118.235) 11.09 33 0
2771701 길냥이 따라오길레 주워왔음 ♥함께일때우린아무것도두려울것이없냥덩♥갤로그로 이동합니다. 11.09 53 0
2771700 저런새끼를 액셀러레이터라고 부르지 [7] 딱국(118.235) 11.09 79 0
2771699 컴공만큼 거품껴있는 학과는 없는 것 같다 [1] ㅇㅇ(211.36) 11.09 76 0
2771698 저새끼 4차원으로 뻗어나가게 냅둬. 저러다 얻어걸린다 딱국(118.235) 11.09 20 0
2771697 Rx 쟤가 하는걸 바깥에선 메타버스라고 부른다 딱국(118.235) 11.09 28 0
2771696 프붕이들 츤데레 쩌네 ㅇㅇ갤로그로 이동합니다. 11.09 30 0
2771695 크하악! 이거 누가 그렸냐?! [1] 프갤러(121.172) 11.09 72 0
2771694 저새끼 또라이여도 우연히 맞아버릴거임 딱국(118.235) 11.09 28 0
2771693 새벽은 발명도둑잡기 오전은 Rx 프갤러(125.177) 11.09 25 0
2771692 Rx 주식이나 코인발행하면 나한테 제일먼저 알려라 딱국(118.235) 11.09 29 0
2771691 Rx 쟤 해내겠네. 맥을 짚었다. 뭐라도 성공한다 [1] 딱국(118.235) 11.09 38 0
2771690 또 잔다 ~ ㅇㅅㅇ ㅇㅅㅇ(121.157) 11.09 27 0
2771689 Rx 학문 ] 엔트로피로 보는 다중우주가 틀린 이유- 프갤러(121.172) 11.09 44 1
2771688 가짜개발자들 특) 2진수 8진수 16진수 변환코드 못짬 [1] 프갤러(119.172) 11.09 46 0
2771687 세상 창조. 프로그래밍으로 이뤄내다- Rx 프갤러(121.172) 11.09 45 0
2771686 토요일 아침에 코히를 마십니다. [2] 40대프린이(118.235) 11.09 47 0
2771685 아직도 가짜개발자들 설치고다니냐? [2] 프갤러(119.172) 11.09 70 0
2771684 2진수 8진수 16진수 변환 코드 만들어보면 꽤 도움될듯 프갤러(119.172) 11.09 43 0
2771683 C# 코돌이갤로그로 이동합니다. 11.09 66 4
2771682 Rx - 일어날 시간 아니야? [1] 프갤러(121.172) 11.09 43 1
2771681 여기말고 진짜 프갤다운 갤러리 없음? [6] 프갤러(59.25) 11.09 66 0
2771680 C++ 프로젝트가 제일 지저분함 [1] 프갤러(125.177) 11.09 100 0
2771679 마음울적한날에~ [3] 멍청한유라ㅋ갤로그로 이동합니다. 11.09 54 0
2771678 발도잡 드디어 중립 잘 지키는구나 ㅇㅇ 너무 보수로만가지도 말고 딱국(118.235) 11.09 25 0
2771676 아예 [3] 도리스아(112.170) 11.09 50 0
2771675 벌써 잘 시간이네.. [1] ㅇㅅㅇ(121.157) 11.09 38 0
2771674 광주전남사는김대중을 [1] 미쿠쟝마지스키갤로그로 이동합니다. 11.09 49 2
2771673 디코 신규 멤버 모집 중 [1] 딱님갤로그로 이동합니다. 11.09 52 0
2771672 하루 한 번 헤르미온느 찬양 헤르 미온느갤로그로 이동합니다. 11.09 49 0
2771669 요즘 사람 뽑는 회사 있음? [2] 프갤러(117.110) 11.09 103 0
2771659 입문자가 개발하기 좋은 노트북 추천좀 [8] ㅇㅇ(117.111) 11.09 132 1
2771653 방구석 덕후들 쓰레기들 돈먹고 돈먹기 대회 도리스아(112.170) 11.09 30 0
2771647 윤석열 국민의힘 개 적페 우크라 지원은 차기 정부서 지속되어야 도리스아(112.170) 11.09 28 0
갤러리 내부 검색
제목+내용게시물 정렬 옵션

오른쪽 컨텐츠 영역

실시간 베스트

1/8

뉴스

디시미디어

디시이슈

1/2