// Create infusion spell public static int createInfusionSpell(int targetEntityId, int maxHpMod, int strengthMod, int armorClassMod, int timeToLive) { int entityId = EntityManager.createEntity(); TimeToLiveComponent timeToLiveComponent = new TimeToLiveComponent(entityId, timeToLive); AffectedEntitiesComponent affectedEntitiesComponent = new AffectedEntitiesComponent(entityId); AffectedBySpellEntitiesComponent affectedBySpellEntitiesComponent = EntityManager.getAffectedBySpellEntitiesComponent(targetEntityId); StatModifierComponent statModifierComponent = new StatModifierComponent(entityId); affectedEntitiesComponent.entities.Add(targetEntityId); affectedBySpellEntitiesComponent.spellEntities.Add(entityId); statModifierComponent.maxHpMod = maxHpMod; statModifierComponent.strengthMod = strengthMod; statModifierComponent.armorClassMod = armorClassMod; EntityManager.addComponent(entityId, timeToLiveComponent); EntityManager.addComponent(entityId, affectedEntitiesComponent); EntityManager.addComponent(entityId, statModifierComponent); return entityId; }
// Create rain of fire spell public static int createRainOfFireSpell(int ownerId, Vector2 position, float width, string damageDie, int tickDelay, int tickCount, List<Faction> factionsToAffect) { int entityId = EntityManager.createEntity(); DamageOverTimeComponent damageOverTimeComponent = new DamageOverTimeComponent(entityId, DamageType.Fire, damageDie, tickDelay); TimeToLiveComponent timeToLiveComponent = new TimeToLiveComponent(entityId, tickDelay * tickCount); AffectedEntitiesComponent affectedEntitiesComponent = new AffectedEntitiesComponent(entityId, factionsToAffect); Body sensor = BodyFactory.CreateRectangle(SystemManager.physicsSystem.world, width, 100f, 1f, position); AreaOfEffectComponent areaOfEffectComponent = new AreaOfEffectComponent(entityId, sensor); sensor.UserData = entityId; sensor.BodyType = BodyType.Static; sensor.CollidesWith = (ushort)CollisionCategory.None; EntityManager.addComponent(entityId, damageOverTimeComponent); EntityManager.addComponent(entityId, timeToLiveComponent); EntityManager.addComponent(entityId, affectedEntitiesComponent); EntityManager.addComponent(entityId, areaOfEffectComponent); EntityManager.addComponent(entityId, new SpellTypeComponent(entityId, SpellType.RainOfFire)); EntityManager.addComponent(entityId, new SpellOwnerComponent(entityId, ownerId)); EntityManager.addComponent(entityId, new IgnoreBridgeRaycastComponent(entityId)); EntityManager.addComponent(entityId, new IgnoreRopeRaycastComponent(entityId)); return entityId; }
// Generic dot spell -- TODO: Incorporate the type of damage public static int createDoTSpell(int targetEntityId, DamageType damageType, string damageDie, int tickDelay, int tickCount) { int entityId = EntityManager.createEntity(); FactionComponent factionComponent = EntityManager.getFactionComponent(targetEntityId); DamageOverTimeComponent damageOverTimeComponent = new DamageOverTimeComponent(entityId, damageType, damageDie, tickDelay); TimeToLiveComponent timeToLiveComponent = new TimeToLiveComponent(entityId, tickCount * tickDelay); AffectedEntitiesComponent affectedEntitiesComponent = new AffectedEntitiesComponent(entityId); AffectedBySpellEntitiesComponent affectedBySpellEntitiesComponent = EntityManager.getAffectedBySpellEntitiesComponent(targetEntityId); DispellableComponent dispellableComponent = new DispellableComponent(entityId, new List<Faction>(new [] { factionComponent.faction })); affectedEntitiesComponent.entities.Add(targetEntityId); affectedBySpellEntitiesComponent.spellEntities.Add(entityId); EntityManager.addComponent(entityId, damageOverTimeComponent); EntityManager.addComponent(entityId, timeToLiveComponent); EntityManager.addComponent(entityId, affectedEntitiesComponent); EntityManager.addComponent(entityId, dispellableComponent); return entityId; }