public override void OnUnitClicked(Unit unit) { if (roleInfoPanel) { GameObject.Destroy(roleInfoPanel); } foreach (var f in BattleFieldManager.GetInstance().floors) { f.Value.SetActive(false); } range = new MoveRange(); if (unit.playerNumber.Equals(roundManager.CurrentPlayerNumber) && !unit.UnitEnd) { roundManager.RoundState = new RoundStateUnitSelected(roundManager, unit); } else { var outline = Camera.main.GetComponent <RenderBlurOutline>(); if (outline) { outline.RenderOutLine(unit.transform); } range.CreateMoveRange(unit.transform); CreatePanel(unit); } Camera.main.GetComponent <RTSCamera>().FollowTarget(unit.transform.position); }
public static void Pressure(AtkContext atk, MoveRange range) { var ts = atk.Move.Move.Range == MoveRange.Board || atk.Move.Move.Range == MoveRange.OpponentField ? atk.Attacker.Controller.Board[1 - atk.Attacker.Pokemon.TeamId].Pokemons : atk.Targets == null? Enumerable.Empty <PokemonProxy>() : null; if (ts == null) { foreach (var d in atk.Targets) { if (d.Defender.Pokemon.TeamId != atk.Attacker.Pokemon.TeamId && d.Defender.AbilityE(As.PRESSURE)) { atk.Pressure++; } } } else { foreach (var d in ts) { if (d.AbilityE(As.PRESSURE)) { atk.Pressure++; } } } }
public override void OnUnitClicked(Unit unit) { foreach (var f in BattleFieldManager.GetInstance().floors) { f.Value.SetActive(false); } range = new MoveRange(); if (unit.playerNumber.Equals(roundManager.CurrentPlayerNumber) && !unit.UnitEnd && SkillManager.GetInstance().skillQueue.Peek().Key.EName == "FirstAction") { SkillManager.GetInstance().skillQueue.Peek().Key.Reset(); roundManager.RoundState = new RoundStateUnitSelected(roundManager, unit); } else if (SkillManager.GetInstance().skillQueue.Peek().Key.EName == "FirstAction") { var outline = Camera.main.GetComponent <RenderBlurOutline>(); if (outline) { outline.RenderOutLine(unit.transform); } SkillManager.GetInstance().skillQueue.Peek().Key.Reset(); RoundManager.GetInstance().RoundState = new RoundStateWaitingForInput(RoundManager.GetInstance()); range.CreateMoveRange(unit.transform); ((RoundStateWaitingForInput)RoundManager.GetInstance().RoundState).CreatePanel(unit); } Camera.main.GetComponent <RTSCamera>().FollowTarget(unit.transform.position); }
private void MoveEnemy() { setMoveRange(Convert.ToInt32(ObjGridVec.x), Convert.ToInt32(ObjGridVec.y)); //RendeMoveRange (MoveRange); target = FindTarget(); BestPlace = new Vector3(-1f, -1f, 0f); float shortestDis = 10000; for (int i = 0; i < MoveRange.Count; i++) { float distance = Mathf.Abs(Vector3.Distance(target, MoveRange [i])); if (distance < shortestDis) { shortestDis = distance; BestPlace = MoveRange [i]; } } //moveFinished = false; if (BestPlace != new Vector3(FarPosValue, FarPosValue, 0f)) { BoardManager.instance.floorMoveableArray [Convert.ToInt32(ObjGridVec.y), Convert.ToInt32(ObjGridVec.x)] = 1; setBestPath(BestPlace); ObjGridVec = BestPlace; BoardManager.instance.floorMoveableArray [Convert.ToInt32(ObjGridVec.y), Convert.ToInt32(ObjGridVec.x)] = 0; //moving = true; movingToNum = bestPath.Count - 1; //print (movingToNum); } MoveRange.Clear(); }
public override void OnUnitClicked(Unit unit) { if (!EventSystem.current.IsPointerOverGameObject()) { if (roleInfoPanel) { GameObject.Destroy(roleInfoPanel); } foreach (var f in BattleFieldManager.GetInstance().floors) { f.Value.SetActive(false); } range = new MoveRange(); if (unit.playerNumber.Equals(roundManager.CurrentPlayerNumber) && !unit.UnitEnd) { roundManager.RoundState = new RoundStateUnitSelected(roundManager, unit); } else { Camera.main.GetComponent <RenderBlurOutline>().RenderOutLine(unit.transform); range.CreateMoveRange(unit.transform); CreatePanel(unit); } } }
internal MoveType(int id, BattleType type, MoveCategory category, int power, int accuracy, int pp, MoveRange range) { _id = id; _type = type; _category = category; _power = power; _accuracy = accuracy; _pp = pp; _range = range; }
public MoveRange(MoveRange copy) { RangeType = copy.RangeType; Mobility = copy.Mobility; CutsCorners = copy.CutsCorners; Distance = copy.Distance; HitsSelf = copy.HitsSelf; HitsFriend = copy.HitsFriend; HitsFoe = copy.HitsFoe; }
internal IEnumerator ActivateAITree(Unit _aiUnit) { aiUnit = _aiUnit; rtsCamera = Camera.main.GetComponent <RTSCamera>(); outline = Camera.main.GetComponent <RenderBlurOutline>(); //create move Range and Delete() it after AINodeMoveAI moveRange = new MoveRange(); moveRange.CreateMoveRange(aiUnit.transform); yield return(StartCoroutine(ActionNode(root))); }
internal IEnumerator ActivateAITree(Unit _aiUnit) { rtsCamera = Camera.main.GetComponent <RTSCamera>(); outline = Camera.main.GetComponent <RenderBlurOutline>(); //init aiUnit = _aiUnit; aiTarget = null; moveTarget = aiUnit.transform.position; skillName = ""; dodgeSkillName = ""; finalDirection = "forward"; //create move Range and Delete() it after AINodeMoveAI moveRange = new MoveRange(); moveRange.CreateMoveRange(aiUnit.transform, false); yield return(StartCoroutine(ActionNode(root))); }
public bool Move(SimMove move, bool mega) { if (Pms[CurrentI].Move(move)) { if (NeedTarget) { MoveRange = move.Type.Id == Ms.CURSE && Pms[CurrentI].Curse ? MoveRange.SelectedTarget : move.Type.Range; this.move = move; this.mega = mega; } else { input.UseMove(CurrentI, move, mega); NextPm(); } return(true); } error = Pms[CurrentI].GetErrorMessage(); return(false); }
private void GetAttackMovePosition() { //get move range MoveRange moveRange = new MoveRange(); moveRange.CreateMoveRange(aiUnit.transform); //find the nearest enemy getNeareatTarget(aiUnit); //find if the nearest enemy in attack range List <Vector3> enemyFloor = moveRange.enemyFloor; foreach (Vector3 v in enemyFloor) { enemyList.Add(getEnemyUnit(v)); } if (enemyList.Contains(aiTarget)) { //if the enemy is in attack range of aiUnit //choose a floor in moveRange and it is the neareast from aiUnit to aiTarget //get the four floors next aiTarget List <Vector3> nextFloors = getNextFloors(aiTarget.transform.position); //just leave these floors that could be reached in moveRange List <Vector3> canReachNextFloors = nextFloors.FindAll(nf => moveRange.rangeDic.ContainsKey(nf)); //detect if there are other team mates in these floors List <Unit> teamMatesList = UnitManager.GetInstance().units.FindAll(p => p.playerNumber == aiUnit.playerNumber); List <Vector3> availableFloors = new List <Vector3>(canReachNextFloors); foreach (Unit u in teamMatesList) { foreach (Vector3 v in canReachNextFloors) { if (u.transform.position == v) { availableFloors.Remove(v); } } } if (availableFloors.Count > 0) { //find the nearest floor moveTarget = getNeareastFloor(aiUnit, availableFloors); } else { if (remoteAttackDetect()) { remoteAttack(); } else { moveMoreStep(); } } //cancel render moveRange moveRange.Delete(); } else { moveMoreStep(); } }
public static IEnumerable <Tile> GetRangeTiles(AtkContext atk, MoveRange range, Tile select) { var aer = atk.Attacker; IEnumerable <Tile> targets = null; Board b = aer.Controller.Board; var remote = atk.Move.IsRemote; var team = aer.Pokemon.TeamId; var oTeam = 1 - team; var x = aer.OnboardPokemon.X; var ox = aer.Controller.GameSettings.Mode.XBound() - 1 - x; switch (range) { case MoveRange.TeamField: //do nothing case MoveRange.OpponentField: //do nothing case MoveRange.Board: //do nothing case MoveRange.TeamPokemons: //防音防不住治愈铃铛,所以这只是个摆设 break; case MoveRange.Adjacent: { var ts = new List <Tile>(); Tile t; t = b[team][x - 1]; if (t != null) { ts.Add(t); } t = b[team][x + 1]; if (t != null) { ts.Add(t); } t = b[oTeam][ox - 1]; if (t != null) { ts.Add(t); } ts.Add(b[oTeam][ox]); t = b[oTeam][ox + 1]; if (t != null) { ts.Add(t); } targets = ts; } break; case MoveRange.OpponentPokemons: { var ts = new List <Tile>(); Tile t; t = b[oTeam][ox - 1]; if (t != null) { ts.Add(t); } ts.Add(b[oTeam][ox]); t = b[oTeam][ox + 1]; if (t != null) { ts.Add(t); } targets = ts; } break; case MoveRange.All: targets = b.Tiles; break; case MoveRange.SelectedTeammate: if (select == null) { var pms = new List <PokemonProxy>(); foreach (var pm in remote ? b[team].Pokemons : b[team].GetAdjacentPokemonsByX(x)) { if (pm != aer) { pms.Add(pm); } } targets = pms.Any() ? new Tile[] { pms[aer.Controller.GetRandomInt(0, pms.Count - 1)].Tile } : Enumerable.Empty <Tile>(); } else { targets = new Tile[] { select } }; break; case MoveRange.RandomOpponentPokemon: { var pms = (List <PokemonProxy>)(remote? b[oTeam].Pokemons : b[oTeam].GetAdjacentPokemonsByX(ox)); targets = pms.Any() ? new Tile[] { pms[aer.Controller.GetRandomInt(0, pms.Count - 1)].Tile } : Enumerable.Empty <Tile>(); } break; case MoveRange.SelectedTarget: if (select == null || select.Field.Team == oTeam) { goto case MoveRange.SelectedOpponent; } targets = new Tile[] { select }; break; case MoveRange.SelectedOpponent: //非鬼系选诅咒后变诅咒随机对方一个精灵 if (select == null) { goto case MoveRange.RandomOpponentPokemon; } //因为移动或交换位置造成距离不足,技能失败 if (!(remote || ox - 1 <= select.X && select.X <= ox + 1)) { targets = Enumerable.Empty <Tile>(); } if (select.Pokemon != null) { targets = new Tile[] { select } } ; else if (b[oTeam][ox].Pokemon != null) { targets = new Tile[] { b[oTeam][ox] } } ; //据说正对面精灵优先 else { goto case MoveRange.RandomOpponentPokemon; } break; case MoveRange.Self: //done? targets = new Tile[] { aer.Tile }; break; case MoveRange.RandomTeamPokemon: { var pms = (List <PokemonProxy>)(remote ? b[team].Pokemons : b[team].GetAdjacentPokemonsByX(x)); targets = new Tile[] { pms[aer.Controller.GetRandomInt(0, pms.Count - 1)].Tile }; } break; } return(targets); }
public void SetModel(MoveRange model) { _model = model; RaiseAllPropertiesChanged(); }
public MoveRangeViewModel() { _model = new MoveRange(); }
public virtual void AssignMoveRange(MoveRange pRange) { this.enRange = pRange; }
public void Set(int userX, MoveRange range) { CanSelect = false; //如果要支持三打对战,IsRemote要拿到客户端 PO1.IsEnabled = false; PO0.IsEnabled = false; P0.IsEnabled = false; P1.IsEnabled = false; var user = userX == 0 ? P0 : P1; var partner = user == P0 ? P1 : P0; switch (range) { case MoveRange.SelectedTarget: CanSelect = true; PO1.IsEnabled = true; PO0.IsEnabled = true; partner.IsEnabled = true; break; case MoveRange.SelectedTeammate: CanSelect = true; partner.IsEnabled = true; break; case MoveRange.SelectedOpponent: CanSelect = true; PO1.IsEnabled = true; PO0.IsEnabled = true; break; case MoveRange.Adjacent: PO1.IsEnabled = true; PO0.IsEnabled = true; partner.IsEnabled = true; break; case MoveRange.OpponentPokemons: case MoveRange.OpponentField: PO1.IsEnabled = true; PO0.IsEnabled = true; break; case MoveRange.TeamPokemons: case MoveRange.TeamField: P0.IsEnabled = true; P1.IsEnabled = true; break; case MoveRange.All: case MoveRange.Board: PO1.IsEnabled = true; PO0.IsEnabled = true; P0.IsEnabled = true; P1.IsEnabled = true; break; default: user.IsEnabled = true; break; } PO1.OnPropertyChanged(); PO0.OnPropertyChanged(); P0.OnPropertyChanged(); P1.OnPropertyChanged(); OnPropertyChanged(); }