private void StartNewGame(object sender, EventArgs e) { this.ExitWindow(); World.CurrentLevel = World.MapFactory.Construct("TestMotel"); World.Player = World.EntityManager.Create(World.EntityFactory.Get("player")).Add(new GameObject(0, 0, World.CurrentLevel)); new EquipItemAction(World.Player, World.EntityManager.Create(World.EntityFactory.Get("boots")).Add(new GameObject(0, 0, World.CurrentLevel)), "Feet", true).OnProcess(); new EquipItemAction(World.Player, World.EntityManager.Create(World.EntityFactory.Get("jeans")).Add(new GameObject(0, 0, World.CurrentLevel)), "Legs", true).OnProcess(); new EquipItemAction(World.Player, World.EntityManager.Create(World.EntityFactory.Get("shirt")).Add(new GameObject(0, 0, World.CurrentLevel)), "Torso", true).OnProcess(); var npc = World.EntityManager.Create(World.EntityFactory.Get("person")).Add(new GameObject(4, 2, World.CurrentLevel)); World.EntityManager.Create(World.EntityFactory.Get("smallknife")).Add(new GameObject(0, 0, World.CurrentLevel)); World.EntityManager.Create(World.EntityFactory.Get("footballpads")).Add(new GameObject(0, 0, World.CurrentLevel)); World.EntityManager.Create(World.EntityFactory.Get("axe")).Add(new GameObject(0, 0, World.CurrentLevel)); World.EntityManager.Create(World.EntityFactory.Get("glock17")).Add(new GameObject(0, 0, World.CurrentLevel)); World.EntityManager.Create(World.EntityFactory.Get("lockpick")).Add(new GameObject(0, 0, World.CurrentLevel)); var ammo = World.EntityManager.Create(World.EntityFactory.Get("9x9mm")).Add(new GameObject(0, 0, World.CurrentLevel)); ammo.Get <Item>().Amount = 30; var armor = World.EntityManager.Create(World.EntityFactory.Get("footballpads")).Add(new GameObject(1, 1, World.CurrentLevel)); new EquipItemAction(npc, armor, "Torso", true).OnProcess(); World.Initialize(); ParentApplication.Push(new GameplayWindow(new SkrWindowTemplate { World = World })); }
private void DropItem(Entity user, Entity itemEntity) { var item = itemEntity.Get <Item>(); if (item.StackType == StackType.Hard) { if (item.Amount == 1) { user.Get <ControllerComponent>().Enqueue(new DropItemAction(user, itemEntity)); } else { ParentApplication.Push( new CountPrompt("How many items to drop to the ground?", amount => user.Get <ControllerComponent>().Enqueue(new DropItemAction(user, itemEntity, amount)), item.Amount, 0, item.Amount, PromptTemplate)); } } else { user.Get <ControllerComponent>().Enqueue(new DropItemAction(user, itemEntity)); } }
protected override void OnSelectItem(string slot) { if (_equipment.IsSlotEquipped(slot)) { _player.Get <ControllerComponent>().Enqueue(new UnequipItemAction(_player, slot)); } else { var items = _inventory.Items.Where(i => i.Has <Equipable>() && i.Get <Equipable>().SlotsOccupied.ContainsKey(slot)).ToList(); if (items.Count > 0) { ParentApplication.Push(new ItemWindow(new ItemWindowTemplate { Size = Size, IsPopup = IsPopup, HasFrame = true, Items = items, World = World, SelectSingleItem = true, ItemSelected = item => Equip(item, slot), })); } else { World.Log.Aborted("No items in inventory that go there."); } } }
private void Directions(string message, Action <Point> action) { ParentApplication.Push( new DirectionalPrompt(message, _player.Get <GameObject>().Location, action, PromptTemplate)); }
private void Targets(string message, Action <Point> action) { ParentApplication.Push( new TargetPrompt(message, _player.Get <GameObject>().Location, action, MapPanel, PromptTemplate)); }
private void Options <T>(string message, string fail, IEnumerable <T> entities, Func <T, string> descriptionFunc, Action <T> action) { ParentApplication.Push( new OptionsPrompt <T>(message, fail, entities, descriptionFunc, action, PromptTemplate)); }
public override int GetHashCode() { unchecked { var hashCode = (Mode != null ? Mode.GetHashCode() : 0); hashCode = (hashCode * 397) ^ (Schema != null ? Schema.GetHashCode() : 0); hashCode = (hashCode * 397) ^ (ParentApplication != null ? ParentApplication.GetHashCode() : 0); hashCode = (hashCode * 397) ^ (ParentSchema != null ? ParentSchema.GetHashCode() : 0); hashCode = (hashCode * 397) ^ (AttributeName != null ? AttributeName.GetHashCode() : 0); hashCode = (hashCode * 397) ^ (ParentMode != null ? ParentMode.GetHashCode() : 0); hashCode = (hashCode * 397) ^ (MetadataId != null ? MetadataId.GetHashCode() : 0); return(hashCode); } }
private void Boolean(string message, bool defaultBool, Action <bool> action) { ParentApplication.Push(new BooleanPrompt(message, defaultBool, action, PromptTemplate)); }
private void Number(string message, int min, int max, int initial, Action <int> action) { ParentApplication.Push(new CountPrompt(message, action, max, min, initial, PromptTemplate)); }
private void GameplayWindow_KeyPressed(object sender, KeyboardEventArgs keyboardEvent) { var playerLocation = _player.Get <GameObject>(); switch (keyboardEvent.KeyboardData.KeyCode) { case TCODKeyCode.Up: case TCODKeyCode.KeypadEight: // Up and 8 should have the same functionality Move(Direction.North); break; case TCODKeyCode.Down: case TCODKeyCode.KeypadTwo: Move(Direction.South); break; case TCODKeyCode.Left: case TCODKeyCode.KeypadFour: Move(Direction.West); break; case TCODKeyCode.KeypadFive: Enqueue(new WaitAction(_player)); break; case TCODKeyCode.Right: case TCODKeyCode.KeypadSix: Move(Direction.East); break; case TCODKeyCode.KeypadSeven: Move(Direction.Northwest); break; case TCODKeyCode.KeypadNine: Move(Direction.Northeast); break; case TCODKeyCode.KeypadOne: Move(Direction.Southwest); break; case TCODKeyCode.KeypadThree: Move(Direction.Southeast); break; default: { if (keyboardEvent.KeyboardData.ControlKeys == ControlKeys.LeftControl || keyboardEvent.KeyboardData.ControlKeys == ControlKeys.RightControl) { switch (keyboardEvent.KeyboardData.Character) { case 'r': { Enqueue(new ChangePostureAction(_player, Posture.Run)); } break; case 's': { Enqueue(new ChangePostureAction(_player, Posture.Stand)); } break; case 'c': { Enqueue(new ChangePostureAction(_player, Posture.Crouch)); } break; case 'p': { Enqueue(new ChangePostureAction(_player, Posture.Prone)); } break; case 'z': { Targets("Set AI of Entity", p => { var entitiesAtLocation = playerLocation.Level.GetEntitiesAt <ControllerComponent>(p).ToList(); var npc = entitiesAtLocation.First(); var options = new List <Controller> { new DoNothing(), new NPC() }; Options("What AI?", "No AI options.", options, o => o.GetType().Name, actor => { var ap = npc.Get <ControllerComponent>().AP; npc.Remove <ControllerComponent>(); npc.Add(new ControllerComponent(actor, ap)); }); }); } break; } } else { switch (keyboardEvent.KeyboardData.Character) { case 'A': { Options("With that weapon?", "No possible way of attacking.", FilterEquippedItems <MeleeComponent>(_player).ToList(), Identifier.GetNameOrId, weapon => Directions("Attack where?", p => Options("Attack where?", "Nothing at location to attack.", _player.Get <GameObject>().Level.GetEntitiesAt <BodyComponent, Creature>(p).ToList(), Identifier.GetNameOrId, defender => Options("Attack at what?", String.Format("{0} has no possible part to attack. How did we get here?", Identifier.GetNameOrId(defender)), defender.Get <BodyComponent>().BodyPartsList, bp => bp.Name, bp => Enqueue(new MeleeAttackAction(_player, defender, weapon, bp, true)))))); } break; case 'f': { Options("With what weapon?", "No possible way of shooting target.", FilterEquippedItems <RangeComponent>(_player).ToList(), Identifier.GetNameOrId, weapon => TargetsAt("Shoot where?", World.TagManager.IsRegistered("target") ? World.TagManager.GetEntity("target").Get <GameObject>().Location : playerLocation.Location, p => Options("Shoot at what?", "Nothing there to shoot.", _player.Get <GameObject>().Level.GetEntitiesAt <BodyComponent>(p), Identifier.GetNameOrId, delegate(Entity defender) { World.TagManager.Register("target", defender); Enqueue(new RangeAttackAction(_player, defender, weapon, defender.Get <BodyComponent>().GetRandomPart())); }))); } break; case 'F': { Options("With what weapon?", "No possible way of shooting target.", FilterEquippedItems <RangeComponent>(_player).ToList(), Identifier.GetNameOrId, weapon => TargetsAt("Shoot where?", World.TagManager.IsRegistered("target") ? World.TagManager.GetEntity("target").Get <GameObject>().Location : playerLocation.Location, p => Options("Shoot at what?", "Nothing there to shoot.", _player.Get <GameObject>().Level.GetEntitiesAt <BodyComponent>(p), Identifier.GetNameOrId, defender => Options("What part?", String.Format("{0} has no possible part to attack. How did we get here?", Identifier.GetNameOrId(defender)), defender.Get <BodyComponent>().BodyPartsList, bp => bp.Name, bp => { World.TagManager.Register("target", defender); Enqueue(new RangeAttackAction(_player, defender, weapon, bp, true)); })))); } break; case 'r': { Options("Reload what weapon?", "No weapons to reload.", FilterEquippedItems <RangeComponent>(_player).ToList(), Identifier.GetNameOrId, weapon => Options("What ammo?", "No possible ammo for selected weapon.", _player.Get <ItemContainerComponent>().Items.Where(e => e.Has <AmmoComponent>() && e.Get <AmmoComponent>().Caliber == weapon.Get <RangeComponent>().AmmoCaliber).ToList(), Identifier.GetNameOrId, ammo => Enqueue(new ReloadAction(_player, weapon, ammo)))); } break; case 'u': Directions("What direction?", p => Options("What object do you want to use?", "Nothing there to use.", playerLocation.Level.GetEntitiesAt <UseBroadcaster, VisibleComponent>(p).Where(e => e.Get <VisibleComponent>().VisibilityIndex > 0), Identifier.GetNameOrId, useable => Options(String.Format("Do what with {0}?", Identifier.GetNameOrId(useable)), String.Format("No possible action on {0}", Identifier.GetNameOrId(useable)), useable.Get <UseBroadcaster>().Actions.ToList(), use => use.Description, use => use.Use(_player, useable)))); break; case 'd': { var inventory = _player.Get <ItemContainerComponent>(); if (inventory.Count > 0) { ParentApplication.Push(new ItemWindow(new ItemWindowTemplate { Size = MapPanel.Size, IsPopup = true, HasFrame = true, World = World, Items = inventory.Items, SelectSingleItem = false, ItemSelected = i => DropItem(_player, i), })); } else { World.Log.Aborted("You are carrying no items to drop."); } } break; case 'g': { var inventory = _player.Get <ItemContainerComponent>(); // get all items that have a location (eg present on the map) that are at the location where are player is var items = playerLocation.Level.GetEntitiesAt <Item, VisibleComponent>(playerLocation.Location).Where(e => e.Get <VisibleComponent>().VisibilityIndex > 0 && !inventory.Items.Contains(e)); if (items.Count() > 0) { ParentApplication.Push(new ItemWindow(new ItemWindowTemplate { Size = MapPanel.Size, IsPopup = true, HasFrame = true, World = World, Items = items, SelectSingleItem = false, ItemSelected = i => PickUpItem(_player, i), })); } else { World.Log.Aborted("No items here to pick up."); } } break; case 'G': { var inventory = _player.Get <ItemContainerComponent>(); // get all items that have a location (eg present on the map) that are at the location where are player is var items = playerLocation.Level.GetEntitiesAt <Item, VisibleComponent>(playerLocation.Location).Where(e => e.Get <VisibleComponent>().VisibilityIndex > 0 && !inventory.Items.Contains(e)); if (items.Count() > 0) { Enqueue(new GetAllItemsAction(_player, items)); } else { World.Log.Aborted("No items here to pick up."); } } break; case 'j': { Directions("Jump what direction?", p => Enqueue(new JumpOverAction(_player, p - playerLocation.Location))); } break; case 'i': { var inventory = _player.Get <ItemContainerComponent>(); ParentApplication.Push(new ItemWindow(new ItemWindowTemplate { Size = MapPanel.Size, IsPopup = true, HasFrame = true, World = World, Items = inventory.Items, SelectSingleItem = false, ItemSelected = i => World.Log.Normal(String.Format("This is a {0}, it weights {1}.", i.Get <Identifier>().Name, i.Get <Item>().Weight)), })); } break; case 'w': ParentApplication.Push(new InventoryWindow(new InventoryWindowTemplate { Size = MapPanel.Size, IsPopup = true, HasFrame = true, World = World, Items = _player.Get <EquipmentComponent>().Slots.ToList(), })); break; case 'p': { Options("With what?", "No lockpicks available.", _player.Get <ItemContainerComponent>().Items.Where(i => i.Has <Lockpick>()), Identifier.GetNameOrId, lockpick => Directions("What direction?", p => Options("Select what to lockpick.", "Nothing there to lockpick.", _player.Get <GameObject>().Level.GetEntitiesAt <LockedFeature>(p), Identifier.GetNameOrId, feature => Enqueue(new LockpickAction(_player, lockpick, feature))))); } break; case 'l': ParentApplication.Push( new LookWindow( playerLocation.Location, delegate(Point p) { StringBuilder sb = new StringBuilder(); var entitiesAtLocation = playerLocation.Level.GetEntitiesAt(p); sb.AppendLine(playerLocation.Level.GetTerrain(p).Definition); foreach (var entity in entitiesAtLocation) { sb.AppendFormat("Entity: {0} ", entity.Has <ReferenceId>() ? entity.Get <ReferenceId>().RefId : entity.Id.ToString()); sb.AppendFormat("Name: {0} ", Identifier.GetNameOrId(entity)); if (entity.Has <Scenery>()) { sb.AppendFormat(entity.Get <Scenery>().ToString()); } sb.AppendLine(); } return(sb.ToString()); }, MapPanel, PromptTemplate)); break; case 'z': { _player.Get <ControllerComponent>().Cancel(); } break; case '`': { ParentApplication.Push(new DebugMenuWindow(new SkrWindowTemplate() { World = World })); } break; } } break; } } }