public void AddToScene(Transform team1, Transform team2) { for (var x = 0; x < Attacker.Units.Length; x++) { var battleUnit = Attacker.Units[x]; if (battleUnit == null) { continue; } var clientUnit = new ClientUnit(battleUnit.UnitReference); clientUnit.AddToScene(); clientUnit.GetGameObject().transform.SetParent(team1.GetChild(x).transform); clientUnit.GetGameObject().transform.localPosition = Vector3.zero; clientUnit.GetGameObject().GetComponent <SpriteRenderer>().flipX = true; Attacker.Units[x].UnitReference = clientUnit; } for (var x = 0; x < Defender.Units.Length; x++) { var battleUnit = Defender.Units[x]; if (battleUnit == null) { continue; } var clientUnit = new ClientUnit(battleUnit.UnitReference); var unitObj = clientUnit.AddToScene(); unitObj.transform.SetParent(team2.GetChild(x).transform); unitObj.transform.localPosition = Vector3.zero; unitObj.GetComponent <SpriteRenderer>().flipX = false; Defender.Units[x].UnitReference = clientUnit; } }
public void WaitForAction() { ActingUnit = Battle.CurrentActingUnit.UnitReference as ClientUnit; ActingUnit.Sprites.PlayAnimation(Sprite3D.WALK, true, 100, ActionDelaySeconds); var obj = ActingUnit.GetGameObject(); _originalPos = obj.transform.position; obj.transform.DOLocalMove(new Vector3(ReadyDistanceMoved, 0, 0), ActionDelaySeconds); NextAction = DateTime.Now + TimeSpan.FromSeconds(ActionDelaySeconds); Log.Debug($"[Battle] {ActingUnit} waiting for action to handle it in {GetNextActionDelaySeconds()} seconds"); }
public TimeSpan DrawBattleAction(BattleAction action) { Log.Debug($"[Battle] Handling {action} for {ActingUnit}"); if (action is AttackAction) { var attackAction = (AttackAction)action; var result = (AttackActionResult)action.Result; var attackerID = attackAction.UnitID; if (attackerID == ActingUnit.Id) { // Attack Animation ActingUnit.Sprites.PlayAnimation(Sprite3D.ATTACK, false, 100, ActionDelaySeconds); ActingUnit.GetGameObject().transform.DOLocalMove(new Vector3(ReadyDistanceMoved + AttackDistanceMoved, 0, 0), ActionDelaySeconds); // Taking Damage var defender = Battle.FindUnit(attackAction.DefenderID); var damageAnimationDelay = ActionDelaySeconds / 2; Awaiter.WaitFor(TimeSpan.FromSeconds(ActionDelaySeconds / 2), () => { // Swing anim defender.Sprites.PlayAnimation(Sprite3D.HURT, true, 0, ActionDelaySeconds); // Damage Effects DrawDamage(defender, result.Damage); var seq = DOTween.Sequence(); seq.Append(defender.GetGameObject().transform.DOMoveX(defender.GetGameObject().transform.position.x - 0.1f, damageAnimationDelay / 2)); seq.Append(defender.GetGameObject().transform.DOMoveX(defender.GetGameObject().transform.position.x, damageAnimationDelay / 2)); seq.onComplete += () => { Awaiter.WaitFor(TimeSpan.FromMilliseconds(600), () => { ActingUnit.GetGameObject().transform.DOMoveX(_originalPos.x, damageAnimationDelay); ActingUnit.Sprites.PlayAnimation(Sprite3D.JUMP, true, 100, damageAnimationDelay); WaitForAction(); }); }; }); return(TimeSpan.FromSeconds(10)); } } return(TimeSpan.FromSeconds(10)); }
private void DrawDamage(ClientUnit unit, int damage) { DamageText.text = damage.ToString(); var pos = Camera.main.WorldToScreenPoint(unit.GetGameObject().transform.position); DamageText.transform.parent.parent.position = pos; var hpBar = DamageText.transform.parent; hpBar.gameObject.SetActive(true); hpBar.GetComponent <HealthBar>().SetPct(80); DamageText.gameObject.SetActive(true); var seq = DOTween.Sequence(); seq.Append(DamageText.transform.DOMoveY(DamageText.transform.position.y + 30, 0.2f)); seq.Append(DamageText.transform.DOMoveY(DamageText.transform.position.y, 0.2f)); seq.Append(DamageText.transform.DOMoveY(DamageText.transform.position.y - 10, 0.1f)); seq.Append(DamageText.transform.DOMoveY(DamageText.transform.position.y, 0.1f)); seq.onComplete += () => { Awaiter.WaitFor(TimeSpan.FromSeconds(0.4), () => { DamageText.gameObject.SetActive(false); hpBar.gameObject.SetActive(false); }); }; }