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); } }
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; }
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; } }