示例#1
0
文件: Player.cs 项目: bradur/LD36
    bool Move(int x, int z)
    {
        if (Time.timeScale < 1f)
        {
            return(false);
        }
        if (!falling)
        {
            int newXPos = (int)transform.position.x + x;
            int newZPos = (int)transform.position.z + z;

            SingleTile tile = TileManager.main.GetTile(newXPos, newZPos);
            if (tile != null)
            {
                if (tile.TileType == TileType.Wall)
                {
                    //Debug.Log("<b>move:</b> [" + newXPos + ", " + newZPos + "] <color=red>WALL</color>");
                    return(false);
                }
                GenericObject tileObject = tile.TileObject;
                if (tileObject != null)
                {
                    if (tileObject.Movable)
                    {
                        if (!tileObject.Move(x, z))
                        {
                            return(false);
                        }
                        if (tileObject.ObjectType == ObjectType.MovableBlock)
                        {
                            SoundManager.main.PlaySound(SoundClip.MoveBlock);
                        }
                        else
                        {
                            SoundManager.main.PlaySound(SoundClip.MoveTreasure);
                        }
                    }
                    else if (
                        tileObject.ObjectType == ObjectType.MovableTreasureRed ||
                        tileObject.ObjectType == ObjectType.MovableTreasureBlue ||
                        tileObject.ObjectType == ObjectType.MovableTreasureGreen
                        )
                    {
                        GameManager.main.GainItem(tileObject.GetComponent <MovableTreasure>().GetItem());
                        SoundManager.main.PlaySound(SoundClip.GainItem);
                        tileObject.RemoveFromTile();
                        Destroy(tileObject.gameObject);
                    }
                    else if (
                        tileObject.ObjectType == ObjectType.LockedDoorRed ||
                        tileObject.ObjectType == ObjectType.LockedDoorGreen ||
                        tileObject.ObjectType == ObjectType.LockedDoorBlue)
                    {
                        if (!tileObject.GetComponent <LockedDoor>().UnlockDoor(GameManager.main.Items))
                        {
                            return(false);
                        }
                        SoundManager.main.PlaySound(SoundClip.UnlockDoor);
                        tileObject.RemoveFromTile();
                    }
                    else if (tileObject.ObjectType == ObjectType.ProjectileShooter)
                    {
                        return(false);
                    }
                    else if (tileObject.ObjectType == ObjectType.LevelEnd)
                    {
                        SoundManager.main.PlaySound(SoundClip.LevelEnd);
                        GameManager.main.FinishLevel();
                    }
                }
            }
            if (tile.TileType == TileType.Hole)
            {
                falling = true;
            }
            //Debug.Log("<b>move:</b> [" + newXPos + ", " + newZPos + "] <color=green>EMPTY</color>");
            transform.position = new Vector3(transform.position.x + x, transform.position.y, transform.position.z + z);
            xPos = (int)transform.position.x;
            zPos = (int)transform.position.z;
            return(true);
        }
        return(false);
    }