private void SetState(State state) { _state = state; _timeInState = 0f; _timeOfAttention = 0f; _path = null; _pathIndex = -1; switch (state) { case State.Idle: { _timeOfAttention = 1f; // + UnityEngine.Random.value * 3f; _speed = 0f; } break; case State.Pathfinding: { _timeOfAttention = 5f + UnityEngine.Random.value * 10f; var randomOpenTiles = Game.TerrainEntities. Select(t => t.GetModule <TerrainModule>(ModuleType.Terrain)). Where(t => t.IsOpen()).ToArray(); var tile = randomOpenTiles[UnityEngine.Random.Range(0, randomOpenTiles.Length)]; if (tile != null) { _path = _pathfinding.GetPathToTile(tile.X, tile.Y); } if (_path?.Count > 1) { _speed = 1f; _pathIndex = 0; } else { SetState(State.Idle); } } break; case State.AvoidingObstacle: { _timeOfAttention = 1f; _speed = 1f; } break; case State.Dead: { if (_agent != null) { _agent.Disable(); } } break; } }
private void OnHealthChanged(Entity e, HealthModule h, int delta) { GameUI.BroadcastMessage(UIMessage.Create(UIMessage.MessageType.LoseLife, new UIMessage.Datum() { type = UIMessage.Datum.Type.Int, value = h.HitPoints.ToString() })); if (h.HitPoints <= 0) { _agent.Disable(); GameUI.BroadcastMessage(UIMessage.Create(UIMessage.MessageType.GameOver)); } }