디시인사이드 갤러리

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

갤러리 본문 영역

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

ㅆㅇㅆ(124.216) 2024.09.21 16:38:25
조회 96 추천 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 - -
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
2771434 IT계의 똥퍼 = 엔지니어/QA/전산직/MES/임베디드 [4] 프갤러(211.197) 11.08 109 0
2771432 일본회사는 무조건 yes라고 답해야합니다 [3] 프로외노자갤로그로 이동합니다. 11.08 144 0
2771431 얘들아 이거 단순한건데 같이 고민해보자 [6] 딱국(106.246) 11.08 69 0
2771430 로그 파일에다 기록하면 보기 안불편함? 프갤러(172.225) 11.08 39 0
2771429 러시아 혐오병 루소포비아 반대 도리스아(112.170) 11.08 26 0
2771428 기괴한 사이트 개발해서 주아갤로그로 이동합니다. 11.08 33 0
2771427 내일 안경 맞추러 가야지 [1] 주아갤로그로 이동합니다. 11.08 37 0
2771425 내일 엄마랑 놀거야 재현갤로그로 이동합니다. 11.08 30 0
2771423 ‘쿠팡 청문회’ 국회 수면 아래로, 애타는 유족 발명도둑잡기갤로그로 이동합니다. 11.08 33 0
2771422 고수들 질문좀 제발 급해 지리기 직전 [7] 프갤러(112.165) 11.08 96 0
2771421 Si,Sm = it계의 노가다,안전요원 ♥함께일때우린아무것도두려울것이없냥덩♥갤로그로 이동합니다. 11.08 85 0
2771420 재택 시켜주면 하루에 15시간 일할수 있음 [4] 프갤러(14.39) 11.08 58 0
2771419 전산직 = it계의 똥퍼,환경미화 [1] ♥함께일때우린아무것도두려울것이없냥덩♥갤로그로 이동합니다. 11.08 105 0
2771418 클라우드 엔지니어가 설정작업기사인 듯. +abcd3421갤로그로 이동합니다. 11.08 35 1
2771417 클라우드 엔지니어가 하는 일이 SaaS는 아닌 듯. +abcd3421갤로그로 이동합니다. 11.08 35 0
2771416 Catgpt 안되는데? Snob갤로그로 이동합니다. 11.08 37 0
2771415 정부사이트 인증하니깐 google.com으로 리다이랙션 헬마스터갤로그로 이동합니다. 11.08 37 0
2771414 조선특 가상키패드 이딴걸 왜쓰는거지? 헬마스터갤로그로 이동합니다. 11.08 36 0
2771413 다들 외투 뭐입음?? 반팔에 패딩 딱좋음?? ㅇㅇ(123.213) 11.08 18 0
2771412 러시아 십새끼 도리스아(112.170) 11.08 36 0
2771411 Oracle 에서 SaaS 설명 이렇는데, CI/CD 맞는 듯. +abcd3421갤로그로 이동합니다. 11.08 32 0
2771410 매일 웨이트랑 프로그래밍만 하면 어떻게 되냐? [1] 프갤러(14.39) 11.08 36 0
2771409 클라우드 환경에서 SaaS 는 CI/CD 환경인지 모르겠다. +abcd3421갤로그로 이동합니다. 11.08 41 0
2771408 학생인데, 어떤걸 만들면 내가 작성한 코드가 1%도 안됨 [2] 프갤러(211.59) 11.08 49 0
2771407 컴공인데 싸피같은 국비교육 듣는거 어떰? ㅇㅇ(117.111) 11.08 58 0
2771406 내 친구 다다음주 월요일에 입대함ㅋㅋ 진짜 존나 웃김 [1] ㅇㅇ(223.62) 11.08 44 0
2771405 집 나간 고양이 찾아옴 프갤러(223.39) 11.08 64 0
2771404 여자는 외모가 생명 [3] 프갤러(211.112) 11.08 102 0
2771403 도커 볼륨 마운트로 한참 헤맸는데 호스트->컨테이너였네 ㅇㅇ(220.87) 11.08 26 0
2771402 지금까지 봤던 개발 잘하는 사람들 공통점 [1] 프갤러(125.249) 11.08 73 0
2771401 하 포폴 uri 잘못적어서 냈었네 ㅇㅇ(58.140) 11.08 40 0
2771400 우울해요 [3] 멍청한유라ㅋ갤로그로 이동합니다. 11.08 75 0
2771399 노드에서 스프링으로 세탁하려면 어떻게 해야함 [4] 프갤러(211.234) 11.08 82 0
2771398 집을 결국옮겨야하네요 [4] 멍청한유라ㅋ갤로그로 이동합니다. 11.08 56 0
2771397 요즘 딥페이크로 백종원씨가 총쏘는 영상 돌더라 [2] 헬마스터갤로그로 이동합니다. 11.08 66 0
2771396 못생기고 뚱뚱하고 성격 병신같은 늙은 하프홍어년 있는데 [2] Snob갤로그로 이동합니다. 11.08 51 0
2771394 일본 젊은이들이 목욕캔슬을 하는 이유 발명도둑잡기갤로그로 이동합니다. 11.08 49 0
2771393 난 왜 선언형 ui가 존나 불편하지 [1] 프갤러(172.225) 11.08 49 0
2771392 [인텔 / 한국전파진흥협회] 인텔 인공지능 응용앱 크리에이터 양성과정 ( 프갤러(14.32) 11.08 43 0
2771391 40대 고졸무직히키코모리가 웹,앱 개발하면 천억대 부자 가능? [2] ㅇㅇ(223.38) 11.08 86 0
2771390 좆소에도 합격못해서 헐떡거리는 프붕이 있나 [4] 프갤러(218.238) 11.08 100 0
2771389 전산직 하는일 [10] ㅇㅇ(118.235) 11.08 135 0
2771388 도람뿌가 자바로 안드로이드 게임 개발했으면 좋겠다 좋은날씨갤로그로 이동합니다. 11.08 31 0
2771387 얘봐바 자연광에 따듯하게 몸뎁히며 자고있어. 개귀여움 ㅇㅇ(123.213) 11.08 45 1
2771386 스프링에서 서비스 인터페이스로 따로 빼는거 이해가 안감 [22] 프갤러(222.112) 11.08 247 2
2771383 자바 컬렉션 안쓰다보니 계속 까먹게되네 ㅇㅇ(39.7) 11.08 31 0
2771382 쿠버네티스만 할줄알면 풀스택 배포 껌임? [5] ㅇㅇ(112.161) 11.08 88 0
갤러리 내부 검색
제목+내용게시물 정렬 옵션

오른쪽 컨텐츠 영역

실시간 베스트

1/8

뉴스

디시미디어

디시이슈

1/2