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 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 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 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 Create(string saveData) { var loaded = JsonSerializer.Deserialize <SaveData>(saveData); var entity = new Entity().Init(entityId: loaded.EntityId, entityName: loaded.EntityName); foreach (var component in loaded.Components) { entity.AddComponent(component); } // TODO: Formalize this into a "template" concept if (entity.EntityName == "boundary sign") { entity.AddComponent(CollisionComponent.Create(true, false)); entity.AddComponent(DefenderComponent.Create(0, 100, logDamage: false, isInvincible: true)); entity.AddComponent(DisplayComponent.Create("res://resources/sprites/edge_blocker.png", "Trying to run away, eh? Get back to your mission!", true, 2)); } else if (entity.EntityName == "satellite") { entity.AddComponent(CollisionComponent.Create(blocksMovement: true, blocksVision: true)); entity.AddComponent(DefenderComponent.Create(baseDefense: int.MaxValue, maxHp: int.MaxValue, isInvincible: true, logDamage: false)); entity.AddComponent(DisplayComponent.Create("res://resources/sprites/asteroid.png", "Space junk. Blocks movement and projectiles. Cannot be destroyed.", true, 2)); } return(entity); }
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 = DisplayComponent.Create("", "", true, 0); JsonElement deserialized = JsonSerializer.Deserialize <JsonElement>(component.Save()); Assert.Equal(DisplayComponent.ENTITY_GROUP, deserialized.GetProperty("EntityGroup").GetString()); }
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 static Entity CreateStairsEntity() { var e = CreateEntity(Guid.NewGuid().ToString(), "jump point"); e.AddComponent(DisplayComponent.Create(_texJumpPointPath, "The jump point to the next sector.", true, ITEM_Z_INDEX)); e.AddComponent(StairsComponent.Create()); return(e); }
public static Entity CreateSatelliteEntity() { var e = CreateEntity(Guid.NewGuid().ToString(), "satellite"); e.AddComponent(CollisionComponent.Create(blocksMovement: true, blocksVision: true)); e.AddComponent(DefenderComponent.Create(baseDefense: int.MaxValue, maxHp: int.MaxValue, isInvincible: true, logDamage: false)); e.AddComponent(DisplayComponent.Create(_texSatellitePath, "Space junk. Blocks movement and projectiles. Cannot be destroyed.", true, ENTITY_Z_INDEX)); return(e); }
public static Entity CreateEdgeBlockerEntity() { var e = CreateEntity(Guid.NewGuid().ToString(), "boundary sign"); e.AddComponent(CollisionComponent.Create(true, false)); e.AddComponent(DefenderComponent.Create(0, 100, logDamage: false, isInvincible: true)); e.AddComponent(DisplayComponent.Create(_texEdgeBlockerPath, "Trying to run away, eh? Get back to your mission!", true, ENTITY_Z_INDEX)); return(e); }
private static Entity CreateDuctTapeEntity() { var e = CreateEntity(Guid.NewGuid().ToString(), "duct tape"); e.AddComponent(DisplayComponent.Create(_texDuctTapePath, "Some duct tape. Heals 10 HP.", true, ITEM_Z_INDEX)); e.AddComponent(StorableComponent.Create()); e.AddComponent(UsableComponent.Create(useOnGet: false)); e.AddComponent(UseEffectHealComponent.Create(healpower: 10)); return(e); }
private static Entity CreateExtraBatteryEntity() { var e = CreateEntity(Guid.NewGuid().ToString(), "extra battery"); e.AddComponent(DisplayComponent.Create(_texBatteryPath, "An extra battery for your weapons. Gives 20 power for 450 ticks.", true, ITEM_Z_INDEX)); e.AddComponent(StorableComponent.Create()); e.AddComponent(UsableComponent.Create(useOnGet: false)); e.AddComponent(UseEffectBoostPowerComponent.Create(boostPower: 20, duration: 450)); return(e); }
private static Entity CreateRedPaintEntity() { var e = CreateEntity(Guid.NewGuid().ToString(), "red paint"); e.AddComponent(DisplayComponent.Create(_texRedPaintPath, "Reduces turn time by 75 for 300 ticks (minimum time is 1).", true, ITEM_Z_INDEX)); e.AddComponent(StorableComponent.Create()); e.AddComponent(UsableComponent.Create(useOnGet: false)); e.AddComponent(UseEffectBoostSpeedComponent.Create(boostPower: 75, duration: 300)); return(e); }
public static Entity CreateIntelEntity(int targetDungeonLevel) { var e = CreateEntity(Guid.NewGuid().ToString(), "intel for sector " + targetDungeonLevel); e.AddComponent(DisplayComponent.Create(_texIntelPath, "Intel! Gives you zone information for the next sector. You want this.", true, ITEM_Z_INDEX)); e.AddComponent(StorableComponent.Create()); e.AddComponent(UsableComponent.Create(useOnGet: true)); e.AddComponent(UseEffectAddIntelComponent.Create(targetDungeonLevel)); return(e); }
private static Entity CreateEMPEntity() { var e = CreateEntity(Guid.NewGuid().ToString(), "EMP"); e.AddComponent(DisplayComponent.Create(_texEMPPath, "An EMP burst. Disables enemies for 10 turns in radius 20.", true, ITEM_Z_INDEX)); e.AddComponent(StorableComponent.Create()); e.AddComponent(UsableComponent.Create(useOnGet: false)); // I seriously put 20 radius 10 turns? That's enough time to mop up an entire encounter! e.AddComponent(UseEffectEMPComponent.Create(radius: 20, disableTurns: 10)); return(e); }
public void SerializesAndDeserializesCorrectly() { var component = DisplayComponent.Create("path", "description", true, 4); string saved = component.Save(); var newComponent = DisplayComponent.Create(saved); Assert.Equal(component.TexturePath, newComponent.TexturePath); Assert.Equal(component.Description, newComponent.Description); Assert.Equal(component.VisibleInFoW, newComponent.VisibleInFoW); Assert.Equal(component.ZIndex, 4); }
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 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 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); }
public void EncounterZoneSerializesAndDeserializes() { EncounterZone zone = new EncounterZone("some id", new EncounterPosition(10, 20), width: 20, height: 48, "some name"); zone.ReadoutEncounterName = "some encounter name"; var e1 = Entity.Create("e1 id", "e1 name"); e1.AddComponent(DisplayComponent.Create("e1 path", "", false, 1)); zone.AddFeatureToReadout(e1); var e2 = Entity.Create("e2 id", "e2 name"); e2.AddComponent(DisplayComponent.Create("e2 path", "", false, 1)); zone.AddItemToReadout(e2); var e3 = Entity.Create("e3 id", "e3 name"); e3.AddComponent(DisplayComponent.Create("e3 path", "", false, 1)); zone.AddFeatureToReadout(e3); var saved = JsonSerializer.Serialize(zone); var loaded = JsonSerializer.Deserialize <EncounterZone>(saved); Assert.Equal(zone.ZoneId, loaded.ZoneId); Assert.Equal(zone.Position, loaded.Position); Assert.Equal(zone.Width, loaded.Width); Assert.Equal(zone.Height, loaded.Height); Assert.Equal(zone.ZoneName, loaded.ZoneName); Assert.Equal(zone.ReadoutEncounterName, loaded.ReadoutEncounterName); Assert.Equal(zone._ReadoutFeatures[0].EntityId, loaded._ReadoutFeatures[0].EntityId); Assert.Equal(zone._ReadoutFeatures[0].EntityName, loaded._ReadoutFeatures[0].EntityName); Assert.Equal(zone._ReadoutFeatures[0].TexturePath, loaded._ReadoutFeatures[0].TexturePath); Assert.Equal(zone._ReadoutFeatures[1].EntityId, loaded._ReadoutFeatures[1].EntityId); Assert.Equal(zone._ReadoutFeatures[1].EntityName, loaded._ReadoutFeatures[1].EntityName); Assert.Equal(zone._ReadoutFeatures[1].TexturePath, loaded._ReadoutFeatures[1].TexturePath); Assert.Equal(zone._ReadoutItems[0].EntityId, loaded._ReadoutItems[0].EntityId); Assert.Equal(zone._ReadoutItems[0].EntityName, loaded._ReadoutItems[0].EntityName); Assert.Equal(zone._ReadoutItems[0].TexturePath, loaded._ReadoutItems[0].TexturePath); Assert.Equal(zone.Center, loaded.Center); }
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); }