示例#1
0
        private void HandleItemUse()
        {
            if (inventoryItems[menuCursor].ItemID == "ITEM_BOX")
            {
                if (itemOnHand == null)
                {
                    itemOnHand = inventoryItems[menuCursor];
                    inventoryItems.RemoveAt(menuCursor);
                }
                else
                {
                    var tmp = itemOnHand;

                    itemOnHand = inventoryItems[menuCursor];
                    inventoryItems.RemoveAt(menuCursor);
                    inventoryItems.Insert(menuCursor, tmp);
                }


                if (inventoryItems.Count <= 0)
                {
                    menuCursor  = 0;
                    inputTarget = PlayerControlTarget.PlayerTruckMenu;
                    return;
                }

                menuCursor = Math.Clamp(menuCursor, 0, inventoryItems.Count - 1);
            }
        }
示例#2
0
        public WorldGameState(GameStateConstants thisState, string worldSpritePath)
            : base(thisState)
        {
            worldMap = new Sprite(new Texture(worldSpritePath));
            tiles    = new List <Tile>();
            entities = new List <Entity>();

            camera  = new View(player.Position + player.Size / 2, new Vector2f(426, 240));
            guiView = new View(camera.Size / 2, camera.Size);

            tiles.Add(new Tile(0, 0));

            inventoryItems.Add(new BoxItem("Adam Smith", "1-1-1"));
            inventoryItems.Add(new BoxItem("Gary Baker", "1-1-2"));
            inventoryItems.Add(new BoxItem("Joshua Bright", "3-3-1"));

            playerCursor                  = new RectangleShape(new Vector2f(10, 10));
            playerCursor.FillColor        = Color.Transparent;
            playerCursor.OutlineThickness = -1;
            playerCursor.OutlineColor     = Color.Cyan;


            vehicleExitArea                  = new RectangleShape(new Vector2f(16, 16));
            vehicleExitArea.FillColor        = Color.Transparent;
            vehicleExitArea.OutlineThickness = -1;
            vehicleExitArea.OutlineColor     = Color.Magenta;
            playerTruck = new Vehicle(new Vector2f(130, 100), "Assets/Sprites/blue_vehicles_waifu2x.png");

            entities.Add(player);
            entities.Add(playerTruck);

            inputTarget = PlayerControlTarget.PlayerCharacter;

            cameraTarget = player;
        }
示例#3
0
        public override void KeyDown(Keyboard.Key key)
        {
            switch (inputTarget)
            {
            case PlayerControlTarget.PlayerTruck:
                if (key <= Keyboard.Key.Down && key >= Keyboard.Key.Left)
                {
                    playerInput[key - Keyboard.Key.Left] = 1f;
                }

                if (key == Keyboard.Key.X)
                {
                    float exitAngle = 0f;
                    switch (playerTruck.SpriteFrame)
                    {
                    case 5:
                        exitAngle = 0f;
                        break;

                    case 7:
                        exitAngle = 90f;
                        break;

                    case 1:
                        exitAngle = 180;
                        break;

                    case 3:
                        exitAngle = -90f;
                        break;
                    }

                    exitAngle += 90f;
                    exitAngle  = exitAngle * (float)Math.PI / 180f;

                    var exitTrajectory =
                        playerTruck.Position +
                        playerTruck.Size / 2 +
                        -player.Size / 2 +
                        new Vector2f((float)Math.Cos(exitAngle), (float)Math.Sin(exitAngle)) * 15;
                    vehicleExitArea.Position = exitTrajectory;
                    bool exitBlocked = false;

                    foreach (var t in tiles)
                    {
                        if (Collision(
                                exitTrajectory.X, exitTrajectory.Y, 16, 16,
                                t.X, t.Y, t.W, t.H))
                        {
                            exitBlocked = true;
                            break;
                        }
                    }

                    if (!exitBlocked)
                    {
                        player.Position = exitTrajectory;

                        inputTarget = PlayerControlTarget.PlayerCharacter;

                        playerTruck.Velocity.X = 0;
                        playerTruck.Velocity.Y = 0;

                        player.Visible = true;
                    }
                }

                break;

            case PlayerControlTarget.PlayerCharacter:
                if (key <= Keyboard.Key.Down && key >= Keyboard.Key.Left)
                {
                    playerInput[key - Keyboard.Key.Left] = 1f;
                }

                if (key == Keyboard.Key.Z)
                {
                    if (Collision(playerCursor.Position.X, playerCursor.Position.Y, playerCursor.Size.X, playerCursor.Size.Y,
                                  playerTruck.Position.X, playerTruck.Position.Y, playerTruck.Size.X, playerTruck.Size.Y))
                    {
                        Array.Fill(playerInput, 0f);
                        inputTarget = PlayerControlTarget.PlayerTruckMenu;
                        menuCursor  = 0;
                    }
                }
                break;

            case PlayerControlTarget.PlayerTruckMenu:
                if (key == Keyboard.Key.Down)
                {
                    menuCursor = (menuCursor + 1) % 3;
                }
                else if (key == Keyboard.Key.Up)
                {
                    menuCursor = (menuCursor == 0 ? 2 : menuCursor - 1);
                }

                if (key == Keyboard.Key.Z)
                {
                    switch (menuCursor)
                    {
                    case (int)TruckMenu.Drive:
                        player.Visible = false;
                        inputTarget    = PlayerControlTarget.PlayerTruck;
                        break;

                    case (int)TruckMenu.AccessInventory:
                        if (inventoryItems.Count > 0)
                        {
                            inputTarget = PlayerControlTarget.Inventory;
                            menuCursor  = 0;
                        }
                        break;

                    case (int)TruckMenu.Exit:
                        menuCursor  = 0;
                        inputTarget = PlayerControlTarget.PlayerCharacter;
                        break;
                    }
                }

                if (key == Keyboard.Key.X)
                {
                    inputTarget = PlayerControlTarget.PlayerCharacter;
                    menuCursor  = 0;
                }
                break;

            case PlayerControlTarget.Inventory:
                if (key == Keyboard.Key.Down)
                {
                    menuCursor = (menuCursor + 1) % inventoryItems.Count;
                }
                else if (key == Keyboard.Key.Up)
                {
                    menuCursor = (menuCursor == 0 ? inventoryItems.Count - 1 : menuCursor - 1);
                }

                else if (key == Keyboard.Key.X)
                {
                    inputTarget = PlayerControlTarget.PlayerTruckMenu;
                    menuCursor  = 0;
                }
                else if (key == Keyboard.Key.Z)
                {
                    HandleItemUse();
                }

                break;
            }
        }