List<TrapEntity> getTrap(SpecialAttackRangeType rangetype) { var ret = new List<TrapEntity>(); switch (rangetype) { case SpecialAttackRangeType.AROUND: //ret = getAroundCharacters().Contains(PredationTarget); ret = Owner.getAroundTraps(); break; case SpecialAttackRangeType.FLOOR: ret = GameController.DungeonInformation.Traps; break; case SpecialAttackRangeType.LINE: //ret = isSameLine(CurrentPosition, PredationTarget.CurrentPosition); ret = GameController.DungeonInformation.getAllTrapOnLines(Owner.CurrentPosition); break; case SpecialAttackRangeType.ROOM: //ret = isSameRoom(PredationTarget); if (Owner.InRoom == null) return getTrap(SpecialAttackRangeType.AROUND); ret = GameController.DungeonInformation.getAllTrapsInRoom(Owner.InRoom); break; ; } ret.RemoveAll(trap => !trap.IsDetected); return ret; }
List<ItemEntity> getItem(SpecialAttackRangeType rangetype) { var ret = new List<ItemEntity>(); switch (rangetype) { case SpecialAttackRangeType.AROUND: //ret = getAroundCharacters().Contains(PredationTarget); ret = Owner.getAroundItems(); break; case SpecialAttackRangeType.FLOOR: ret = GameController.DungeonInformation.Items; break; case SpecialAttackRangeType.LINE: //ret = isSameLine(CurrentPosition, PredationTarget.CurrentPosition); ret = GameController.DungeonInformation.getAllItemOnLines(Owner.CurrentPosition); break; case SpecialAttackRangeType.ROOM: //ret = isSameRoom(PredationTarget); if (Owner.InRoom == null) return getItem(SpecialAttackRangeType.AROUND); ret = GameController.DungeonInformation.getAllItemsInRoom(Owner.InRoom); break; } return ret; }
List<MyCharacterController> getTarget(SpecialAttackRangeType rangetype, MyCharacterController target) { var ret = new List<MyCharacterController>(); if (target == null) return ret; switch (rangetype) { case SpecialAttackRangeType.AROUND: //ret = getAroundCharacters().Contains(PredationTarget); ret = Owner.getAroundCharacters().FindAll(c => c.Equals(target)); break; case SpecialAttackRangeType.FLOOR: ret.Add(target); break; case SpecialAttackRangeType.LINE: //ret = isSameLine(CurrentPosition, PredationTarget.CurrentPosition); if (MyCharacterController.isSameLine(Owner.CurrentPosition, target.CurrentPosition)) { var dir = MyCharacterController.getDirection(Owner.CurrentPosition, target.CurrentPosition); var dirdelta = MyCharacterController.getDirectionDelta(dir); var wallhit = Physics2D.Raycast(Owner.CurrentPosition, dirdelta, 1000, TagList.getLayerMask(TagList.Wall)); if (!wallhit) { ret.Add(target); break; } Vector2 wallpos = wallhit.collider.gameObject.GetComponent<TileEntity>().Position; float sub = (wallpos - Owner.CurrentPosition).sqrMagnitude - (target.CurrentPosition - Owner.CurrentPosition).sqrMagnitude; if (sub >= 1) { ret.Add(target); } } break; case SpecialAttackRangeType.ROOM: //ret = isSameRoom(PredationTarget); if (Owner.InRoom == null) return getTarget(SpecialAttackRangeType.AROUND, target); if (Owner.isSameRoom(target)) ret.Add(target); break; } return ret; }
List<MyCharacterController> getEnemy(SpecialAttackRangeType rangetype) { var ret = new List<MyCharacterController>(); switch (rangetype) { case SpecialAttackRangeType.AROUND: ret = Owner.getAroundCharacters().FindAll(c => c is EnemyController); break; case SpecialAttackRangeType.FLOOR: ret = GameController.DungeonInformation.Enemys; break; case SpecialAttackRangeType.LINE: //ret = isSameLine(CurrentPosition, PredationTarget.CurrentPosition); ret = GameController.DungeonInformation.getAllCharacterOnLines(Owner.CurrentPosition).FindAll(c => c is EnemyController); break; case SpecialAttackRangeType.ROOM: //ret = isSameRoom(PredationTarget); if (Owner.InRoom == null) return getEnemy(SpecialAttackRangeType.AROUND); ret = GameController.DungeonInformation.getAllCharactersInRoom(Owner.InRoom).FindAll(c => c is EnemyController); break; ; } return ret; }