コード例 #1
0
    public void CharacterMoveUpdate(int moveOrientation)
    {
        if (isPushingOrPull)
        {
            // 如果正在推或者拉

            if (characterOrientation == moveOrientation || characterOrientation == (moveOrientation + 2) % 4)
            {
                if (operatingFurnitureController.TryToMoveFurnitureOffset(currentCoordinate, orientationArray[moveOrientation]))
                {
                    // 如果家具可以向上推动
                    //this.transform.position = this.transform.position + new Vector3( orientationArray[moveOrientation].x * 2.5f, 0.0f, orientationArray[moveOrientation].y * 2.5f );
                    isMoving           = true;
                    currentCoordinate += orientationArray[moveOrientation];
                    endPosition        = mainWorldController.GetTilePosition(currentCoordinate);
                    direction          = Vector3.Normalize(endPosition - this.transform.position);

                    if (characterOrientation == moveOrientation)
                    {
                        targetCoordinate = currentCoordinate + orientationArray[moveOrientation];
                    }
                    else
                    {
                        targetCoordinate = currentCoordinate - orientationArray[moveOrientation];
                    }

                    if (mainWorldController.CheckTileOperatable(targetCoordinate))
                    {
                        operatableTarget.SetActive(true);
                        operatableTarget.transform.position = mainWorldController.GetTilePosition(targetCoordinate);
                    }
                    else
                    {
                        operatableTarget.SetActive(false);
                    }
                }
            }
        }
        else
        {
            if (characterOrientation != moveOrientation)
            {
                this.transform.rotation = Quaternion.Euler(0, moveOrientation * 90.0f, 0);
                characterOrientation    = moveOrientation;
                targetCoordinate        = currentCoordinate + orientationArray[moveOrientation];

                if (mainWorldController.CheckTileOperatable(targetCoordinate))
                {
                    operatableTarget.SetActive(true);
                    operatableTarget.transform.position = mainWorldController.GetTilePosition(targetCoordinate);
                }
                else
                {
                    operatableTarget.SetActive(false);
                }
            }

            if (mainWorldController.CheckTilePassable(currentCoordinate + orientationArray[moveOrientation]))
            {
                //this.transform.position = this.transform.position + new Vector3(orientationArray[moveOrientation].x * 2.5f, 0.0f, orientationArray[moveOrientation].y * 2.5f);
                isMoving           = true;
                currentCoordinate += orientationArray[moveOrientation];
                endPosition        = mainWorldController.GetTilePosition(currentCoordinate);
                direction          = Vector3.Normalize(endPosition - this.transform.position);

                targetCoordinate += orientationArray[moveOrientation];

                if (mainWorldController.CheckTileOperatable(targetCoordinate))
                {
                    operatableTarget.SetActive(true);
                    operatableTarget.transform.position = mainWorldController.GetTilePosition(targetCoordinate);
                }
                else
                {
                    operatableTarget.SetActive(false);
                }
            }
        }
    }