public Actor[] FindTargets(long ownerID, Vector3 pos, float radius, TeamFlag teamFlag, TargetFlag targetFlag) { List <Actor> allActors = GetActorList(); List <Actor> list = new List <Actor>(); foreach (var item in allActors) { if (item == this) { continue; } if (Vector3.Distance(pos, item.Position) > radius) { // 超出范围 continue; } if (teamFlag == TeamFlag.ENEMY && item.UserID == ownerID) { // 要求目标是敌人 continue; } else if (teamFlag == TeamFlag.FRIENDLY && item.UserID != ownerID) { // 要求目标是友方 continue; } list.Add(item); } return(list.ToArray()); }
public void RefreshTeamList(TeamFlag team) { if (TeamFlag.None == team) { return; } List <Character> list = m_teamList[team.ToIndex()]; List <Character> editList = new List <Character>(); for (int i = 0; i < list.Count; i++) { if (null == list[i]) { editList.Add(list[i]); continue; } if (team != list[i].Team) { editList.Add(list[i]); continue; } } for (int i = 0; i < editList.Count; i++) { list.Remove(editList[i]); } }
public List <Character> GetEnemiesByRange(TeamFlag team, Vector3 position, float distance) { List <Character> targets = new List <Character>(); for (int i = 1; i < m_teamList.Length; i++) { if (true == team.IsAlly(TeamManager.ToFlag(i))) { continue; } List <Character> enemyList = m_teamList[i]; for (int k = 0; k < enemyList.Count; k++) { Character enemy = enemyList[k]; float dist = Vector3.Distance(enemy.transform.position, position); if (dist > distance) { continue; } targets.Add(enemy); } } return(targets); }
public Character GetEnemyByRange(TeamFlag team, Vector3 position, Vector3 forward, float distance, float angle) { for (int i = 1; i < m_teamList.Length; i++) { if (true == team.IsAlly(TeamManager.ToFlag(i))) { continue; } List <Character> enemyList = m_teamList[i]; for (int k = 0; k < enemyList.Count; k++) { Character enemy = enemyList[k]; Vector3 dir = enemy.transform.position - position; if (Vector3.Angle(dir, forward) > angle * 0.5f) { continue; } if (dir.magnitude > distance) { continue; } return(enemy); } } return(null); }
static int IntToEnum(IntPtr L) { int arg0 = (int)LuaDLL.lua_tonumber(L, 1); TeamFlag o = (TeamFlag)arg0; ToLua.Push(L, o); return(1); }
private void Add(TeamFlag flag, UnitInfo info, int spawnX, int spawnY) { Units.Add(new Entry { Flag = flag, Info = info, SpawnX = spawnX, SpawnY = spawnY }); }
public Character[] GetTeamCharacters(TeamFlag team) { int index = team.ToIndex(); Character[] characters = new Character[m_teamList[index].Count]; for (int i = 0; i < m_teamList[index].Count; i++) { characters[i] = m_teamList[index][i]; } return(characters); }
private void SpawnUnit(TeamFlag flag, UnitInfo info, int x, int y) { if (_grid[x, y] != null) { throw new ArgumentException($"Supplied coords ({x},{y}) already taken"); } var view = UnitView.Create(flag, _container); var unit = new Unit(flag, info, view, this); PlaceUnit(unit, x, y); _units.Add(unit); }
private static string GetPrefabPath(TeamFlag teamFlag) { switch (teamFlag) { case TeamFlag.Blue: return("Prefabs/BlueTeam/Blue"); case TeamFlag.Red: return("Prefabs/RedTeam/Red"); default: throw new ArgumentOutOfRangeException(nameof(teamFlag), teamFlag, null); } }
public Unit(TeamFlag team, UnitInfo info, UnitView view, Battle battle) { Team = team; _info = info; Health = MaxHealth; Mana = 0; _logic = UnitLogicFactory.Create(info, this, battle); View = view; _battle = battle; _state = State.Spawn; }
static int set_TeamFlag(IntPtr L) { object o = null; try { o = ToLua.ToObject(L, 1); Buff obj = (Buff)o; TeamFlag arg0 = (TeamFlag)ToLua.CheckObject(L, 2, typeof(TeamFlag)); obj.TeamFlag = arg0; return(0); } catch (Exception e) { return(LuaDLL.toluaL_exception(L, e, o == null ? "attempt to index TeamFlag on a nil value" : e.Message)); } }
static int get_TeamFlag(IntPtr L) { object o = null; try { o = ToLua.ToObject(L, 1); Buff obj = (Buff)o; TeamFlag ret = obj.TeamFlag; ToLua.Push(L, ret); return(1); } catch (Exception e) { return(LuaDLL.toluaL_exception(L, e, o == null ? "attempt to index TeamFlag on a nil value" : e.Message)); } }
static int FindTargets(IntPtr L) { try { ToLua.CheckArgsCount(L, 6); BattleController obj = (BattleController)ToLua.CheckObject(L, 1, typeof(BattleController)); long arg0 = (long)LuaDLL.luaL_checknumber(L, 2); UnityEngine.Vector3 arg1 = ToLua.ToVector3(L, 3); float arg2 = (float)LuaDLL.luaL_checknumber(L, 4); TeamFlag arg3 = (TeamFlag)ToLua.CheckObject(L, 5, typeof(TeamFlag)); TargetFlag arg4 = (TargetFlag)ToLua.CheckObject(L, 6, typeof(TargetFlag)); Actor[] o = obj.FindTargets(arg0, arg1, arg2, arg3, arg4); ToLua.Push(L, o); return(1); } catch (Exception e) { return(LuaDLL.toluaL_exception(L, e)); } }
public Actor[] FindTargets(float radius, TeamFlag teamFlag, TargetFlag targetFlag) { return(BattleController.Instance.FindTargets(UserID, Position, radius, teamFlag, targetFlag)); }
// 目标查找 public Actor FindTarget(float radius, TeamFlag teamFlag, TargetFlag targetFlag) { return(BattleController.Instance.FindTarget(UserID, Position, radius, teamFlag, targetFlag, FindType.FIND_CLOSEST)); }
public int GetTeamCount(TeamFlag team) { return(m_teamList[team.ToIndex()].Count); }
public static UnitView Create(TeamFlag teamFlag, Transform parent) { var go = UnityObject.Instantiate(Originals[teamFlag], parent, true); return(new UnitView(go.transform)); }
// 寻找范围内的单位 public Actor FindTarget(long ownerID, Vector3 pos, float radius, TeamFlag teamFlag, TargetFlag targetFlag, FindType findType) { List <Actor> allActors = GetActorList(); List <Actor> list = new List <Actor>(); foreach (var item in allActors) { // TODO 这里应该有错误 if (item == this) { continue; } if (Vector3.Distance(pos, item.Position) > radius) { // 超出范围 continue; } if (teamFlag == TeamFlag.ENEMY && item.UserID == ownerID) { // 要求目标是敌人 但是跟目标是同一队伍 continue; } else if (teamFlag == TeamFlag.FRIENDLY && item.UserID != ownerID) { // 要求目标是友方 但是跟目标不是同一队伍 continue; } // 炸弹等不能被作为攻击目标 if (item.CanBeTarget) { list.Add(item); } } if (list.Count <= 0) { return(null); } if (findType == FindType.FIND_CLOSEST) { // 最近的 list.Sort((a, b) => { var lenA = Vector3.Distance(pos, a.Position); var lenB = Vector3.Distance(pos, b.Position); return(lenA.CompareTo(lenB)); }); } else if (findType == FindType.FIND_FARTHEST) { // 最远的 list.Sort((a, b) => { var lenA = Vector3.Distance(pos, a.Position); var lenB = Vector3.Distance(pos, b.Position); return(lenB.CompareTo(lenA)); }); } return(list[0]); }