internal static Entity NewInstanceFromDesignEntity(Entity design, Entity faction) { List <BaseDataBlob> blobs = new List <BaseDataBlob>(); ComponentInstanceInfoDB info = new ComponentInstanceInfoDB(design); OwnedDB owned = new OwnedDB(faction); blobs.Add(info); blobs.Add(owned); blobs.Add(new DesignInfoDB(design)); // Added because each component instance needs its own copy of this datablob //Components have a mass and volume. MassVolumeDB mvDB = new MassVolumeDB(); blobs.Add(mvDB); if (design.HasDataBlob <BeamFireControlAtbDB>()) { blobs.Add(new FireControlInstanceAbilityDB()); } if (design.HasDataBlob <BeamWeaponAtbDB>() || design.HasDataBlob <SimpleBeamWeaponAtbDB>()) { blobs.Add(new WeaponStateDB()); } Entity newInstance = new Entity(design.Manager, blobs); return(newInstance); }
/// <summary> /// Creates a new colony with zero population. /// </summary> /// <param name="systemEntityManager"></param> /// <param name="factionEntity"></param> /// <returns></returns> public static Entity CreateColony(Entity factionEntity, Entity speciesEntity, Entity planetEntity) { List <BaseDataBlob> blobs = new List <BaseDataBlob>(); string planetName = planetEntity.GetDataBlob <NameDB>().GetName(factionEntity); NameDB name = new NameDB(planetName + " Colony"); // TODO: Review default name. blobs.Add(name); ColonyInfoDB colonyInfoDB = new ColonyInfoDB(speciesEntity, 0, planetEntity); blobs.Add(colonyInfoDB); ColonyBonusesDB colonyBonuses = new ColonyBonusesDB(); blobs.Add(colonyBonuses); MiningDB colonyMinesDB = new MiningDB(); blobs.Add(colonyMinesDB); RefiningDB colonyRefining = new RefiningDB(); blobs.Add(colonyRefining); ConstructionDB colonyConstruction = new ConstructionDB(); blobs.Add(colonyConstruction); OrderableDB orderableDB = new OrderableDB(); blobs.Add(orderableDB); MassVolumeDB mvDB = new MassVolumeDB(); blobs.Add(mvDB); //installations get added to the componentInstancesDB ComponentInstancesDB installations = new ComponentInstancesDB(); blobs.Add(installations); Entity colonyEntity = new Entity(planetEntity.Manager, blobs); factionEntity.GetDataBlob <FactionInfoDB>().Colonies.Add(colonyEntity); var OwnedDB = new OwnedDB(factionEntity, colonyEntity); return(colonyEntity); }
OwnedDB(OwnedDB db) { _factionOwner = db._factionOwner; //_obectOwner = db.ObjectOwner; }
public static Entity CreateShip(Entity classEntity, EntityManager systemEntityManager, Entity ownerFaction, Vector4 pos, StarSystem starsys, string shipName = null) { // @todo replace ownerFaction with formationDB later. Now ownerFaction used just to add name // @todo: make sure each component design and component instance is unique, not duplicated ProtoEntity protoShip = classEntity.Clone(); ShipInfoDB shipInfoDB = protoShip.GetDataBlob <ShipInfoDB>(); shipInfoDB.ShipClassDefinition = classEntity.Guid; if (shipName == null) { shipName = "Ship Name"; } NameDB nameDB = new NameDB(shipName); protoShip.SetDataBlob(nameDB); var OwnedDB = new OwnedDB(ownerFaction); protoShip.SetDataBlob(OwnedDB); PositionDB position = new PositionDB(pos, starsys.Guid); protoShip.SetDataBlob(position); protoShip.SetDataBlob(new DesignInfoDB(classEntity)); Entity shipEntity = new Entity(systemEntityManager, protoShip); //replace the ships references to the design's specific instances with shiny new specific instances ComponentInstancesDB componentInstances = shipEntity.GetDataBlob <ComponentInstancesDB>(); var newSpecificInstances = new PrIwObsDict <Entity, PrIwObsList <Entity> >(); foreach (var kvp in componentInstances.SpecificInstances) { newSpecificInstances.Add(kvp.Key, new PrIwObsList <Entity>()); for (int i = 0; i < kvp.Value.Count; i++) { newSpecificInstances[kvp.Key].Add(ComponentInstanceFactory.NewInstanceFromDesignEntity(kvp.Key, ownerFaction)); } } componentInstances.SpecificInstances = newSpecificInstances; foreach (var componentType in shipEntity.GetDataBlob <ComponentInstancesDB>().SpecificInstances) { int numComponents = componentType.Value.Count; componentType.Value.Clear(); for (int i = 0; i < numComponents; i++) { EntityManipulation.AddComponentToEntity(shipEntity, componentType.Key); } foreach (var componentInstance in componentType.Value) { // Set the parent/owning Entity to the shipEntity AttributeToAbilityMap.AddAbility(shipEntity, componentType.Key, componentInstance); } } ReCalcProcessor.ReCalcAbilities(shipEntity); return(shipEntity); }