Exemple #1
0
        public void Interact(Character character)
        {
            var newDoorDest = State == DoorState.Opened ? ClosedBounds : OpenBounds;
            var charactersThatWillTouchNewDest = SpaceTime.CurrentSpaceTime.Elements.WhereAs <Character>().Where(c => c.OverlapPercentage(newDoorDest) > 0).Count();

            if (charactersThatWillTouchNewDest == 0)
            {
                if (state == DoorState.Locked)
                {
                    OnPlayerTriedToOpenLockedDoor.Fire();
                }
                else
                {
                    State = State == DoorState.Closed ? DoorState.Opened : DoorState.Closed;
                }
            }
        }
Exemple #2
0
        public Task Interact(Character character)
        {
            throttler = throttler ?? new TimeThrottler(() =>
            {
                var newDoorDest = State == DoorState.Opened ? ClosedBounds : OpenBounds;

                if (state == DoorState.Locked)
                {
                    OnPlayerTriedToOpenLockedDoor.Fire();
                }
                else
                {
                    State = State == DoorState.Closed ? DoorState.Opened : DoorState.Closed;
                    foreach (var c in SpaceTime.CurrentSpaceTime.Elements.WhereAs <Character>().Where(c => c.OverlapPercentage(newDoorDest) > 0))
                    {
                        c.NudgeFree(optimalAngle: c.Velocity.Angle);
                    }
                }
            }, this.Lifetime);

            throttler.Invoke();
            return(Task.CompletedTask);
        }