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); }
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(); } }
public static AreaBuff RandomAreaBuff() { var buff = new AreaBuff(AxialCoord.Zero, Random.Next(4), RandomBuff()); if (buff.Radius < 2) { return(AreaBuff.ZeroBuff()); } else { return(buff); } }
public AreaBuff ToBuff() { var res = new AreaBuff(Coord, Radius, Effect.ToBuff()); return(res.IsZero ? AreaBuff.ZeroBuff() : res); }
public JsonAreaBuff(AreaBuff areaBuff) { Coord = areaBuff.Coord; Radius = areaBuff.Radius; Effect = new JsonBuff(areaBuff.Effect); }