summaryrefslogtreecommitdiff
path: root/GameCode/TagManager.cs
diff options
context:
space:
mode:
authorchai <215380520@qq.com>2024-05-19 16:05:01 +0800
committerchai <215380520@qq.com>2024-05-19 16:05:01 +0800
commitc5f145786f4c6d2fe4bea831dfc16e52228920a5 (patch)
treea6ead7ea8266c767d58ed0f816dcd7a1dd75bd65 /GameCode/TagManager.cs
parent48b64e573a1709dc923cb9162b55be0246b3ff63 (diff)
* move
Diffstat (limited to 'GameCode/TagManager.cs')
-rw-r--r--GameCode/TagManager.cs223
1 files changed, 0 insertions, 223 deletions
diff --git a/GameCode/TagManager.cs b/GameCode/TagManager.cs
deleted file mode 100644
index 2c4c835..0000000
--- a/GameCode/TagManager.cs
+++ /dev/null
@@ -1,223 +0,0 @@
-using System;
-using System.Collections.Generic;
-using UnityEngine;
-
-public class TagManager : MonoBehaviour
-{
- public enum ETag
- {
- PlayerOwned,
- EnemyOwned,
- Player,
- CastleCenter,
- MeeleFighter,
- RangedFighter,
- Flying,
- PlayerUnit,
- Building,
- SiegeWeapon,
- AUTO_Alive,
- AUTO_KnockedOutAndHealOnDawn,
- Wall,
- InfrastructureEconomy,
- TakesReducedDamageFromPlayerAttacks,
- PracticeTargets,
- FastMoving,
- ArmoredAgainstRanged,
- VulnerableVsRanged,
- Monster,
- House,
- WallOrTower,
- AUTO_Commanded,
- TakesIncreasedDamageFromTowers,
- Tower,
- AUTO_NoReviveNextMorning,
- PlayerOwnedPriorityTarget,
- BlockableEnemyProjectile,
- Boss,
- UselessWallThatDoesNotBlockPath
- }
-
- public static TagManager instance;
-
- [SerializeField]
- private Dictionary<ETag, List<TaggedObject>> dictonaryOfListsOfTaggedObjects;
-
- private List<TaggedObject> tempTaggedObjectList = new List<TaggedObject>();
-
- private List<TaggedObject> bufferedPlayerUnits = new List<TaggedObject>();
-
- private List<TaggedObject> bufferedEnemyUnits = new List<TaggedObject>();
-
- private List<TaggedObject> bufferedPlayers = new List<TaggedObject>();
-
- public List<BuildingInteractor> playerBuildingInteractors = new List<BuildingInteractor>();
-
- public List<Coin> freeCoins = new List<Coin>();
-
- public List<Coin> coins = new List<Coin>();
-
- public IReadOnlyList<TaggedObject> PlayerUnits => bufferedPlayerUnits.AsReadOnly();
-
- public IReadOnlyList<TaggedObject> EnemyUnits => bufferedEnemyUnits.AsReadOnly();
-
- public IReadOnlyList<TaggedObject> Players => bufferedPlayers.AsReadOnly();
-
- private void OnEnable()
- {
- instance = this;
- dictonaryOfListsOfTaggedObjects = new Dictionary<ETag, List<TaggedObject>>();
- for (int i = 0; i < Enum.GetValues(typeof(ETag)).Length; i++)
- {
- dictonaryOfListsOfTaggedObjects.Add((ETag)i, new List<TaggedObject>());
- }
- }
-
- public void AddTaggedObject(TaggedObject _taggedObject)
- {
- foreach (ETag tag in _taggedObject.Tags)
- {
- AddTag(_taggedObject, tag);
- if (tag == ETag.EnemyOwned)
- {
- bufferedEnemyUnits.Add(_taggedObject);
- }
- if (tag == ETag.PlayerUnit)
- {
- bufferedPlayerUnits.Add(_taggedObject);
- }
- if (tag == ETag.Player)
- {
- bufferedPlayers.Add(_taggedObject);
- }
- }
- }
-
- public void RemoveTaggedObject(TaggedObject _taggedObject)
- {
- if (bufferedEnemyUnits.Contains(_taggedObject))
- {
- bufferedEnemyUnits.Remove(_taggedObject);
- }
- if (bufferedPlayerUnits.Contains(_taggedObject))
- {
- bufferedPlayerUnits.Remove(_taggedObject);
- }
- foreach (ETag tag in _taggedObject.Tags)
- {
- RemoveTag(_taggedObject, tag);
- }
- }
-
- public void AddTag(TaggedObject _taggedObject, ETag _tag)
- {
- List<TaggedObject> list = dictonaryOfListsOfTaggedObjects[_tag];
- if (!list.Contains(_taggedObject))
- {
- list.Add(_taggedObject);
- }
- }
-
- public void RemoveTag(TaggedObject _taggedObject, ETag _tag)
- {
- List<TaggedObject> list = dictonaryOfListsOfTaggedObjects[_tag];
- if (list.Contains(_taggedObject))
- {
- list.Remove(_taggedObject);
- }
- }
-
- public int CountObjectsWithTag(ETag _tag)
- {
- return dictonaryOfListsOfTaggedObjects[_tag].Count;
- }
-
- public void FindAllTaggedObjectsWithTags(List<TaggedObject> _listToPolulate, List<ETag> _mustHaveTags, List<ETag> _mayNotHaveTags)
- {
- _listToPolulate.Clear();
- if (_mustHaveTags.Count <= 0)
- {
- return;
- }
- List<TaggedObject> list = null;
- int num = int.MaxValue;
- for (int i = 0; i < _mustHaveTags.Count; i++)
- {
- List<TaggedObject> list2 = dictonaryOfListsOfTaggedObjects[_mustHaveTags[i]];
- if (list2.Count < num)
- {
- list = list2;
- num = list2.Count;
- }
- }
- if (list.Count == 0)
- {
- return;
- }
- for (int j = 0; j < list.Count; j++)
- {
- TaggedObject taggedObject = list[j];
- List<ETag> tags = taggedObject.Tags;
- bool flag = true;
- if (_mustHaveTags != null)
- {
- for (int k = 0; k < _mustHaveTags.Count; k++)
- {
- if (!tags.Contains(_mustHaveTags[k]))
- {
- flag = false;
- break;
- }
- }
- }
- if (_mayNotHaveTags != null)
- {
- for (int l = 0; l < _mayNotHaveTags.Count; l++)
- {
- if (tags.Contains(_mayNotHaveTags[l]))
- {
- flag = false;
- break;
- }
- }
- }
- if (flag)
- {
- _listToPolulate.Add(taggedObject);
- }
- }
- }
-
- public TaggedObject FindClosestTaggedObjectWithTags(Vector3 _position, List<ETag> _mustHaveTags, List<ETag> _mayNotHaveTags)
- {
- tempTaggedObjectList.Clear();
- FindAllTaggedObjectsWithTags(tempTaggedObjectList, _mustHaveTags, _mayNotHaveTags);
- TaggedObject result = null;
- float num = float.MaxValue;
- for (int i = 0; i < tempTaggedObjectList.Count; i++)
- {
- TaggedObject taggedObject = tempTaggedObjectList[i];
- float num2 = MeasureDistanceToTaggedObject(taggedObject, _position);
- if (num2 < num)
- {
- num = num2;
- result = taggedObject;
- }
- }
- return result;
- }
-
- public float MeasureDistanceToTaggedObject(TaggedObject _taggedObj, Vector3 _pos)
- {
- if (_taggedObj.colliderForBigOjectsToMeasureDistance != null)
- {
- return (_taggedObj.colliderForBigOjectsToMeasureDistance.ClosestPoint(_pos) - _pos).magnitude;
- }
- return (_taggedObj.transform.position - _pos).magnitude;
- }
-
- public int CountAllTaggedObjectsWithTag(ETag _mustHaveTag)
- {
- return dictonaryOfListsOfTaggedObjects[_mustHaveTag].Count;
- }
-}