public void TryAttack(Actor target) { GetMovablePosition(AttackRadius, true); if (playerMove.SingleOrDefault(x => x.Item1 == target.Position) != null) { target.Health -= Attack; ActorAnim.FaceAttackTarget(target.Position); Main.main.waiting = null; State = TurnState.INACTIVE; } else { Debug.Log("Client Error Attack"); } }
public static int constructor(IntPtr l) { int result; try { ActorAnim o = new ActorAnim(); LuaObject.pushValue(l, true); LuaObject.pushValue(l, o); result = 2; } catch (Exception e) { result = LuaObject.error(l, e); } return(result); }
//Animation public void playAnim(string name) { List <ActorAnim> newAnim = new List <ActorAnim>(); foreach (ActorAnim aa in animations) { if (aa.name.ToLower().Trim() == name.ToLower().Trim()) { newAnim.Add(aa); } } ActorAnim pickedAnim = null; if (newAnim.Count == 1) { Debug.Log("Only one animation found to use!"); pickedAnim = newAnim[0]; } else { pickedAnim = newAnim[Mathf.FloorToInt(Random.Range(0, newAnim.Count - 1))]; Debug.Log("Chose to use animation: " + pickedAnim.myClip.name); } if (newAnim != null) { myAnim.Play(pickedAnim.myClip.name, AnimationPlayMode.Stop); if (pickedAnim.soundClip != null) { _gm._GUI.playSoundFX(pickedAnim.soundClip); } } else { Debug.Log("Actor does not have animation called " + name + "!"); } }
public override void Update() { if (!thinking) { if (State == TurnState.MOVE) { ResetMovablePosition(); Vector3Int nearest = Utility.NearestEnemy(Position, Main.main.tiles, MoveRadius, TeamID); if (Position == nearest) { nearest = Utility.NearestEnemy(Position, Main.main.tiles, MoveRadius, TeamID, true); } ActorMoveList = playerMove.SingleOrDefault(x => x.Item1 == nearest).Item2; if (ActorMoveList == null) { ActorMoveList = new List <Utility.Direction>(); } Debug.Log(ActorMoveList.Count); Position = nearest; State = TurnState.WAIT; } else if (State == TurnState.WAIT) { GetMovablePosition(AttackRadius, true); if (playerMove == null || playerMove.Count == 0) { EndTurn(); } else { State = TurnState.ATK; thinking = true; } } else if (State == TurnState.ATK) { ResetMovablePosition(); Vector3Int targetPos = playerMove[0].Item1; Actor target = Main.main.actors.FirstOrDefault(x => x.Position == targetPos && x.Health > 0); ActorAnim.FaceAttackTarget(targetPos); target.Health -= Attack; EndTurn(); } } else { thinkTime -= Time.deltaTime; if (thinkTime <= 0f) { thinking = false; thinkTime = thinkMaxTime; } } if (!movableShowed && !inAnimation) { if (State == TurnState.ATK) { ShowMovablePosition(true); movableShowed = true; } else if (State == TurnState.MOVE) { ShowMovablePosition(); movableShowed = true; } } }
public override void Update() { if (Input.GetMouseButtonDown(0) && !Main.main.menuFocus) { Vector3 worldpos = Camera.main.ScreenToWorldPoint(Input.mousePosition); Vector3Int cellpos = Main.main.grid.WorldToCell(worldpos); if (State == TurnState.MOVE) { if (Main.main.ground.GetColor(cellpos) == Main.main.moveColor) { ResetMovablePosition(); string mData = "CSM|"; mData += Idx + "|"; mData += cellpos.x + "#" + cellpos.y; if (Main.main.isMulti) { Client.Instance.Send(mData); } ActorMoveList = playerMove.SingleOrDefault(x => x.Item1 == cellpos).Item2; if (ActorMoveList == null) { ActorMoveList = new List <Utility.Direction>(); } Debug.Log(ActorMoveList.Count); Position = cellpos; State = TurnState.WAIT; } else if (Main.main.ground.GetColor(cellpos) == Main.main.activeColor) { ResetMovablePosition(); string mData = "CSM|-1"; if (Main.main.isMulti) { Client.Instance.Send(mData); } State = TurnState.WAIT; } } else if (State == TurnState.ATK) { if (Main.main.ground.GetColor(cellpos) == Main.main.attackColor) { Actor target = Main.main.actors.FirstOrDefault(x => x.Position == cellpos && x.Health > 0); target.Health -= Attack; ActorAnim.FaceAttackTarget(cellpos); ResetMovablePosition(); string mData = "CSA|"; mData += Idx + "|"; mData += target.Idx; if (Main.main.isMulti) { Client.Instance.Send(mData); } EndTurn(); } else if (Main.main.ground.GetColor(cellpos) == Main.main.activeColor) { ResetMovablePosition(); string mData = "CSA|-1"; if (Main.main.isMulti) { Client.Instance.Send(mData); } EndTurn(); } } } else if (State == TurnState.WAIT) { GetMovablePosition(AttackRadius, true); if (playerMove == null || playerMove.Count == 0) { string mData = "CSA|-1"; if (Main.main.isMulti) { Client.Instance.Send(mData); } EndTurn(); } else { State = TurnState.ATK; } } if (!movableShowed && !inAnimation) { if (State == TurnState.ATK) { ShowMovablePosition(true); movableShowed = true; } else if (State == TurnState.MOVE) { ShowMovablePosition(); movableShowed = true; } } }