Esempio n. 1
0
        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);
        }
Esempio n. 2
0
 public override void Execute(GameEntity user, GameEntity target)
 {
     if (TargetName == "")
     {
         TargetName = target.Name;
         UserName = user.Name;
     }
     _use(user, target);
 }
Esempio n. 3
0
 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);
 }
Esempio n. 4
0
        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;
     }
 }
Esempio n. 7
0
 protected override void _use(GameEntity user, GameEntity target)
 {
     tick(target);
 }
Esempio n. 8
0
 protected virtual void tick(GameEntity targ)
 {
 }
Esempio n. 9
0
 protected virtual void _use(GameEntity user, GameEntity target)
 {
     target.Components.Where(c => c is StatComponent)
         .Cast<StatComponent>()
         .Single(s => s.Name == Tstat)
         .CurrentValue += Val;
 }
Esempio n. 10
0
 public override void Execute(GameEntity user, GameEntity target)
 {
     _use(user, target);
 }
Esempio n. 11
0
 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;
 }
Esempio n. 12
0
 public void RemoveItem(GameEntity e)
 {
     if (Items.Contains(e))
         Items.Remove(e);
 }
Esempio n. 13
0
 public void AddItem(GameEntity e)
 {
     if (!(e.Tags.Contains(TypeTag.Item)) && Items.Count >= MaxSlots) return;
     Items.Add(e);
 }
Esempio n. 14
0
 public virtual void Execute(GameEntity user, GameEntity target)
 {
 }