コード例 #1
0
ファイル: MovableObject.cs プロジェクト: ekhudson/Tycoon
    /// <summary>
    /// Move Object directly to position.
    /// </summary>
    /// <param name='position'>
    /// Position.
    /// </param>
    /// <param name='interruptable'>
    /// Interruptable.
    /// </param>
    public void MoveToPosition(MovableObjectController.MovableObjectPosition position, float speed, bool interruptable)
    {
        if (State == MoveableObjectStates.MOVING && !mInterruptable)
        {
            return;
        }

        mPositionQueue.Clear();
        mPositionQueue.Add(position);
        mMoveSpeed = speed;
        mCurrentMoveTime = 0f;
        mInterruptable = interruptable;
        mPreviousPosition = mCurrentPosition;
        mCurrentPosition = -1;
        mTargetPosition = 0;
        State = MoveableObjectStates.MOVING;
    }
コード例 #2
0
ファイル: MovableObject.cs プロジェクト: ekhudson/Tycoon
    private void Update()
    {
        switch(State)
        {
            case MoveableObjectStates.IDLE:

            break;

            case MoveableObjectStates.MOVING:

                if (mMoveMode == MoveModes.LERP)
                {
                    transform.position = Vector3.Lerp(transform.position, mOriginalPosition + mPositionQueue[mTargetPosition].Position, mMoveSpeed * Time.deltaTime);
                    transform.rotation = Quaternion.Lerp(transform.rotation, mPositionQueue[mTargetPosition].Rotation, mMoveSpeed * Time.deltaTime);
                }
                else if (mMoveMode == MoveModes.LINEAR)
                {
                    transform.position += (mMoveDirection * (mMoveSpeed * Time.deltaTime));
                    transform.rotation = Quaternion.Lerp(transform.rotation, mPositionQueue[mTargetPosition].Rotation, (1 - ((mOriginalPosition + mPositionQueue[mTargetPosition].Position) - transform.position).magnitude / mOriginalMagnitude));
                }

                if ( ((mOriginalPosition + mPositionQueue[mTargetPosition].Position) - transform.position).magnitude < kMinimumStopDistance)
                {
                    transform.position = mOriginalPosition + mPositionQueue[mTargetPosition].Position;
                    transform.rotation = mPositionQueue[mTargetPosition].Rotation;

                    mTargetPosition += mIterateDirection;

                    if (mTargetPosition >= mPositionQueue.Count || mTargetPosition < 0)
                    {
                        mCurrentMoveTime = 0;
                        mCurrentPosition = mTargetPosition;

                        if (mLoopMode == LoopModes.NONE)
                        {
                            mTargetPosition = -1;
                            State = MoveableObjectStates.IDLE;
                            return;
                        }
                        else if (mLoopMode == LoopModes.WRAP)
                        {
                            mTargetPosition = mTargetPosition < 0 ? mPositionQueue.Count - 1 : 0;
                        }
                        else if (mLoopMode == LoopModes.PINGPONG)
                        {
                            mIterateDirection *= -1;
                            mTargetPosition += mIterateDirection;
                        }
                    }

                    mMoveDirection = ((mOriginalPosition + mPositionQueue[mTargetPosition].Position) - transform.position);
                    mOriginalMagnitude = mMoveDirection.magnitude;
                    mMoveDirection = mMoveDirection.normalized;
                }

                mCurrentMoveTime += Time.deltaTime;

            break;
        }
    }
コード例 #3
0
ファイル: MovableObject.cs プロジェクト: ekhudson/Tycoon
    public void GivePath(List<MovableObjectController.MovableObjectPosition> positions, float speed, bool interruptable, MoveModes moveMode, LoopModes loopMode)
    {
        if (State == MoveableObjectStates.MOVING && !mInterruptable)
        {
            return;
        }

        mPositionQueue.Clear();
        mPositionQueue = positions;
        mMoveSpeed = speed;
        mMoveMode = moveMode;
        mLoopMode = loopMode;

        mMoveDirection = ((mOriginalPosition + mPositionQueue[0].Position) - transform.position);
        mOriginalMagnitude = mMoveDirection.magnitude;
        mMoveDirection = mMoveDirection.normalized;

        mCurrentMoveTime = 0f;
        mInterruptable = interruptable;
        mPreviousPosition = mCurrentPosition;
        mCurrentPosition = -1;
        mTargetPosition = 0;
        State = MoveableObjectStates.MOVING;
    }