IEnumerator ResetTiles() { UnHighlightTiles(); PanelControllerNew.SwitchChar(null); InteractivityManager.instance.EnterDefaultMode(); yield return(null); }
public bool IsAttacked(UnitProxy oppUnit, bool useAttack = true) { Debug.Log("IsAttacked"); if (useAttack) { oppUnit.GetData().GetTurnActions().Attack(); } PanelControllerNew.SwitchChar(oppUnit); //Damage the unit /* * Trigger the opponent's attack trigger here */ Vector3Int animStart = oppUnit.GetPosition(); Vector3Int animEnd = GetPosition(); Debug.Log("animStart: " + animStart.ToString()); Debug.Log("animEnd: " + animEnd.ToString()); Vector3Int diff = animEnd - animStart; if (_data.GetAegis()) { Debug.Log("Aegis!"); //_data.SetAegis(false); StartCoroutine(AttackAnim(oppUnit, oppUnit.gameObject.transform.GetChild(0).GetComponent <Animator>(), oppUnit.gameObject.transform, diff, "", useAttack)); //LostAegisAnim(); SetAegis(false, AnimationInteractionController.ATK_WAIT); return(false); } Debug.Log("No Aegis"); StartCoroutine(AttackAnim(oppUnit, oppUnit.gameObject.transform.GetChild(0).GetComponent <Animator>(), oppUnit.gameObject.transform, diff, "-" + oppUnit.GetData().GetAttack().ToString(), useAttack)); GetData().IsAttacked(oppUnit.GetData().GetAttack()); if (GetData().IsDead()) { if (oppUnit == this) { BoardProxy.instance.GiveLowestCharLvl(this); } else { oppUnit.AddLevel(); } return(true); } return(false); }
//public void ResetAtThis() //{ // StartCoroutine(ResetTiles()); //} public override void OnUnitSelected(UnitProxy obj) { if (!UnitMoving) { if (currentUnit == null) { toAttack = null; UnHighlightTiles(); currentUnit = obj; //The maximum range in which a player has actions allTiles = BoardProxy.instance.GetAllVisitableNodes(obj, obj.GetMoveSpeed() > obj.GetAttackRange() ? obj.GetMoveSpeed() : obj.GetAttackRange(), true); //The attackable tiles attackableTiles = BoardProxy.instance.GetAllVisitableNodes(obj, obj.GetAttackRange(), true); //The visitable tiles visitableTiles = BoardProxy.instance.GetAllVisitableNodes(obj, obj.GetMoveSpeed()); HighlightTiles(obj); PanelControllerNew.SwitchChar(obj); if (currentUnit.GetData().GetTeam() == TurnController.instance.currentTeam) { currentUnit.SaySomething(Skill.Actions.None); } CheckFocusAI(); } else { if (toAttack != obj && currentUnit != obj) { if (TurnController.instance.currentTeam == BoardProxy.PLAYER_TEAM && currentUnit.GetData().GetTeam() == BoardProxy.ENEMY_TEAM) { currentUnit = null; OnUnitSelected(obj); } else { toAttack = obj; UnitProxy player = currentUnit.GetData().GetTeam() == BoardProxy.PLAYER_TEAM ? currentUnit : toAttack; UnitProxy enemy = currentUnit.GetData().GetTeam() == BoardProxy.ENEMY_TEAM ? currentUnit : toAttack; PanelControllerNew.SwitchChar(player, enemy); } } else { if (obj.GetData().GetTeam() != currentUnit.GetData().GetTeam() && attackableTiles.Contains(BoardProxy.instance.GetTileAtPosition(obj.GetPosition())) && currentUnit.GetData().GetTurnActions().CanAttack() && !obj.GetData().IsDead()) { CheckFocusAI(); toAttack = null; bool charDead = obj.IsAttacked(currentUnit); if (currentUnit != null) { currentUnit.AcceptAction(Skill.Actions.DidAttack, obj); } if (charDead) { UnitProxy victor = BoardProxy.instance.GetTileAtPosition(currentUnit.GetPosition()).GetUnit(); victor.SaySomething(Skill.Actions.DidKill); obj.DelayedKill(obj, victor); StartCoroutine(ResetTiles()); } else { currentUnit.SaySomething(Skill.Actions.DidAttack); obj.SaySomething(Skill.Actions.DidDefend); } OnDisable(); PanelControllerNew.SwitchChar(currentUnit); } } } } }
public override void OnTileSelected(TileProxy tile) { if (!UnitMoving) { if (currentUnit != null && visitableTiles.Contains(tile)) { toAttack = null; TileProxy startTile = BoardProxy.instance.GetTileAtPosition(currentUnit.GetPosition()); if (startTile != tile) { //UnitProxy unit = startTile.GetUnit(); if (currentUnit.GetData().GetTurnActions().CanMove()) { //CheckFocusAI(); currentUnit.GetData().GetTurnActions().Move(); PanelControllerNew.SwitchChar(currentUnit); UnitMoving = true; StartCoroutine(currentUnit.CreatePathToTileAndLerpToPosition(tile, () => { tile.ReceiveGridObjectProxy(currentUnit); startTile.RemoveGridObjectProxy(currentUnit); UnHighlightTiles(); if (currentUnit != null && currentUnit.GetData().IsDead()) { ConditionTracker.instance.EvalDeath(currentUnit); } InteractivityManager.instance.EnterDefaultMode(); UnitMoving = false; CheckFocusAI(); })); } else { Debug.Log("Out of actions. Send signal to player they can't move unit."); } } else { StartCoroutine(currentUnit.CreatePathToTileAndLerpToPosition(tile, () => { StartCoroutine(ResetTiles()); })); } } else if (currentUnit != null) { //Select all the tiles with opp team in all tiles //List<TileProxy> visitableTiles = allTiles.Where(tl => tl.GetUnit().GetData().GetTeam() != currentUnit.GetData().GetTeam()).ToList<TileProxy>(); if (!allTiles.Where(tl => tl.HasUnit() && (tl.GetUnit().GetData().GetTeam() != currentUnit.GetData().GetTeam())).ToList <TileProxy>().Contains(tile)) { //BoardProxy.instance.FlushTiles(); //PanelControllerNew.SwitchChar(null); StartCoroutine(ResetTiles()); } ////Player clicked out of unit range, reset tiles/UI so player can click somewhere else instead //BoardProxy.instance.FlushTiles(); //PanelController.SwitchChar(null); } } }