コード例 #1
0
ファイル: Moving.cs プロジェクト: driverb/projectRICH
        public void SetPosition(IGameObject owner, Entity.Vector targetPosition)
        {
            currentPosition        = targetPosition;
            lastPositionUpdateTime = GlobalClock.Now;

            currentVelocity.Reset();
        }
コード例 #2
0
ファイル: Moving.cs プロジェクト: driverb/projectRICH
        public Entity.Vector GetCurrentPosition(IGameObject owner)
        {
            if (!currentVelocity.IsZero())
            {
                var now = GlobalClock.Now;

                if (now != lastPositionUpdateTime)
                {
                    var elapsed      = now - lastPositionUpdateTime;
                    var nextPosition = currentPosition.Add(currentVelocity.Multiply(elapsed));

                    var currentToTarget = targetPosition.Diff(currentPosition);
                    var nextToTarget    = targetPosition.Diff(nextPosition);

                    if (currentToTarget.Dot(nextToTarget) < 0)
                    {
                        currentPosition = targetPosition;
                        Stop(owner);
                    }
                    else
                    {
                        currentPosition = nextPosition;
                    }
                }

                lastPositionUpdateTime = now;
            }
            return(currentPosition);
        }
コード例 #3
0
ファイル: Moving.cs プロジェクト: driverb/projectRICH
        public void WalkTo(IGameObject owner, Entity.Vector targetPosition)
        {
            this.targetPosition = targetPosition;

            var diff = targetPosition.Diff(GetCurrentPosition(owner));

            diff.Normalize();
            lastPositionUpdateTime = GlobalClock.Now;
            currentVelocity        = diff.Multiply(maxVelocity);
        }