コード例 #1
0
        public override ValueTask <MovementResult> Update(CanvasTimingInformation context)
        {
            if (!_readyToExit && _door.CanGhostLeave(Ghost))
            {
                _readyToExit = true;
                return(new ValueTask <MovementResult>(MovementResult.NotFinished));
            }

            if (_finished)
            {
                Ghost.Direction = new DirectionInfo(Directions.Left, Directions.Left);
                Ghost.SetMovementMode(GhostMovementMode.Undecided);
                return(new ValueTask <MovementResult>(MovementResult.Finished));
            }

            Vector2 diff = _cellToMoveTo - _cellToMoveFrom;

            if (diff != Vector2.Zero)
            {
                diff = diff.Normalize();

                Ghost.Position = Ghost.Position + diff / Vector2s.Two;

                var dir = DirectionToIndexLookup.GetDirectionFromVector(diff);

                Ghost.Direction = new DirectionInfo(dir, dir);
            }

            if (Ghost.Position.Floor() == _cellToMoveTo.Floor())
            {
                Ghost.Position = _cellToMoveTo;
                whenAtTargetCell();
            }

            return(new ValueTask <MovementResult>(MovementResult.NotFinished));
        }