コード例 #1
0
ファイル: EntityBuilder.cs プロジェクト: MoyTW/7DRL2021
        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);
        }
コード例 #2
0
ファイル: EntityBuilder.cs プロジェクト: MoyTW/7DRL2021
        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);
        }
コード例 #3
0
ファイル: EntityBuilder.cs プロジェクト: MoyTW/7DRL2021
        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);
        }
コード例 #4
0
ファイル: EntityBuilder.cs プロジェクト: MoyTW/7DRL2021
        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);
        }
コード例 #5
0
ファイル: Entity.cs プロジェクト: MoyTW/SpaceDodgeRL
        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);
        }
コード例 #6
0
ファイル: EntityBuilder.cs プロジェクト: MoyTW/7DRL2021
        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);
        }
コード例 #7
0
ファイル: EntityBuilder.cs プロジェクト: MoyTW/7DRL2021
        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);
        }
コード例 #8
0
        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());
        }
コード例 #9
0
ファイル: EntityBuilder.cs プロジェクト: MoyTW/7DRL2021
        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);
        }
コード例 #10
0
        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);
        }
コード例 #11
0
        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);
        }
コード例 #12
0
        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);
        }
コード例 #13
0
        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);
        }
コード例 #14
0
        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);
        }
コード例 #15
0
        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);
        }
コード例 #16
0
        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);
        }
コード例 #17
0
        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);
        }
コード例 #18
0
        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);
        }
コード例 #19
0
        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);
        }
コード例 #20
0
        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);
        }
コード例 #21
0
        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);
        }
コード例 #22
0
        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);
        }
コード例 #23
0
        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);
        }
コード例 #24
0
ファイル: EntityBuilder.cs プロジェクト: MoyTW/7DRL2021
        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);
        }
コード例 #25
0
        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);
        }
コード例 #26
0
        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);
        }
コード例 #27
0
        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);
        }
コード例 #28
0
        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);
        }
コード例 #29
0
        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);
        }
コード例 #30
0
        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);
        }