Ejemplo n.º 1
0
        public static Team FromDna(DNA dna)
        {
            var team = new Team();

            for (int i = 0; i < dna.MobCount; i++)
            {
                int mobOffset = i * dna.MobSize;

                var mob = new JsonMob();
                mob.hp = (int)Math.Round(dna.Data[mobOffset] * Constants.HpMax);
                mob.ap = (int)Math.Round(dna.Data[mobOffset + 1] * Constants.ApMax);

                for (int j = 0; j < dna.AbilityCount; j++)
                {
                    int offset = mobOffset + DNA.MobAttributeCount + j * DNA.AbilityAttributeCount;

                    int dmg      = (int)Math.Round(dna.Data[offset + 0] * (Constants.DmgMax - minDmg) + minDmg);
                    int cost     = (int)Math.Round(dna.Data[offset + 1] * Constants.CostMax);
                    int range    = (int)Math.Round(dna.Data[offset + 2] * Constants.RangeMax);
                    int cooldown = (int)Math.Round(dna.Data[offset + 3] * Constants.CooldownMax);

                    int buffDmg      = (int)Math.Round(dna.Data[offset + 4] * Constants.BuffDmgMax);
                    int buffApDmg    = (int)Math.Round(dna.Data[offset + 5] * Constants.BuffApDmgMax);
                    int buffLifetime = (int)Math.Round(dna.Data[offset + 6] * Constants.BuffLifetimeMax);

                    int radius           = (int)Math.Round(dna.Data[offset + 7] * Constants.BuffMaxRadius);
                    int areaBuffDmg      = (int)Math.Round(dna.Data[offset + 8] * Constants.BuffDmgMax);
                    int areaBuffApDmg    = (int)Math.Round(dna.Data[offset + 9] * Constants.BuffApDmgMax);
                    int areaBuffLifetime = (int)Math.Round(dna.Data[offset + 10] * Constants.BuffLifetimeMax);

                    var buff = new Buff(-buffDmg,
                                        -buffApDmg,
                                        buffLifetime);

                    var areaEffect = new Buff(-areaBuffDmg,
                                              -areaBuffApDmg,
                                              areaBuffLifetime);

                    var areaBuff = new AreaBuff(AxialCoord.Zero, radius, areaEffect);

                    var ability = new JsonAbility(dmg,
                                                  cost,
                                                  range,
                                                  cooldown,
                                                  new JsonBuff(buff),
                                                  new JsonAreaBuff(areaBuff));
                    mob.abilities.Add(ability);
                }

                team.mobs.Add(mob);
            }

            return(team);
        }
Ejemplo n.º 2
0
        public override void Update(GameTime time)
        {
            var mob = _mobFunc();

            if (mob != null)
            {
                var game       = _gameFunc();
                var mobManager = game.MobManager;

                // Update and rendering are skipped if the ability isn't present
                if (_abilityIndex < mob.MobInfo.Abilities.Count)
                {
                    Entity.Hidden = false;
                }
                else
                {
                    Entity.Hidden = true;
                    return;
                }

                var abilityId = mob.MobInfo.Abilities[_abilityIndex];
                _abilityInfo = mobManager.AbilityForId(abilityId);

                var inputManager = InputManager.Instance;
                var aabb         = new Rectangle(Entity.RenderPosition.ToPoint(),
                                                 Entity.LayoutSize.ToPoint());

                if (inputManager.JustLeftClickReleased())
                {
                    if (aabb.Contains(inputManager.MousePosition))
                    {
                        EnqueueClickEvent(() => OnClick?.Invoke(_abilityIndex));
                    }
                }

                _dmgLabel.Text   = _abilityInfo.Dmg.ToString();
                _abLabel.Text    = _abilityInfo.Cost.ToString();
                _rangeLabel.Text = _abilityInfo.Range.ToString();

                var buff = _abilityInfo.Buff.IsZero ? Buff.ZeroBuff() : _abilityInfo.Buff;
                _buffLabel.Text =
                    $"{buff.HpChange}/{buff.ApChange} " +
                    $"({buff.Lifetime} turns)";

                var areaBuff = _abilityInfo.AreaBuff.IsZero ? AreaBuff.ZeroBuff() : _abilityInfo.AreaBuff;
                _areaBuffLabel.Text =
                    $"{areaBuff.Effect.HpChange}/{areaBuff.Effect.ApChange} " +
                    $"({areaBuff.Effect.Lifetime} turns, {areaBuff.Radius}r)";

                _cooldownLabel.Text = _abilityInfo.Cooldown.ToString();
            }
        }
Ejemplo n.º 3
0
        public static AreaBuff RandomAreaBuff()
        {
            var buff = new AreaBuff(AxialCoord.Zero, Random.Next(4), RandomBuff());

            if (buff.Radius < 2)
            {
                return(AreaBuff.ZeroBuff());
            }
            else
            {
                return(buff);
            }
        }
Ejemplo n.º 4
0
        public AreaBuff ToBuff()
        {
            var res = new AreaBuff(Coord, Radius, Effect.ToBuff());

            return(res.IsZero ? AreaBuff.ZeroBuff() : res);
        }
Ejemplo n.º 5
0
 public JsonAreaBuff(AreaBuff areaBuff)
 {
     Coord  = areaBuff.Coord;
     Radius = areaBuff.Radius;
     Effect = new JsonBuff(areaBuff.Effect);
 }