private void CheckRemainingDistance() { if (Vector3.Distance(transform.position, agent.destination) <= REPORT_REACHED_DISTANCE) { OnReachDestination?.Invoke(); } }
public override void OnTurn() { base.OnTurn(); if (moving && !fighting) { Queue <Unit> queue; if (!Game.UnitPositionQueues.ContainsKey(blockingPos)) { queue = new Queue <Unit>(); Game.UnitPositionQueues[blockingPos] = queue; } else { queue = Game.UnitPositionQueues[blockingPos]; } if (!queue.Contains(this)) { queue.Enqueue(this); } if (Game.UnitBlockedPositions.Contains(blockingPos) || queue.Peek() != this) { OnIdle?.Invoke(); idle = true; Game.UnitBlockedPositions.Add(blockingPos - areaRangeDelta); return; } if (idle) { Game.UnitBlockedPositions.Remove(blockingPos - areaRangeDelta); } Position += moveDelta; if (Position == blockingPos) { queue.Dequeue(); blockingPos += areaRangeDelta; } if (Position == destination) { moving = false; OnReachDestination?.Invoke(); if (Position == Game.Map.Bounds.LeftDown && Owner == Game.RightPlayer || Position == Game.Map.Bounds.RightDown && Owner == Game.LeftPlayer) { Game.EndGame(Owner); } } } }
public override void Update() { if (!direction.HasValue) { GetDirection(); } Vec2D nextPoint = gameObject.transform.position; nextPoint += direction.Value * Speed * GameEngine.Instance.DeltaTime; gameObject.transform.LookAt(nextPoint); gameObject.transform.position = nextPoint; if (OnReachDestination != null && gameObject.transform.position > Destination) { OnReachDestination?.Invoke(); } }