public static Entity CreatePunicHeavyInfantry(int currentTick, int formationNumber, Unit unit, FactionName faction) { var e = CreateEntity(Guid.NewGuid().ToString(), "Punic Heavy Infantry"); var statusEffectTrackerComponent = StatusEffectTrackerComponent.Create(); // TODO: one day I'll have different AIs e.AddComponent(new IberianLightInfantryAIComponent()); e.AddComponent(AIRotationComponent.Create(.4, false)); e.AddComponent(AIMoraleComponent.Create(100, 90)); e.AddComponent(ActionTimeComponent.Create(currentTick)); e.AddComponent(AttackerComponent.Create(e.EntityId, 11, meleeAttack: 55, rangedAttack: 10)); e.AddComponent(CollisionComponent.CreateDefaultActor()); e.AddComponent(DefenderComponent.Create(baseDefense: 4, maxHp: 80, maxFooting: 140, meleeDefense: 40, rangedDefense: 45)); e.AddComponent(DisplayComponent.Create(_texPunicHeavyInfantryPath, "Carthage's very best heavy infantry.", false, ENTITY_Z_INDEX)); e.AddComponent(FactionComponent.Create(faction)); e.AddComponent(OnDeathComponent.Create(new List <string>() { OnDeathEffectType.REMOVE_FROM_UNIT })); e.AddComponent(SpeedComponent.Create(baseSpeed: 100)); e.AddComponent(statusEffectTrackerComponent); e.AddComponent(UnitComponent.Create(unit.UnitId, formationNumber)); e.AddComponent(XPValueComponent.Create(xpValue: 30)); return(e); }
public static Entity CreateGallicVeteranInfantry(int currentTick, int formationNumber, Unit unit, FactionName faction) { var e = CreateEntity(Guid.NewGuid().ToString(), "Gallic Veteran Infantry"); var statusEffectTrackerComponent = StatusEffectTrackerComponent.Create(); // TODO: one day I'll have different AIs e.AddComponent(new IberianLightInfantryAIComponent()); e.AddComponent(AIRotationComponent.Create(.4, false)); e.AddComponent(AIMoraleComponent.Create(100, 90)); e.AddComponent(ActionTimeComponent.Create(currentTick)); e.AddComponent(AttackerComponent.Create(e.EntityId, 9, meleeAttack: 50, rangedAttack: 10)); e.AddComponent(CollisionComponent.CreateDefaultActor()); e.AddComponent(DefenderComponent.Create(baseDefense: 2, maxHp: 55, maxFooting: 110, meleeDefense: 30, rangedDefense: 45)); e.AddComponent(DisplayComponent.Create(_texGallicVeteranInfantryPath, "An armored Gallic veteran. Fights defensively, but hits hard.", false, ENTITY_Z_INDEX)); e.AddComponent(FactionComponent.Create(faction)); e.AddComponent(OnDeathComponent.Create(new List <string>() { OnDeathEffectType.REMOVE_FROM_UNIT })); e.AddComponent(SpeedComponent.Create(baseSpeed: 100)); e.AddComponent(statusEffectTrackerComponent); e.AddComponent(UnitComponent.Create(unit.UnitId, formationNumber)); e.AddComponent(XPValueComponent.Create(xpValue: 30)); return(e); }
public static Entity CreateHastatusEntity(int currentTick, int formationNumber, Unit unit, FactionName faction, int numPilas = 1, int startingMorale = 45) { var e = CreateEntity(Guid.NewGuid().ToString(), "Hastatus"); var statusEffectTrackerComponent = StatusEffectTrackerComponent.Create(); e.AddComponent(new HastatusAIComponent(numPilas)); e.AddComponent(AIRotationComponent.Create(.60, false)); e.AddComponent(AIMoraleComponent.Create(100, startingMorale)); e.AddComponent(ActionTimeComponent.Create(currentTick)); e.AddComponent(AttackerComponent.Create(e.EntityId, 5, meleeAttack: 50, rangedAttack: 30)); e.AddComponent(CollisionComponent.CreateDefaultActor()); e.AddComponent(DefenderComponent.Create(baseDefense: 2, maxHp: 45, maxFooting: 80, meleeDefense: 10, rangedDefense: 25)); e.AddComponent(DisplayComponent.Create(_texHastatusPath, "A young and eager soldier.", false, ENTITY_Z_INDEX)); e.AddComponent(FactionComponent.Create(faction)); e.AddComponent(OnDeathComponent.Create(new List <string>() { OnDeathEffectType.REMOVE_FROM_UNIT })); e.AddComponent(SpeedComponent.Create(baseSpeed: 100)); e.AddComponent(statusEffectTrackerComponent); e.AddComponent(UnitComponent.Create(unit.UnitId, formationNumber)); e.AddComponent(XPValueComponent.Create(xpValue: 30)); return(e); }
public static Entity CreatePrincepsEntity(int currentTick, int formationNumber, Unit unit, FactionName faction, int numPilas = 1, int startingMorale = 65) { var e = CreateEntity(Guid.NewGuid().ToString(), "Princeps"); var statusEffectTrackerComponent = StatusEffectTrackerComponent.Create(); // Princeps AI is essentially the same as Hastatus AI e.AddComponent(new HastatusAIComponent(numPilas)); e.AddComponent(AIRotationComponent.Create(.60, false)); e.AddComponent(AIMoraleComponent.Create(100, startingMorale)); e.AddComponent(ActionTimeComponent.Create(currentTick)); e.AddComponent(AttackerComponent.Create(e.EntityId, 6, meleeAttack: 55, rangedAttack: 30)); e.AddComponent(CollisionComponent.CreateDefaultActor()); e.AddComponent(DefenderComponent.Create(baseDefense: 2, maxHp: 65, maxFooting: 100, meleeDefense: 15, rangedDefense: 30)); e.AddComponent(DisplayComponent.Create(_texPrincepsPath, "An experienced swordsman with good equipment.", false, ENTITY_Z_INDEX)); e.AddComponent(FactionComponent.Create(faction)); e.AddComponent(OnDeathComponent.Create(new List <string>() { OnDeathEffectType.REMOVE_FROM_UNIT })); e.AddComponent(SpeedComponent.Create(baseSpeed: 100)); e.AddComponent(statusEffectTrackerComponent); e.AddComponent(UnitComponent.Create(unit.UnitId, formationNumber)); e.AddComponent(XPValueComponent.Create(xpValue: 30)); return(e); }
public void IncludesEntityGroup() { var component = XPValueComponent.Create(0); JsonElement deserialized = JsonSerializer.Deserialize <JsonElement>(component.Save()); Assert.Equal(XPValueComponent.ENTITY_GROUP, deserialized.GetProperty("EntityGroup").GetString()); }
public static Entity CreateIberianLightInfantry(int currentTick, int formationNumber, Unit unit, FactionName faction) { var e = CreateEntity(Guid.NewGuid().ToString(), "Iberian Light Infantry"); var statusEffectTrackerComponent = StatusEffectTrackerComponent.Create(); e.AddComponent(new IberianLightInfantryAIComponent()); e.AddComponent(AIRotationComponent.Create(.7, false)); e.AddComponent(AIMoraleComponent.Create(100, 90)); e.AddComponent(ActionTimeComponent.Create(currentTick)); e.AddComponent(AttackerComponent.Create(e.EntityId, 5, meleeAttack: 55, rangedAttack: 10)); e.AddComponent(CollisionComponent.CreateDefaultActor()); e.AddComponent(DefenderComponent.Create(baseDefense: 1, maxHp: 40, maxFooting: 75, meleeDefense: 15, rangedDefense: 5)); e.AddComponent(DisplayComponent.Create(_texIberianLightInfantryPath, "A fast, deatly, and barely armored Iberian swordsman.", false, ENTITY_Z_INDEX)); e.AddComponent(FactionComponent.Create(faction)); e.AddComponent(OnDeathComponent.Create(new List <string>() { OnDeathEffectType.REMOVE_FROM_UNIT })); e.AddComponent(SpeedComponent.Create(baseSpeed: 80)); e.AddComponent(statusEffectTrackerComponent); e.AddComponent(UnitComponent.Create(unit.UnitId, formationNumber)); e.AddComponent(XPValueComponent.Create(xpValue: 30)); return(e); }
public static Entity CreateTriariusEntity(int currentTick, int formationNumber, Unit unit, FactionName faction, int startingMorale = 85) { var e = CreateEntity(Guid.NewGuid().ToString(), "Triarius"); var statusEffectTrackerComponent = StatusEffectTrackerComponent.Create(); // TODO: different AI e.AddComponent(new HastatusAIComponent(0)); e.AddComponent(AIRotationComponent.Create(.60, false)); e.AddComponent(AIMoraleComponent.Create(100, startingMorale)); e.AddComponent(ActionTimeComponent.Create(currentTick)); e.AddComponent(AttackerComponent.Create(e.EntityId, 8, meleeAttack: 70, rangedAttack: 30)); e.AddComponent(CollisionComponent.CreateDefaultActor()); e.AddComponent(DefenderComponent.Create(baseDefense: 3, maxHp: 85, maxFooting: 120, meleeDefense: 30, rangedDefense: 45)); e.AddComponent(DisplayComponent.Create(_texTriariusPath, "An elite spearman of the legion.", false, ENTITY_Z_INDEX)); e.AddComponent(FactionComponent.Create(faction)); e.AddComponent(OnDeathComponent.Create(new List <string>() { OnDeathEffectType.REMOVE_FROM_UNIT })); e.AddComponent(SpeedComponent.Create(baseSpeed: 100)); e.AddComponent(statusEffectTrackerComponent); e.AddComponent(UnitComponent.Create(unit.UnitId, formationNumber)); e.AddComponent(XPValueComponent.Create(xpValue: 30)); return(e); }
public void SerializesAndDeserializesCorrectly() { var component = XPValueComponent.Create(794); string saved = component.Save(); var newComponent = XPValueComponent.Create(saved); Assert.Equal(component.XPValue, newComponent.XPValue); }
private static Entity CreateDestroyerEntity(string activationGroupId, int currentTick) { var e = CreateEntity(Guid.NewGuid().ToString(), "destroyer"); var statusEffectTrackerComponent = StatusEffectTrackerComponent.Create(); e.AddComponent(new DestroyerAIComponent(activationGroupId)); e.AddComponent(ActionTimeComponent.Create(currentTick)); e.AddComponent(CollisionComponent.CreateDefaultActor()); e.AddComponent(DefenderComponent.Create(baseDefense: 15, maxHp: 200)); e.AddComponent(DisplayComponent.Create(_texDestroyerPath, "A larger anti-fighter craft with a ferocious flak barrage.", false, ENTITY_Z_INDEX)); e.AddComponent(SpeedComponent.Create(baseSpeed: 300)); e.AddComponent(statusEffectTrackerComponent); e.AddComponent(XPValueComponent.Create(xpValue: 500)); return(e); }
private static Entity CreateGunshipEntity(string activationGroupId, int currentTick) { var e = CreateEntity(Guid.NewGuid().ToString(), "gunship"); var statusEffectTrackerComponent = StatusEffectTrackerComponent.Create(); e.AddComponent(new GunshipAIComponent(activationGroupId)); e.AddComponent(ActionTimeComponent.Create(currentTick)); e.AddComponent(CollisionComponent.CreateDefaultActor()); e.AddComponent(DefenderComponent.Create(baseDefense: 4, maxHp: 50)); e.AddComponent(DisplayComponent.Create(_texGunshipPath, "A sturdy gunship, armed with anti-fighter flak and a cannon.", false, ENTITY_Z_INDEX)); e.AddComponent(SpeedComponent.Create(baseSpeed: 100)); e.AddComponent(statusEffectTrackerComponent); e.AddComponent(XPValueComponent.Create(xpValue: 100)); return(e); }
private static Entity CreateCarrierEntity(string activationGroupId, int currentTick) { var e = CreateEntity(Guid.NewGuid().ToString(), "carrier"); var statusEffectTrackerComponent = StatusEffectTrackerComponent.Create(); e.AddComponent(new CarrierAIComponent(activationGroupId)); e.AddComponent(ActionTimeComponent.Create(currentTick)); e.AddComponent(CollisionComponent.CreateDefaultActor()); e.AddComponent(DefenderComponent.Create(baseDefense: 0, maxHp: 500)); e.AddComponent(DisplayComponent.Create(_texCarrierPath, "An extremely slow carrier, which launches fighters or scouts every action.", false, ENTITY_Z_INDEX)); e.AddComponent(SpeedComponent.Create(baseSpeed: 200)); e.AddComponent(statusEffectTrackerComponent); e.AddComponent(XPValueComponent.Create(xpValue: 2000)); return(e); }
private static Entity CreateCruiserEntity(string activationGroupId, int currentTick) { var e = CreateEntity(Guid.NewGuid().ToString(), "cruiser"); var statusEffectTrackerComponent = StatusEffectTrackerComponent.Create(); e.AddComponent(new CruiserAIComponent(activationGroupId)); e.AddComponent(ActionTimeComponent.Create(currentTick)); e.AddComponent(CollisionComponent.CreateDefaultActor()); e.AddComponent(DefenderComponent.Create(baseDefense: 10, maxHp: 300)); e.AddComponent(DisplayComponent.Create(_texCruiserPath, "A heavily armed and armored behemoth with a ferocious railgun.", false, ENTITY_Z_INDEX)); e.AddComponent(SpeedComponent.Create(baseSpeed: 400)); e.AddComponent(statusEffectTrackerComponent); e.AddComponent(XPValueComponent.Create(xpValue: 1000)); return(e); }
public static Entity CreateCommanderEntity(int currentTick, FactionName faction) { var e = CreateEntity(Guid.NewGuid().ToString(), "Hidden Commander Unit"); var statusEffectTrackerComponent = StatusEffectTrackerComponent.Create(); e.AddComponent(new CommanderAIComponent()); e.AddComponent(ActionTimeComponent.Create(currentTick)); e.AddComponent(CollisionComponent.CreateDefaultActor()); e.AddComponent(DefenderComponent.Create(9999, 9999, 9999, 9999, 9999, isInvincible: true)); e.AddComponent(DisplayComponent.Create(_texTriariusPath, "Hidden Commander Unit", false, ENTITY_Z_INDEX, visible: false)); e.AddComponent(FactionComponent.Create(faction)); e.AddComponent(SpeedComponent.Create(baseSpeed: 100)); e.AddComponent(XPValueComponent.Create(xpValue: 9999)); return(e); }
private static Entity CreateScoutEntity(string activationGroupId, int currentTick) { var e = CreateEntity(Guid.NewGuid().ToString(), "scout"); var statusEffectTrackerComponent = StatusEffectTrackerComponent.Create(); e.AddComponent(new ScoutAIComponent(activationGroupId)); e.AddComponent(ActionTimeComponent.Create(currentTick)); e.AddComponent(CollisionComponent.CreateDefaultActor()); e.AddComponent(DefenderComponent.Create(baseDefense: 0, maxHp: 10)); e.AddComponent(DisplayComponent.Create(_texScoutPath, "A small scout craft, armed with a shotgun.", false, ENTITY_Z_INDEX)); e.AddComponent(SpeedComponent.Create(baseSpeed: 75)); e.AddComponent(statusEffectTrackerComponent); e.AddComponent(XPValueComponent.Create(xpValue: 30)); return(e); }
private static Entity CreateFighterEntity(string activationGroupId, int currentTick) { var e = CreateEntity(Guid.NewGuid().ToString(), "fighter"); var statusEffectTrackerComponent = StatusEffectTrackerComponent.Create(); e.AddComponent(new FighterAIComponent(activationGroupId)); e.AddComponent(ActionTimeComponent.Create(currentTick)); e.AddComponent(CollisionComponent.CreateDefaultActor()); e.AddComponent(DefenderComponent.Create(baseDefense: 0, maxHp: 30)); e.AddComponent(DisplayComponent.Create(_texFighterPath, "An interceptor craft armed with a rapid-fire cannon.", false, ENTITY_Z_INDEX)); e.AddComponent(SpeedComponent.Create(baseSpeed: 125)); e.AddComponent(statusEffectTrackerComponent); e.AddComponent(XPValueComponent.Create(xpValue: 50)); return(e); }
private static Entity CreateFrigateEntity(string activationGroupId, int currentTick) { var e = CreateEntity(Guid.NewGuid().ToString(), "frigate"); var statusEffectTrackerComponent = StatusEffectTrackerComponent.Create(); e.AddComponent(new FrigateAIComponent(activationGroupId)); e.AddComponent(ActionTimeComponent.Create(currentTick)); e.AddComponent(CollisionComponent.CreateDefaultActor()); e.AddComponent(DefenderComponent.Create(baseDefense: 10, maxHp: 150)); e.AddComponent(DisplayComponent.Create(_texFrigatePath, "An escort ship sporting a reverser gun, as well as secondary batteries.", false, ENTITY_Z_INDEX)); e.AddComponent(SpeedComponent.Create(baseSpeed: 250)); e.AddComponent(statusEffectTrackerComponent); e.AddComponent(XPValueComponent.Create(xpValue: 200)); return(e); }
private static Entity CreateDiplomatEntity(string activationGroupId, int currentTick) { var e = CreateEntity(Guid.NewGuid().ToString(), "diplomat"); var statusEffectTrackerComponent = StatusEffectTrackerComponent.Create(); e.AddComponent(new DiplomatAIComponent(activationGroupId)); e.AddComponent(ActionTimeComponent.Create(currentTick)); e.AddComponent(CollisionComponent.CreateDefaultActor()); e.AddComponent(DefenderComponent.Create(baseDefense: 0, maxHp: 100)); e.AddComponent(DisplayComponent.Create(_texDiplomatPath, "Your target, the diplomat!", false, ENTITY_Z_INDEX)); e.AddComponent(OnDeathComponent.Create(new List <string>() { OnDeathEffectType.PLAYER_VICTORY })); e.AddComponent(SpeedComponent.Create(baseSpeed: 100)); e.AddComponent(statusEffectTrackerComponent); e.AddComponent(XPValueComponent.Create(xpValue: 0)); return(e); }