public virtual void Update(InputComponent input, PlayerFieldCharacter character)
        {
            var characterCollider = character.CharacterComponent;

            if (input.Interact && RequiresInteraction)
            {
                var startPos   = character.Entity.Transform.Position + new Vector3(0, 0.5f, 0);
                var forwardvec = startPos + (character.GetForwardVector() * 2.0f);
                var hitresult  = this.GetSimulation().Raycast(startPos, forwardvec, CollisionFilterGroups.SensorTrigger, CollisionFilterGroupFlags.SensorTrigger);
                if (hitresult.Collider == _collider && (this.Entity.Transform.Position - character.Entity.Transform.Position).LengthSquared() < _minimumDistance)
                {
                    //Ensure character and eventbox are facing each other when interacting.
                    forwardvec.Normalize();
                    var eventNormal     = Entity.Transform.RotationEulerXYZ.Forward();
                    var characterNormal = forwardvec;
                    var isFacing        = Vector3.Dot(eventNormal, characterNormal).RoughlyEquals(-1.0f);
                    if (isFacing)
                    {
                        Execute(input, character);
                    }
                }
            }
            else
            {
                foreach (var collision in _collider.Collisions)
                {
                    if ((collision.ColliderA == characterCollider || collision.ColliderB == characterCollider) && !RequiresInteraction)
                    {
                        Execute(input, character);
                    }
                }
            }
        }
        protected override void Execute(InputComponent input, PlayerFieldCharacter character)
        {
            base.Execute(input, character);
            if (this.NextSceneName.NullIfEmpty() == null)
            {
                return;
            }
            Core.Instance.UpdateScene(new SceneChangeArgs()

            {
                SceneName            = NextSceneName,
                SceneChangeId        = NextSceneChangeId,
                PlayerFieldCharacter = character.Serialize()
            });
        }
 public override void Update(InputComponent input, PlayerFieldCharacter character)
 {
     base.Update(input, character);
 }
 protected virtual void Execute(InputComponent input, PlayerFieldCharacter character)
 {
 }