public void Tick() { var guards = GuardStorage.GetGuards(); var players = PlayerStorage.GetPlayers(); foreach (var player in players) { foreach (var guard in guards) { if (CanSeeTarget(guard, player)) { player.PlayerVisibleTimer += Time.deltaTime; } else { player.PlayerVisibleTimer -= Time.deltaTime; } player.PlayerVisibleTimer = Mathf.Clamp(player.PlayerVisibleTimer, 0, player.TimeToSpotPlayer); float _visability = player.PlayerVisibleTimer / player.TimeToSpotPlayer; guard.Color = Color.Lerp(Color.green, Color.red, _visability); GuardStorage.UpdateItem(guard); } PlayerStorage.UpdateItem(player); } }
public void Tick() { if (!GuardStorage.ContainsItem(_modelGuid)) { return; } var model = GuardStorage.GetItem(_modelGuid); if (Vector3.Distance(model.TargetPosition, model.Position) > 0.2f) { float movementSpeed = 2f * Time.deltaTime; float rotationSpeed = 270f * Time.deltaTime; Vector3 forward = model.TargetPosition - model.Position; var rotationTarget = Quaternion.LookRotation(forward); model.Position = Vector3.MoveTowards(model.Position, model.TargetPosition, movementSpeed); model.Rotation = Quaternion.RotateTowards(model.Rotation, rotationTarget, rotationSpeed); } else { model.CurrentNode++; if (model.CurrentNode >= model.Path.Count) { model.CurrentNode = 0; } var target = model.Path[model.CurrentNode]; model.GridTargetPosition = target; model.TargetPosition = GridUtil.ConvertPointToPosition(target); } GuardStorage.UpdateItem(model); _view.SetRotation(model.Rotation); _view.SetPosition(model.Position); _view.SetLightColor(model.Color); _view.SetLightSettings(model.VisionLength, model.VisionAngle); }
public GuardController(IGuardConfig config, IGuardView view) { _view = view; _modelGuid = GuardStorage.CreateModel(config); }
private void Restart() { PlayerStorage.Reset(); GuardStorage.Reset(); SceneManager.LoadScene(0, LoadSceneMode.Single); }