Esempio n. 1
0
        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);
 }
Esempio n. 4
0
 private void Restart()
 {
     PlayerStorage.Reset();
     GuardStorage.Reset();
     SceneManager.LoadScene(0, LoadSceneMode.Single);
 }