디시인사이드 갤러리

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

갤러리 본문 영역

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

ㅆㅇㅆ(124.216) 2024.09.21 16:38:25
조회 107 추천 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
본문 보기

하단 갤러리 리스트 영역

왼쪽 컨텐츠 영역

갤러리 리스트 영역

갤러리 리스트
번호 제목 글쓴이 작성일 조회 추천
설문 현역으로 군대 안 간게 의아한 스타는? 운영자 25/06/30 - -
AD 휴대폰 바꿀까? 특가 구매 찬스! 운영자 25/07/02 - -
2869509 Ada, 러스트의 안전성 수준을 동일하게 제약할 때 루비갤로그로 이동합니다. 07.04 41 0
2869508 러스트 극성 지지자들의 '발작' 포인트 요약 루비갤로그로 이동합니다. 07.04 36 0
2869507 Ada vs. Rust: 동일 안전성 수준 코드 비교 루비갤로그로 이동합니다. 07.04 48 0
2869504 Rust 코드 컴파일 논란: 명백한 허위 주장과 인신공격에 대한 반박 루비갤로그로 이동합니다. 07.04 43 0
2869502 러스트 설치도 못하는 저능아의 마지막 도피처. "llm 환각" 프갤러(110.8) 07.04 39 1
2869501 머리가 너무 복잡하다. 그냥 다 놓고 싶다. [1] ㅇㅇ(223.38) 07.03 71 0
2869500 이력서 20개 찢고옴 [1] 프갤러(221.163) 07.03 60 0
2869499 의뢰인이 자기가 해본 자동 매매 프로그램중 내 것이 제일 [4] ㅆㅇㅆ(124.216) 07.03 67 0
2869498 러스트 중독 분석: 나르시시즘, 에코 챔버, 트라우마 본딩, 매몰 비용 루비갤로그로 이동합니다. 07.03 42 0
2869496 이런 사람들은 지금 나이 한 50 넘게 먹었으려나 [1] 루도그담당(58.239) 07.03 68 0
2869495 낼 술마셔야좌우징좌우지징 [1] ♥냥덩이♥갤로그로 이동합니다. 07.03 42 0
2869494 요즘 TDD 선구자 캔트백도 바이브 코딩 연구하더라 ㅆㅇㅆ(124.216) 07.03 44 0
2869493 헤일스버그의 파스칼이나 델파이에 관한 최근 생각 발명도둑잡기(118.216) 07.03 30 0
2869492 러까의 유일한 구원자 llm도 맛이 가버린 모양이군 ㅋㅋ 프갤러(110.8) 07.03 31 0
2869491 델파이, 파스칼 안쓰는 이유, 메모리 안전 발명도둑잡기(118.216) 07.03 54 0
2869490 FreePascal 아이디 보니 드는 생각 발명도둑잡기(118.216) 07.03 42 0
2869489 국산 냥덩❤+ ♥냥덩이♥갤로그로 이동합니다. 07.03 39 0
2869488 퍼프 대디 파티 참석했던 사회 저명인사 명단 발명도둑잡기(118.216) 07.03 53 0
2869487 러스트에 영혼을 팔은 자의 최후~~~ 루비갤로그로 이동합니다. 07.03 34 3
2869486 내가 몇 년 전 휴대폰 카메라로 동공 크기까지 감시할 거란 글 발명도둑잡기(118.216) 07.03 29 0
2869485 [단독] "이상민 자택서 깜짝 놀랄 거액 발견"…특검, 조사 착수 발명도둑잡기(118.216) 07.03 46 0
2869484 Rust 언어는 예수 믿어야 천국간다고 강요하는 언어입니다 FreePascal갤로그로 이동합니다. 07.03 59 1
2869482 웹백엔드 vs 게임서버 닥전임? ㅇㅇ(211.176) 07.03 33 0
2869480 러빠가 무논리로 내 욕하는 이유~ 루비갤로그로 이동합니다. 07.03 29 0
2869479 땀 닦아주실분? [2] ♥냥덩이♥갤로그로 이동합니다. 07.03 41 0
2869477 동일한 안전성 기준을 볼 때 Ada가 Rust보다 쉽다는... ㅎㅎ 루비갤로그로 이동합니다. 07.03 45 0
2869476 루비와 류류 냥덩 [8] 개멍청한유라갤로그로 이동합니다. 07.03 60 1
2869475 러스트의 보로 체커(빌림 검사기) 규칙에 명백히 위배되기 때문에 루비갤로그로 이동합니다. 07.03 33 0
2869474 냥덩이 허위사실 유포했던 이재명 성범죄 진실 발명도둑잡기(118.216) 07.03 62 0
2869472 공산한국 2025 [1] ♥냥덩이♥갤로그로 이동합니다. 07.03 40 0
2869470 나님 통찰력 ㄱㅆㅅㅌㅊ.. [1] ♥냥덩이♥갤로그로 이동합니다. 07.03 39 0
2869469 ㄴㅏ님 누엇어오..⭐+ ♥냥덩이♥갤로그로 이동합니다. 07.03 31 0
2869467 소형 피씨스피커는 페블 v2, v3가 좋다 발명도둑잡기(118.216) 07.03 31 0
2869465 acm 인강 들으려고했는데 여기 로그인 필수네 프갤러(106.102) 07.03 28 0
2869464 ai가 뱉는 말이면 검증도 안하고 물고 빨면서 대학원 ㅇㅈㄹ ㅋㅋㅋ 프갤러(110.8) 07.03 39 0
2869463 도둑맞은 내 일기 관련해서 연쇄살인이 난 것 같은데 영화 <커미션> 발명도둑잡기(118.216) 07.03 60 0
2869462 둘 중 하나지. 러스트 못배우는 열등감에 그냥 정신승리이거나 프갤러(110.8) 07.03 45 0
2869461 러까의 저능함이 증명되는 순간이구나 프갤러(110.8) 07.03 44 0
2869459 인강좀 질문좀 프갤러(106.102) 07.03 26 0
2869456 프로외노자 등 일본 거주 프갤러분들 지진 대비 어떻게 하십니까 [1] 발명도둑잡기(118.216) 07.03 50 0
2869455 나경원 기체조하는 사람같지않냐? 헬마스터갤로그로 이동합니다. 07.03 63 0
2869454 ❤✨☀⭐나님 시작합니당⭐☀✨❤ ♥냥덩이♥갤로그로 이동합니다. 07.03 41 0
2869452 난 과집중이 항상 문제임에오 [2] 조루디(110.35) 07.03 58 0
2869451 시간이 빠르다에요 조루디(110.35) 07.03 34 0
2869449 요즘은 정신과약 먹고있음 [7] 조루디(110.35) 07.03 85 2
2869448 딱국 잘사냐 조루디(110.35) 07.03 57 3
2869447 "집값 안정시켜야 한다, 어떻게 세운 이재명 정부인데..." 발명도둑잡기(118.216) 07.03 70 0
2869446 하 그놈의 대용량 조루디(110.35) 07.03 43 0
2869445 나 2년차 실화냐 [2] 조루디(110.35) 07.03 58 0
2869444 오히려 자바충들이 싸지른 똥라이브러리들을 보면 러스트는 축복이다. 프갤러(27.172) 07.03 54 0
뉴스 정동원, ‘걍남자’서 임영웅과 1박 2일 캠핑 여행 "찐형제 케미" 디시트렌드 07.04
갤러리 내부 검색
제목+내용게시물 정렬 옵션

오른쪽 컨텐츠 영역

실시간 베스트

1/8

뉴스

디시미디어

디시이슈

1/2