protected override void _use(GameEntity user, GameEntity target) { if(Ticks < 1) { base._use(user, target); } var r = new Random(); var variance = (float)r.Next(_varianceLow, _varianceHi) / 100; var atk = user.Components.Where(c => c is StatComponent) .Cast<StatComponent>() .Single(s => s.Name == _atkStat); var def = target.Components.Where(c => c is StatComponent) .Cast<StatComponent>() .Single(s => s.Name == _defStat); var total = (int)(variance * ((_atkMod * atk.CurrentValue) - (_defMod * def.CurrentValue))); total = total < 0 ? 0 : total; target.Components.Where(c => c is StatComponent) .Cast<StatComponent>() .Single(s => s.Name == _target) .CurrentValue -= total; Console.WriteLine("Attack Command {0} executed for {1} of {2}", Name, _cost, _costStat.ToString()); Console.WriteLine("Stats {0} vs {1} results in damage value of {2}.", _atkStat.ToString(), _defStat.ToString(), total); Console.WriteLine("Target Stat {0} new value = {1}", _target.ToString(), target.Components.Where(c => c is StatComponent) .Cast<StatComponent>() .Single(s => s.Name == _target) .CurrentValue); }
public override void Execute(GameEntity user, GameEntity target) { if (TargetName == "") { TargetName = target.Name; UserName = user.Name; } _use(user, target); }
public void CreateCharacter(GameEntityManager manager) { namejump: Console.WriteLine("What is your name?"); var n = Console.ReadLine(); Console.WriteLine(); var e = new GameEntity(); if(n.Length > 2 && n.Length < 18) e = manager.CreateEntity(n, TypeTag.Player); else { Console.WriteLine("Names are 3-17 characters. Try again..."); goto namejump; } manager.AddComponentToEntity(new StatComponent(StatName.Life, 100) { IsVital = true }, e); manager.AddComponentToEntity(new StatComponent(StatName.Mana, 100), e); manager.AddComponentToEntity(new ActionTimerComponent(), e); manager.AddComponentToEntity(new PlayerInputComponent(), e); Console.WriteLine("Choose a class:\n\tf = fighter\n\tr = rogue\n\tw = wizard"); var choice = Console.ReadKey().KeyChar.ToString(); Console.WriteLine(); classjump: switch (choice) { case "f": manager.AddComponentToEntity(new ClassComponent(CharacterClassName.Fighter), e); manager.AddComponentToEntity(new StatComponent(StatName.Mastery, 3), e); manager.AddComponentToEntity(new StatComponent(StatName.Resilience, 4), e); manager.AddComponentToEntity(new StatComponent(StatName.Haste, 2), e); break; case "r": manager.AddComponentToEntity(new ClassComponent(CharacterClassName.Rogue), e); manager.AddComponentToEntity(new StatComponent(StatName.Mastery, 2), e); manager.AddComponentToEntity(new StatComponent(StatName.Resilience, 3), e); manager.AddComponentToEntity(new StatComponent(StatName.Haste, 4), e); break; case "w": manager.AddComponentToEntity(new ClassComponent(CharacterClassName.Wizard), e); manager.AddComponentToEntity(new StatComponent(StatName.Mastery, 4), e); manager.AddComponentToEntity(new StatComponent(StatName.Resilience, 2), e); manager.AddComponentToEntity(new StatComponent(StatName.Haste, 3), e); break; default: Console.WriteLine("Invalid Input. Try again..."); choice = Console.ReadKey().KeyChar.ToString(); goto classjump; } manager.AddComponentToEntity(new LevelComponent { LevelValue = 1, XpValue = 0, IsStatic = false }, e); }
public void CreateMonster(GameEntityManager em, CommandManager cm) { monsternamejump: Console.WriteLine("What is this Monster's name?"); var n = Console.ReadLine(); Console.WriteLine(); var e = new GameEntity(0, "", TypeTag.Monster); if (n.Length > 2 && n.Length < 18) e = em.CreateEntity(n, TypeTag.Monster); else { Console.WriteLine("Names must be 3-17 characters. Try again..."); goto monsternamejump; } em.AddComponentToEntity(new ActionTimerComponent(), e); em.AddComponentToEntity(new AIInputComponent(), e); Console.WriteLine(); Console.WriteLine("Monster Level?"); var l = int.Parse(Console.ReadLine()); if (l > 0 && l < 24) em.AddComponentToEntity(new LevelComponent { IsStatic = true, LevelValue = l, XpValue = l * 5 }, e); Console.WriteLine(); classjump: Console.WriteLine("Monster Class?"); var c = Console.ReadLine(); switch (c) { case "f": em.AddComponentToEntity(new StatComponent(StatName.Life, (50 + l * 25)) { IsVital = true }, e); em.AddComponentToEntity(new StatComponent(StatName.Mana, (10 + l * 10)), e); em.AddComponentToEntity(new StatComponent(StatName.Mastery, (int)(2 + l * 1.5)), e); em.AddComponentToEntity(new StatComponent(StatName.Resilience, (3 + l * 2)), e); em.AddComponentToEntity(new StatComponent(StatName.Haste, (1 + l)), e); break; case "r": em.AddComponentToEntity(new StatComponent(StatName.Life, (30 + l * 15)), e); em.AddComponentToEntity(new StatComponent(StatName.Mana, (30 + l * 15)), e); em.AddComponentToEntity(new StatComponent(StatName.Resilience, (int)(2 + l * 1.5)), e); em.AddComponentToEntity(new StatComponent(StatName.Haste, (3 + l * 2)), e); em.AddComponentToEntity(new StatComponent(StatName.Mastery, (1 + l)), e); break; case "w": em.AddComponentToEntity(new StatComponent(StatName.Life, (10 + l * 10)), e); em.AddComponentToEntity(new StatComponent(StatName.Mana, (50 + l * 25)), e); em.AddComponentToEntity(new StatComponent(StatName.Haste, (int)(2 + l * 1.5)), e); em.AddComponentToEntity(new StatComponent(StatName.Mastery, (3 + l * 2)), e); em.AddComponentToEntity(new StatComponent(StatName.Resilience, (1 + l)), e); break; default: Console.WriteLine("Invalid Input. Try Again..."); goto classjump; } for(var i = 0; i < cm.CommandCollection.Commands.Count; i++) { Console.WriteLine(i + ") " + cm.CommandCollection.Commands[i].Name); } bool done = false; while (!done) { Console.WriteLine("Choose Commands for this monster..."); var choice = Console.ReadLine(); var command = cm.CommandCollection.Commands.SingleOrDefault(cmd => choice == cmd.Name); if (command != null) { var input = e.Components.Where(cmp => cmp is AIInputComponent) .Cast<AIInputComponent>() .Single(); input.CommandCollection.Commands.Add(command); Console.WriteLine("Done?"); if(Console.ReadLine() == "y") { done = true; } } else Console.WriteLine("Invalid input, try again..."); } }
//returns created entity for convenience public GameEntity CreateEntity(string name, TypeTag tag = TypeTag.None) { if(LowestAvailableId == 0) { Console.WriteLine("Entity List not initialized, load entities first."); return null; } if (LowestAvailableId < int.MaxValue) { var e1 = new GameEntity(LowestAvailableId++, name, tag); EntityCollection.Entities.Add(e1); Console.WriteLine("Entity added."); return e1; } else { for (var i = 1; i < int.MaxValue; ++i) { if (!EntityCollection.Entities.Exists(e => e.Id == i)) { var e2 = new GameEntity(i, name, tag); EntityCollection.Entities.Add(e2); Console.WriteLine("Entity added."); return e2; } } Console.WriteLine("No ID's Available!"); return null; } }
public void AddComponentToEntity(GameComponent c, GameEntity e) { if (!c.IsSingular) { e.Components.Add(c); Console.WriteLine("Component {0} added to Entity {1}.", c.ToString(), e.Name); } else if(c.IsSingular && !e.Components.Contains(c)) { e.Components.Add(c); Console.WriteLine("Component {0} added to Entity {1}.", c.ToString(), e.Name); } else { Console.WriteLine("Singular component {0} already exists...", c.ToString()); return; } }
protected override void _use(GameEntity user, GameEntity target) { tick(target); }
protected virtual void tick(GameEntity targ) { }
protected virtual void _use(GameEntity user, GameEntity target) { target.Components.Where(c => c is StatComponent) .Cast<StatComponent>() .Single(s => s.Name == Tstat) .CurrentValue += Val; }
public override void Execute(GameEntity user, GameEntity target) { _use(user, target); }
public void Update() { if (_tickingCommands.Count > 0) { if (_time % 3 == 0) { foreach (var t in _tickingCommands) { if (t.Ticks == t.MaxTicks) break; var target = _combatants.Single(c => c.Name == t.TargetName); var user = _combatants.Single(c => c.Name == t.UserName); t.Execute(user, target); t.Ticks++; } } } foreach (var c in _combatants) { var vit = c.Components.Where(cm => cm is StatComponent).Cast<StatComponent>().Single(s => s.Name == StatName.Life); if (vit.CurrentValue <= 0) c.Alive = false; if (!c.Alive) break; var t = c.Components.Where(cm => cm is ActionTimerComponent).Cast<ActionTimerComponent>().Single(); var lvl = c.Components.Where(cm => cm is LevelComponent).Cast<LevelComponent>().Single(); var haste = c.Components.Where(cm => cm is StatComponent).Cast<StatComponent>().Single(s => s.Name == StatName.Haste); t.AddToMeter(2.00f + ((haste.CurrentValue / 75) - (lvl.LevelValue / 40))); if (t.Current == 100.00f) { if (c.Tags.Contains(TypeTag.Player)) { var input = c.Components.Where(cmp => cmp is PlayerInputComponent).Cast<PlayerInputComponent>().Single(); var command = new Command(); var target = new GameEntity(); bool can = false; while (!can) { command = input.HandleInput(); target = ChooseTarget(); var cost = c.Components.Where(s => s is StatComponent) .Cast<StatComponent>() .Single(s => s.Name == command._costStat); if (!(command._cost > cost.CurrentValue)) can = true; if (!can) Console.WriteLine("Not enough {0}.", cost.Name); } if (command is TimedCommand) { var ticker = command as TimedCommand; ticker.Ticks = 0; ticker.UserName = c.Name; ticker.TargetName = target.Name; _tickingCommands.Add(ticker); } command.Execute(c, target); } if(c.Tags.Contains(TypeTag.Monster)) { var input = c.Components.Where(cmp => cmp is AIInputComponent).Cast<AIInputComponent>().Single(); var command = new Command(); var target = new GameEntity(); bool can = false; while (!can) { command = input.HandleInput(); target = _players().First(); var cost = c.Components.Where(s => s is StatComponent) .Cast<StatComponent>() .Single(s => s.Name == command._costStat); if (!(command._cost > cost.CurrentValue)) can = true; if (!can) { Console.WriteLine("Not enough {0}.", cost.Name); break; } } if (command is TimedCommand) { var ticker = command as TimedCommand; ticker.Ticks = 0; ticker.UserName = c.Name; ticker.TargetName = target.Name; _tickingCommands.Add(ticker); } command.Execute(c, target); } t.Current = 0; } } if(_stats(_monsters()).Where(s => s.Name == StatName.Life && s.CurrentValue <= 0).Count() > 0) { PlayerVictory(); } if (_stats(_players()).Where(s => s.Name == StatName.Life && s.CurrentValue <= 0).Count() > 0) { MonsterVictory(); } _time += 1; }
public void RemoveItem(GameEntity e) { if (Items.Contains(e)) Items.Remove(e); }
public void AddItem(GameEntity e) { if (!(e.Tags.Contains(TypeTag.Item)) && Items.Count >= MaxSlots) return; Items.Add(e); }
public virtual void Execute(GameEntity user, GameEntity target) { }