protected override IEnumerator MainAttack() { if (TargetPositions.Count == 0) { yield break; } while (TargetPositions.Count > 0) { var targetPos = TargetPositions.Dequeue(); var targetSquadType = Field.GetSquadTypeByIndex(targetPos); if (targetSquadType == SquadType.NotMatter) { continue; } if (targetSquadType == SquadType) { continue; } yield return(StartCoroutine(Move.RotateToPosition(targetPos))); yield return(StartCoroutine(CharacterAnimator.RandomAttackCor())); var enemyHealth = Field.GetGameObjectByIndex <Health>(targetPos); enemyHealth.GetDamage(damage); yield return(new WaitForSeconds(0.5f)); } }
protected override IEnumerator MainAttack() { if (targetsCount == 0) { yield break; } var targetPos = TargetPositions.Dequeue(); var canAttackFirst = CanAttack(targetPos); var canAttackSecond = CanAttack(secondTargetPos); if (canAttackFirst || canAttackSecond) { yield return(StartCoroutine(CharacterAnimator.RandomAttackCor())); } else { yield break; } yield return(StartCoroutine(Move.RotateToPosition(targetPos))); var firstEnemy = Field.GetGameObjectByIndex <Health>(targetPos); if (firstEnemy) { firstEnemy.GetDamage(damage); } var secondEnemy = Field.GetGameObjectByIndex <Health>(secondTargetPos); if (secondEnemy) { secondEnemy.GetDamage(damage - 1); } }
protected override void HighLightSelectedAttackCells() { foreach (var target in TargetPositions.ToArray()) { Field.HighlightCell(target); } }
private void Update() { /* Refresh the datas of the robot */ datas.RefreshDatas(Controller.GetMotorsDatas(), Lidar.GetMeasures(), Controller.GetSensorValues()); if (Server.isActive) { _targetPositions = TargetPositions.ReadValues(Server.targetPositions); } status = datas.ToJson(); }
protected override void UpdateBehaviour(float elapsedSeconds, float totalSeconds) { Vector2 centerOfMass = Vector2.Zero; int count = TargetPositions.Count(); if (count > 0) { // [FOREACH PERFORMANCE] ALLOCATES GARBAGE foreach (var t in TargetPositions) { centerOfMass += t; } centerOfMass = centerOfMass / count; Vector2 direction = centerOfMass - Entity.Body.Position; direction.Normalize(); movement.Steer(direction, Weight); } }
private void Start() { _targetPositions = new TargetPositions(); datas = new RobotDatas(); }
protected override void Reset() { TargetPositions.Clear(); CollisionEnemyHealth = null; }