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 CreatePlayerEntity(int currentTick) { var e = CreateEntity(Guid.NewGuid().ToString(), "You"); // TODO: modify PlayerAIComponent to it doesn't, you know...need these. e.AddComponent(new PlayerAIComponent()); e.AddComponent(AIRotationComponent.Create(.60, true)); e.AddComponent(AIMoraleComponent.Create(100, 100)); var statusEffectTrackerComponent = StatusEffectTrackerComponent.Create(); e.AddComponent(ActionTimeComponent.Create(currentTick)); e.AddComponent(AttackerComponent.Create(e.EntityId, power: 8, meleeAttack: 55, rangedAttack: 10)); // TODO: make player not Ares e.AddComponent(CollisionComponent.Create(blocksMovement: true, blocksVision: false)); e.AddComponent(DefenderComponent.Create(baseDefense: 0, maxHp: 70, maxFooting: 95, meleeDefense: 30, rangedDefense: 60, isInvincible: false)); e.AddComponent(DisplayComponent.Create(_texPlayerPath, "It's you!", false, ENTITY_Z_INDEX)); e.AddComponent(FactionComponent.Create(FactionName.PLAYER)); e.AddComponent(OnDeathComponent.Create(new List <string>() { OnDeathEffectType.PLAYER_DEFEAT })); e.AddComponent(PlayerComponent.Create(isInFormation: true)); e.AddComponent(SpeedComponent.Create(baseSpeed: 100)); e.AddComponent(statusEffectTrackerComponent); e.AddComponent(XPTrackerComponent.Create(levelUpBase: 200, levelUpFactor: 150)); return(e); }
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 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 = ActionTimeComponent.Create(0, 0); JsonElement deserialized = JsonSerializer.Deserialize <JsonElement>(component.Save()); Assert.Equal(ActionTimeComponent.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 = ActionTimeComponent.Create(37, 57); string saved = component.Save(); var newComponent = ActionTimeComponent.Create(saved); Assert.Equal(component.NextTurnAtTick, newComponent.NextTurnAtTick); Assert.Equal(component.LastTurnAtTick, newComponent.LastTurnAtTick); }
public static Entity CreateProjectileEntity(Entity source, ProjectileType type, int power, EncounterPath path, int speed, int currentTick) { var displayData = projectileTypeToProjectileDisplay[type]; var e = CreateEntity(Guid.NewGuid().ToString(), displayData.Name); e.AddComponent(PathAIComponent.Create(path)); e.AddComponent(ActionTimeComponent.Create(currentTick)); // Should it go instantly or should it wait for its turn...? e.AddComponent(AttackerComponent.Create(source.EntityId, power)); e.AddComponent(CollisionComponent.Create(false, false, true, true)); e.AddComponent(DisplayComponent.Create(displayData.TexturePath, "A projectile.", false, PROJECTILE_Z_INDEX)); e.AddComponent(SpeedComponent.Create(speed)); 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 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 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); }
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); }
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 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 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 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); }
public static Entity CreatePlayerEntity(int currentTick) { var e = CreateEntity(Guid.NewGuid().ToString(), "player"); var statusEffectTrackerComponent = StatusEffectTrackerComponent.Create(); e.AddComponent(ActionTimeComponent.Create(currentTick)); e.AddComponent(CollisionComponent.Create(blocksMovement: true, blocksVision: false)); e.AddComponent(DefenderComponent.Create(baseDefense: 0, maxHp: 100, isInvincible: false)); e.AddComponent(DisplayComponent.Create(_texPlayerPath, "It's you!", false, ENTITY_Z_INDEX)); e.AddComponent(InventoryComponent.Create(inventorySize: 26)); e.AddComponent(OnDeathComponent.Create(new List <string>() { OnDeathEffectType.PLAYER_DEFEAT })); e.AddComponent(PlayerComponent.Create()); e.AddComponent(SpeedComponent.Create(baseSpeed: 100)); e.AddComponent(statusEffectTrackerComponent); e.AddComponent(XPTrackerComponent.Create(levelUpBase: 200, levelUpFactor: 150)); return(e); }