/// <summary>
        /// Rebuild pickupables database.
        /// </summary>
        public void Rebuild()
        {
            var pickupables = CollectAllPickupables(false);

            prefabs.Clear();

            foreach (var pickupable in pickupables)
            {
                int prefabId          = prefabs.Count;
                var metaDataComponent = pickupable.AddComponent <Components.PickupableMetaDataComponent>();
                metaDataComponent.prefabId = prefabId;

                var prefab = Object.Instantiate(pickupable);
                prefab.SetActive(false);
                prefab.transform.SetParent(MPController.Instance.transform);

                Logger.Debug($"Registering {prefab.name} ({prefab.GetInstanceID()}) into pickupable database. (Prefab ID: {prefabId}, Source pickupable id: {pickupable.GetInstanceID()})");

                PrefabDesc desc = new PrefabDesc();
                desc.gameObject = prefab;
                desc.id         = prefabId;
                SetupPrefabDescriptorType(desc);

                prefabs.Add(desc);
            }
        }
Example #2
0
    public static void assemblerAdd(Player player, int assemblerId)
    {
        var pf           = player.factory;
        var fs           = pf.factorySystem;
        var target       = fs.assemblerPool[assemblerId];
        var entity       = pf.entityPool[target.entityId];
        var entityitemId = pf.entityPool[target.entityId].protoId;
        var pcid         = target.pcId;

        BugInfo += "\nkeyCount;" + keyCount;
        BugInfo += "\nentityitemId;" + entityitemId;
        BugInfo += "\n";

        if (CheckCanUp(player, entityitemId))
        {
            canUp    = true;
            BugInfo += "\nspeed:" + fs.assemblerPool[assemblerId].speed;
            string speedText = (fs.assemblerPool[assemblerId].speed / 10000.0).ToString();
            showInfo = $"\n\n< {ST.速度}" + speedText + " >";
            checkKey();
            if (key())
            {
                UIRealtimeTip.Popup(ST.建造叠加 + "+", false);
                var item = LDB.items.Select(player.inhandItemId);
                BugInfo += "\n" + player.inhandItemId;
                PrefabDesc desc = item.prefabDesc;
                fs.assemblerPool[assemblerId].speed += desc.assemblerSpeed;
                pf.powerSystem.consumerPool[pcid].workEnergyPerTick += (long)(desc.workEnergyPerTick * powerUp);
                useItem(player, player.inhandItemId);
            }
        }
    }
Example #3
0
        //Post register fixups
        private static void onPostAdd()
        {
            foreach (var kv in models)
            {
                kv.Value.Preload();
                PrefabDesc pdesc = kv.Value.prefabDesc;

                Material assMat = LDB.models.modelArray[65].prefabDesc.materials[0];
                pdesc.lodMaterials[0][0] = assMat;

                VFPreload.SaveGameObjectResources(pdesc.prefab);
                VFPreload.SaveGameObjectResources(pdesc.colliderPrefab);
                VFPreload.SaveObject(pdesc.mesh);
                VFPreload.SaveMeshes(pdesc.meshes);
                VFPreload.SaveObject(pdesc.meshCollider);
                VFPreload.SaveMaterials(pdesc.materials);
                VFPreload.SaveMeshes(pdesc.lodMeshes);
                VFPreload.SaveMaterials(pdesc.lodMaterials);
                LDB.models.modelArray[kv.Value.ID] = kv.Value;
            }
            foreach (var kv in items)
            {
                kv.Value.Preload(kv.Value.index);
            }
            foreach (var kv in recipes)
            {
                kv.Value.Preload(kv.Value.index);
            }
        }
Example #4
0
        private static void UninstallMod(PlanetTransport instance, PrefabDesc prefabDesc, int warperId)
        {
            int warperSlotIndex = prefabDesc.stationMaxItemKinds;

            for (int j = 1; j < instance.stationCursor; j++)
            {
                if (instance.stationPool[j] != null && instance.stationPool[j].id == j)
                {
                    StationComponent stationComponent = instance.stationPool[j];
                    if (stationComponent.isCollector == true || stationComponent.isStellar == false)
                    {
                        continue;
                    }
                    if (stationComponent.storage.Length > prefabDesc.stationMaxItemKinds &&
                        stationComponent.storage.Last().itemId == warperId)
                    {
                        instance.SetStationStorage(
                            stationComponent.id,
                            warperSlotIndex,
                            0, 0,
                            ELogisticStorage.None,
                            ELogisticStorage.None,
                            GameMain.mainPlayer);
                        List <StationStore> storeCopy = new List <StationStore>(stationComponent.storage);
                        storeCopy.RemoveAt(warperSlotIndex);
                        stationComponent.storage = storeCopy.ToArray();
                    }
                    instance.RefreshTraffic();
                    instance.gameData.galacticTransport.RefreshTraffic(stationComponent.gid);
                    stationComponent.UpdateNeeds();
                }
            }
        }
Example #5
0
        /// <summary>
        /// Overridden save function
        /// </summary>
        /// <param name="filename"></param>
        /// <returns></returns>
        public override bool Save(string filename)
        {
            PrefabDesc      prefab = new PrefabDesc(filename);
            ShapeCollection all    = new ShapeCollection();

            // the following shapes go into the prefab: lightgrid boxes, lights
            foreach (ShapeBase shape in this.FilteredSupplier)
            {
                all.Add(shape);
            }

            foreach (ShapeBase shape in this.FilteredLights)
            {
                if (!all.Contains(shape))
                {
                    all.Add(shape);
                }
            }

            if (!prefab.CreateFromInstances(all, Vector3F.Zero, false, false))
            {
                return(false);
            }
            return(prefab.SaveToFile(null));
        }
Example #6
0
        //Post register fixups
        private static void onPostAdd()
        {
            foreach (var kv in models)
            {
                kv.Value.Preload();
                PrefabDesc pdesc = kv.Value.prefabDesc;

                Material[] mats = pdesc.materials;
                for (int i = 0; i < pdesc.lodMaterials[0].Length; i++)
                {
                    pdesc.lodMaterials[0][i] = mats[i];
                }

                LDB.models.modelArray[kv.Value.ID] = kv.Value;
            }

            foreach (var kv in items)
            {
                kv.Value.Preload(kv.Value.index);
            }

            foreach (var kv in recipes)
            {
                kv.Value.Preload(kv.Value.index);
            }

            onLoadingFinished?.Invoke();

            LogSource.LogInfo("Post loading is complete!");
        }
Example #7
0
        public override void ApplyProperties(PrefabDesc desc)
        {
            base.ApplyProperties(desc);

            desc.isTank            = true;
            desc.fluidStorageCount = fluidCapacity;
        }
Example #8
0
    //[HarmonyPostfix]
    //[HarmonyPatch(typeof(PlayerAction_Build), "GameTick")]
    //public static void modifyModle(PlayerAction_Build __instance)
    //{
    //    if (__instance.previewGizmoDesc != null&&canUp)
    //    {
    //        __instance.previewGizmoDesc.condition = EBuildCondition.Ok;
    //    }
    //}


    public static void PowerGenAdd(Player player, int genId)
    {
        var pf           = player.factory;
        var fs           = pf.powerSystem;
        var target       = fs.genPool[genId];
        var entity       = pf.entityPool[target.entityId];
        var entityitemId = pf.entityPool[target.entityId].protoId;

        if (CheckCanUp(player, entityitemId))
        {
            canUp    = true;
            BugInfo += "\ngenEnergyPerTick:" + fs.genPool[genId].genEnergyPerTick;
            checkKey();
            if (key())
            {
                UIRealtimeTip.Popup(ST.建造叠加 + "+", false);
                var item = LDB.items.Select(player.inhandItemId);
                BugInfo += "\n" + player.inhandItemId;
                PrefabDesc desc = item.prefabDesc;
                fs.genPool[genId].genEnergyPerTick += (long)(desc.genEnergyPerTick * 0.9);
                fs.genPool[genId].useFuelPerTick   += desc.useFuelPerTick;
                useItem(player, player.inhandItemId);
            }
        }
    }
Example #9
0
        public override void ApplyProperties(PrefabDesc desc)
        {
            base.ApplyProperties(desc);

            desc.storageCol = columnCount;
            desc.storageRow = rowCount;
            desc.isStorage  = desc.storageCol * desc.storageRow > 0;
        }
Example #10
0
 public override void OnPostPrefabCreation(ShapeCollection allRootShapes, PrefabDesc prefab)
 {
     base.OnPostPrefabCreation(allRootShapes, prefab);
     if (_uiProperties != null)
     {
         _uiProperties.OnPostPrefabCreation(allRootShapes, prefab);
     }
 }
Example #11
0
        public override void ApplyProperties(PrefabDesc desc)
        {
            base.ApplyProperties(desc);

            desc.assemblerSpeed      = Mathf.RoundToInt(processingSpeed * 10000f);
            desc.assemblerRecipeType = ERecipeType.Chemical;
            desc.isAssembler         = true;
        }
Example #12
0
        public override void ApplyProperties(PrefabDesc desc)
        {
            base.ApplyProperties(desc);

            desc.assemblerSpeed      = Mathf.RoundToInt(smeltSpeed * 10000f);
            desc.assemblerRecipeType = ERecipeType.Smelt;
            desc.isAssembler         = true;
        }
Example #13
0
        public static float getMinerRadius(PrefabDesc desc)
        {
            if (desc.HasProperty(CustomMinerDesc.MINER_RANGE_NAME))
            {
                return(desc.GetProperty <float>(CustomMinerDesc.MINER_RANGE_NAME));
            }

            return(MinerComponent.kFanRadius);
        }
Example #14
0
        private void treeView_Creators_NodeMouseDoubleClick(object sender, TreeNodeMouseClickEventArgs e)
        {
            PrefabDesc prefab = SelectedCreatorObject as PrefabDesc;

            if (prefab != null)
            {
                PrefabManager.EditPrefabDescriptor(prefab);
            }
        }
Example #15
0
 public static void PlanetTransport_Import_Postfix(BinaryReader r, PlanetTransport __instance)
 {
     if (Config.Utility.UninstallMod.Value == true)
     {
         int        warperId   = ItemProto.kWarperId;
         PrefabDesc prefabDesc = LDB.items.Select(_ilsId).prefabDesc;
         UninstallMod(__instance, prefabDesc, warperId);
     }
 }
Example #16
0
        public override void ApplyProperties(PrefabDesc desc)
        {
            base.ApplyProperties(desc);

            desc.SetProperty(MINER_RANGE_NAME, miningRange);
            float period = desc.minerPeriod / miningSpeed;

            desc.minerPeriod = Mathf.RoundToInt(period);
        }
Example #17
0
        public void CheckDismantle()
        {
            foreach (int objId in selectObjIds)
            {
                PrefabDesc desc = GetPrefabDesc(objId);

                if (!BuildTool_Dismantle.showDemolishContainerQuery)
                {
                    continue;
                }
                if (objId <= 0)
                {
                    continue;
                }

                EntityData data = factory.entityPool[objId];

                if (desc.isStorage)
                {
                    int storageId = data.storageId;
                    if (!factory.factoryStorage.TryTakeBackItems_Storage(player.package, storageId))
                    {
                        dismantleQueryBox = UIMessageBox.Show("拆除储物仓标题".Translate(), "拆除储物仓文字".Translate(), "否".Translate(),
                                                              "是".Translate(), 0, DismantleQueryCancel, DismantleQueryConfirm);
                        waitingForPlayerInput = true;
                        return;
                    }
                }

                if (desc.isTank)
                {
                    int tankId = data.tankId;
                    if (!factory.factoryStorage.TryTakeBackItems_Tank(player.package, tankId))
                    {
                        dismantleQueryBox = UIMessageBox.Show("拆除储液罐标题".Translate(), "拆除储液罐文字".Translate(), "否".Translate(),
                                                              "是".Translate(), 0, DismantleQueryCancel, DismantleQueryConfirm);
                        waitingForPlayerInput = true;
                        return;
                    }
                }

                if (desc.isStation)
                {
                    int stationId = data.stationId;
                    if (factory.transport.stationPool[stationId] != null)
                    {
                        dismantleQueryBox = UIMessageBox.Show("拆除物流站标题".Translate(), "拆除物流站文字".Translate(), "否".Translate(),
                                                              "是".Translate(), 0, DismantleQueryCancel, DismantleQueryConfirm);
                        waitingForPlayerInput = true;
                        return;
                    }
                }
            }

            DismantleAction();
        }
        /// <summary>
        /// Rebuild pickupables database.
        /// </summary>
        public void CollectGameObject(GameObject gameObject)
        {
            if (!IsPickupable(gameObject))
            {
                return;
            }

            int prefabId          = prefabs.Count;
            var metaDataComponent =
                gameObject.AddComponent <Components.PickupableMetaDataComponent>();

            metaDataComponent.prefabId = prefabId;

            PrefabDesc desc = new PrefabDesc();

            desc.gameObject = gameObject;
            desc.id         = prefabId;

            // Activate game object if it's not active to make sure we can access all play
            // maker fsm.

            bool wasActive = desc.gameObject.activeSelf;

            if (!wasActive)
            {
                desc.gameObject.SetActive(true);
            }

            // Add ObjectSyncComponent.
            if (desc.gameObject.GetComponent <Components.ObjectSyncComponent>() == null)
            {
                desc.gameObject.AddComponent <Components.ObjectSyncComponent>().Setup(
                    ObjectSyncManager.ObjectTypes.Pickupable, -1);
            }
            else
            {
                GameObject.Destroy(
                    desc.gameObject.GetComponent <Components.ObjectSyncComponent>());
                desc.gameObject.AddComponent <Components.ObjectSyncComponent>().Setup(
                    ObjectSyncManager.ObjectTypes.Pickupable, -1);
            }

            // Deactivate game object back if needed.

            if (!wasActive)
            {
                desc.gameObject.SetActive(false);
            }

            prefabs.Add(desc);

            Logger.Debug(
                $"Registered new prefab {gameObject.name} ({gameObject.GetInstanceID()}) into pickupable database. (Prefab ID: {prefabId})");
        }
Example #19
0
        public static float getMinerRadius(PrefabDesc desc)
        {
            float radius = MinerComponent.kFanRadius;

            if (desc.beltSpeed == 1)
            {
                radius = configMinerMk2Range.Value;
            }

            return(radius);
        }
Example #20
0
        public static void AddDronesFromInventory(this StationComponent component, PrefabDesc prefabDesc)
        {
            var percentage = component.isStellar
                ? Config.ILS.DroneInsertPercentage.Value
                : Config.PLS.DroneInsertPercentage.Value;

            var maxToTake    = Convert.ToInt32(Math.Floor(prefabDesc.stationMaxDroneCount * percentage));
            var numAvailable = GameMain.mainPlayer.package.TakeItem(5001, maxToTake);

            component.idleDroneCount = numAvailable;
        }
Example #21
0
        public static void AddVesselsFromInventory(this StationComponent component, PrefabDesc prefabDesc)
        {
            if (!component.isStellar)
            {
                return;
            }
            var percentage   = Config.ILS.VesselInsertPercentage.Value;
            var maxToTake    = Convert.ToInt32(Math.Floor(prefabDesc.stationMaxShipCount * percentage));
            var numAvailable = GameMain.mainPlayer.package.TakeItem(5002, maxToTake);

            component.idleShipCount = numAvailable;
        }
Example #22
0
        //Post register fixups
        private static void onPostAdd()
        {
            foreach (var kv in Registry.models)
            {
                PrefabDesc pdesc = kv.Value.prefabDesc;

                if (pdesc.minerType == EMinerType.Vein)
                {
                    pdesc.beltSpeed = 1;
                }
            }
        }
Example #23
0
        /// <summary>
        /// Setup prefab type of the given prefab descriptor.
        /// </summary>
        /// <param name="desc">The descriptor to setup type for.</param>
        private void SetupPrefabDescriptorType(PrefabDesc desc)
        {
            PlayMakerFSM fsm = null;

            fsm = Utils.GetPlaymakerScriptByName(desc.gameObject, "Use");
            if (fsm != null)
            {
                if (fsm.FsmVariables.FindFsmInt("DestroyedBottles") != null && fsm.Fsm.GetState("Remove bottle") != null)
                {
                    // Found BeerCase
                    desc.type = PrefabType.BeerCase;
                }
            }
        }
        public GamePickupableDatabase()
        {
            instance = this;

            GameCallbacks.onPlayMakerObjectCreate += (GameObject instance, GameObject prefab) => {
                PrefabDesc descriptor = GetPrefabDesc(prefab);
                if (descriptor != null)
                {
                    var metaDataComponent = instance.AddComponent <Components.PickupableMetaDataComponent>();
                    metaDataComponent.prefabId = descriptor.id;

                    Logger.Log($"Pickupable has been spawned. ({instance.name})");
                }
            };
        }
Example #25
0
        public static void AddDronesFromInventory(this StationComponent component, PrefabDesc prefabDesc)
        {
            var percentage = component.isStellar
                ? AspConfig.ILS.DroneInsertPercentage.Value
                : AspConfig.PLS.DroneInsertPercentage.Value;

            var maxToTake    = Convert.ToInt32(Math.Floor(prefabDesc.stationMaxDroneCount * percentage));
            var numAvailable = GameMain.mainPlayer.package.TakeItem(ItemIds.Drone, maxToTake, out _);

            component.idleDroneCount = numAvailable;
            if (AspConfig.General.NotifyWhenDroneOrVesselMissing.Value && numAvailable < maxToTake)
            {
                UIRealtimeTip.PopupAhead("Not enough Logistics Drones in inventory!".Translate(),
                                         AspConfig.General.PlaySoundWhenDroneOrVesselMissing.Value);
            }
        }
        /// <summary>
        /// Overridden save function
        /// </summary>
        /// <param name="filename"></param>
        /// <returns></returns>
        public override bool Save(string filename)
        {
            PrefabDesc prefab = new PrefabDesc(filename);
              ShapeCollection all = new ShapeCollection();

              // the following shapes go into the prefab: lightgrid boxes, lights
              foreach (ShapeBase shape in this.FilteredSupplier)
            all.Add(shape);

              foreach (ShapeBase shape in this.FilteredLights)
            if (!all.Contains(shape))
              all.Add(shape);

              if (!prefab.CreateFromInstances(all, Vector3F.Zero, false, false))
            return false;
              return prefab.SaveToFile(null);
        }
Example #27
0
        //Post register fixups
        private static void onPostAdd()
        {
            foreach (var kv in models)
            {
                kv.Value.Preload();
                PrefabDesc pdesc = kv.Value.prefabDesc;

                Material[] mats = pdesc.materials;
                for (int i = 0; i < pdesc.lodCount; i++)
                {
                    for (int j = 0; j < pdesc.lodMaterials[i].Length; j++)
                    {
                        pdesc.lodMaterials[i][j] = mats[j];
                    }
                }

                LDB.models.modelArray[kv.Value.ID] = kv.Value;
            }

            foreach (var kv in items)
            {
                kv.Value.Preload(kv.Value.index);
            }

            foreach (var kv in recipes)
            {
                kv.Value.Preload(kv.Value.index);
            }

            foreach (var kv in techs)
            {
                kv.Value.Preload();
                kv.Value.Preload2();
            }

            foreach (var kv in techUpdateList)
            {
                TechProto OldTech = LDB.techs.Select(kv.Key);
                OldTech.postTechArray = OldTech.postTechArray.AddToArray(kv.Value);
            }

            onLoadingFinished?.Invoke();

            LogSource.LogInfo("Post loading is complete!");
        }
Example #28
0
        private void ExportModelLapJot()
        {
            LapJointAsset lapJointAsset = new LapJointAsset();

            lapJointAsset.lapJoints = new List <LapJointNode>();
            foreach (ItemProto itemProto in LDB.items.dataArray)
            {
                PrefabDesc prefabDesc = FactoryBP.GetPrefabDesc(itemProto);
                if (prefabDesc != null)
                {
                    //Debug.LogFormat("{0},{1}", itemProto.ID, prefabDesc.lapJoint);
                    LapJointNode node = new LapJointNode()
                    {
                        protoId  = itemProto.ID,
                        lapJoint = prefabDesc.lapJoint
                    };
                    lapJointAsset.lapJoints.Add(node);
                }
            }

            //System.Text.StringBuilder sb = new System.Text.StringBuilder();
            //sb.Append("{\n");
            //sb.Append("\"lapJoints\":[\n");
            //foreach (var node in lapJointAsset.lapJoints)
            //{
            //	sb.Append("{");
            //	sb.Append("\"protoId\":").Append(node.protoId).Append(",\n");
            //	sb.Append("\"lapJoint\":")
            //		   .Append("{");
            //				sb.Append("\"x\":").Append(node.lapJoint.x).Append(",");
            //				sb.Append("\"y\":").Append(node.lapJoint.y).Append(",");
            //				sb.Append("\"z\":").Append(node.lapJoint.z);
            //			sb.Append("}").Append("\n");
            //	sb.Append("},\n");
            //}
            //sb.Append("]\n");
            //sb.Append("}");
            //string jsonStr = sb.toString();

            string jsonStr = JsonUtility.ToJson(lapJointAsset);
            string outFile = System.IO.Path.Combine(Environment.CurrentDirectory, "BepInEx/config", "latJoint.json");

            System.IO.File.WriteAllText(outFile, jsonStr);
        }
Example #29
0
        //Post register fixups
        private static void onPostAdd()
        {
            foreach (var kv in models)
            {
                kv.Value.Preload();
                PrefabDesc pdesc = kv.Value.prefabDesc;

                Material[] mats = pdesc.materials;
                for (int i = 0; i < pdesc.lodMaterials[0].Length; i++)
                {
                    pdesc.lodMaterials[0][i] = mats[i];
                }

                LDB.models.modelArray[kv.Value.ID] = kv.Value;
            }

            foreach (var kv in items)
            {
                kv.Value.Preload(kv.Value.index);
            }

            foreach (var kv in recipes)
            {
                kv.Value.Preload(kv.Value.index);
            }

            foreach (var kv in techs)
            {
                kv.Value.Preload();
                kv.Value.Preload2();
            }

            foreach (var kv in techUpdateList)
            {
                var OldTech = kv.Key;
                var NewTech = kv.Value;

                OldTech.postTechArray = OldTech.postTechArray.AddToArray(NewTech);
            }

            onLoadingFinished?.Invoke();

            LogSource.LogInfo("Post loading is complete!");
        }
Example #30
0
        public static void PasteBuilding(int index, BuildingCopy building, Vector2 targetSpr, float yaw)
        {
            Vector2 newRelative = building.cursorRelativePos.Rotate(yaw * Mathf.Deg2Rad, building.originalSegmentCount);
            Vector2 sprPos      = newRelative + targetSpr;

            float rawLatitudeIndex = (sprPos.x - Mathf.PI / 2) / 6.2831855f * 200;
            int   latitudeIndex    = Mathf.FloorToInt(Mathf.Max(0f, Mathf.Abs(rawLatitudeIndex) - 0.1f));
            int   newSegmentCount  = PlanetGrid.DetermineLongitudeSegmentCount(latitudeIndex, 200);

            float sizeDeviation = building.originalSegmentCount / (float)newSegmentCount;

            sprPos = new Vector2(newRelative.x, newRelative.y * sizeDeviation) + targetSpr;

            Vector3 absoluteBuildingPos = sprPos.SnapToGrid();

            Quaternion   absoluteBuildingRot = Maths.SphericalRotation(absoluteBuildingPos, yaw + building.cursorRelativeYaw);
            PrefabDesc   desc = GetPrefabDesc(building);
            BuildPreview bp   = BuildPreview.CreateSingle(building.itemProto, desc, true);

            bp.ResetInfos();
            bp.desc     = desc;
            bp.item     = building.itemProto;
            bp.recipeId = building.recipeId;
            bp.lpos     = absoluteBuildingPos;
            bp.lrot     = absoluteBuildingRot;

            Pose pose = new Pose(absoluteBuildingPos, absoluteBuildingRot);

            int objId = InserterPoses.AddOverride(pose, building.itemProto);

            pastedEntities.Add(building.originalId, new PastedEntity()
            {
                type           = EPastedType.BUILDING,
                index          = index,
                sourceBuilding = building,
                pose           = pose,
                objId          = objId,
                buildPreview   = bp
            });

            ActivateColliders(absoluteBuildingPos);
            previews.Add(bp);
        }
Example #31
0
    public static void reData(PlanetFactory __instance, int entityId, PrefabDesc desc, short modelIndex)
    {
        MultipMachineSpeed.info = new StringBuilder();
        var s = MultipMachineSpeed.info;

        if (isModAssembler)
        {
            desc.assemblerSpeed    = speed1;
            desc.workEnergyPerTick = power1;
            isModAssembler         = false;
        }
        if (isModSilo)
        {
            desc.siloChargeFrame   = speed1;
            desc.siloColdFrame     = speed2;
            desc.workEnergyPerTick = power1;
            isModSilo = false;
        }
        if (isModEjector)
        {
            desc.ejectorChargeFrame = speed1;
            desc.ejectorColdFrame   = speed2;
            desc.workEnergyPerTick  = power1;
            isModEjector            = false;
        }
        if (isModPowerGen)
        {
            desc.genEnergyPerTick = speedl1;
            desc.useFuelPerTick   = power1;
            isModPowerGen         = false;
        }
        if (isModMiner)
        {
            desc.workEnergyPerTick = power1;
            isModMiner             = false;
        }
        if (isModInserter)
        {
            desc.workEnergyPerTick = power1;
            isModInserter          = false;
        }
    }
Example #32
0
        /// <summary>
        /// helper function to save layers as prefabs
        /// </summary>
        /// <param name="folderName">absolute path to the folder where the prefabs should be saved in. Set string to null if you want to use the default folder</param>
        private void ExportLayersAsPrefabs(string folderName)
        {
            if (EditorManager.Scene == null)
            return;
              int iCount = 0;

              bool bAsBinary = true;

              try
              {
            foreach (Layer layer in EditorManager.Scene.Layers)
            {
              string prefabName;
              if (folderName == null) //if no foldername is used
              {
            prefabName = Path.ChangeExtension(layer.AbsoluteLayerFilename, ".prefab");
              }
              else
              {
            prefabName = Path.Combine(folderName, layer.LayerName + ".prefab");
              }
              PrefabDesc prefab = new PrefabDesc(prefabName);
              prefab.AutoSaveBinary = true; //activate autosave per default [#2112]
              prefab.Description = layer.Description;
              prefab.CreateFromInstances(layer.Root.ChildCollection, Vector3F.Zero, true, true);
              if (prefab.SaveToFile(null))
            iCount++;

              if (bAsBinary)
              {
            SceneExportInfo info = new SceneExportInfo();
            info.ExportType = SceneExportInfo.ExportType_e.VPrefab;
            info.AbsoluteFilename = EditorManager.Project.MakeAbsolute(prefab.BinaryFilename);
            info.RelevantShapes = SceneExportInfo.GetRelevantExportShapes(layer.Root);

            ExportHelper.StartPrefabExport(info);
            layer.Root.OnExportRecursive(info);
            ExportHelper.EndPrefabExport(info);
              }
            }
              }
              catch (Exception ex)
              {
            EditorManager.DumpException(ex);
            EditorManager.ShowMessageBox(this, "Failed to export layers. Detailed message:\n\n" + ex.Message, "Export Layers as Prefabs", MessageBoxButtons.OK, MessageBoxIcon.Error);
            return;
              }
              if (iCount == 0)
            EditorManager.ShowMessageBox(this, "No layer valid for export", "Export Layers as Prefabs", MessageBoxButtons.OK, MessageBoxIcon.Information);
              else
            EditorManager.ShowMessageBox(this, iCount.ToString() + " Layer(s) exported successfully", "Export Layers as Prefabs", MessageBoxButtons.OK, MessageBoxIcon.Information);
        }
Example #33
0
 public override void OnPostPrefabCreation(ShapeCollection allRootShapes, PrefabDesc prefab)
 {
     base.OnPostPrefabCreation(allRootShapes, prefab);
       if (_entityProperties != null)
       {
     if (!string.IsNullOrEmpty(_pendingEntityPropertyString))
       _entityProperties.ParseParameterString(_pendingEntityPropertyString, ",");
     _entityProperties.OnPostPrefabCreation(allRootShapes, prefab);
       }
       _pendingEntityPropertyString = null;
 }
Example #34
0
        public bool LoadLayersFromXML(LayerCollection newLayers, ProgressStatus progress, FileInfo[] files)
        {
            bool bOK = true;
              float fPercentage = 0.0f;
              foreach (FileInfo fileInfo in files)
              {
            fPercentage += 100.0f / (float)files.Length;
            if (fileInfo == null || (fileInfo.Attributes & FileAttributes.Directory) != 0) // file info can be null
              continue;
            if (string.Compare(fileInfo.Extension, IScene.LayerFileExtensionXML, true) != 0)
              continue;
            try
            {
              string absfilename = fileInfo.FullName;
              string filename = fileInfo.Name;
              using (XmlTextReader xmlReader = new XmlTextReader(absfilename))
              {
              XmlDocument doc = new XmlDocument();
              doc.Load(xmlReader);
              if (doc.DocumentElement == null)
            throw new Exception("XML does not contain root node");
              IEnumerator nodes = doc.DocumentElement.GetEnumerator();
              while (nodes.MoveNext())
              {
            XmlElement node = nodes.Current as XmlElement;
            if (node == null || node.Name != "layer")
              continue;

            string classname = node.GetAttribute("class");
            string name = node.GetAttribute("name");
            string uid = node.GetAttribute("uid");

            if (string.IsNullOrEmpty(name))
              name = Path.GetFileNameWithoutExtension(filename);

            Type t = EditorManager.ShapeFactory.GetTypeByName(classname, typeof(Layer), false);
            if (t == null)
              t = typeof(Layer);
            Layer layer = Activator.CreateInstance(t, new object[1] { name }) as Layer;
            if (layer == null)
              throw new Exception("Could not instantiate Layer");
            layer.SetLayerFileNameInternal(filename); // same filename but will replace extension

            if (!string.IsNullOrEmpty(uid))
            {
              layer.SetLayerIDInternal(Convert.ToUInt32(uid));
            }

            newLayers.Add(layer);

            // apply property/value pairs to layer
            SerializationHelper.ApplyXMLProperties(node, layer, false);

            // parse for shapes
            IEnumerator propNodes = node.GetEnumerator();
            while (propNodes.MoveNext())
            {
              XmlElement propNode = propNodes.Current as XmlElement;
              if (propNode == null)
                continue;
              if (propNode.Name == "shapes")
              {
                // use prefab functionality to parse it
                PrefabDesc dummyPrefab = new PrefabDesc(null);
                ShapeCollection shapes = dummyPrefab.CreateInstances(propNode, true, true);
                if (shapes != null)
                {
                  layer.Root.SetChildCollectionInternal(shapes);
                  foreach (ShapeBase shape in shapes)
                  {
                    shape.SetParentInternal(layer.Root);
                    shape.SetParentLayerInternal(layer);
                  }
                }
                if (!string.IsNullOrEmpty(dummyPrefab.LastError))
                {
                  string msg = "An error occurred while parsing file: \n\n" + filename + "\n\nThe layer won't contain any shapes.\nDetailed message:\n" + dummyPrefab.LastError;
                  EditorManager.ShowMessageBox(msg, "Error parsing layer file", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
                continue;
              }
              }
            }
              }
            }
            catch (Exception ex)
            {
              EditorManager.DumpException(ex, false);
              return false;
            }

              }
              return bOK;
        }
        private void createPrefabToolStripMenuItem_Click(object sender, EventArgs e)
        {
            ShapeCollection shapes = shapeTreeView.SelectedShapes;
              PrefabDesc prefab = new PrefabDesc(null);

              // try to use/create the prefabs directory of the project
              string proj = EditorManager.Project.ProjectDir;
              string prefabDir = Path.Combine(proj, EditorManager.Settings.PrefabDirectory);
              if (!Directory.Exists(prefabDir))
              {
            try
            {
              Directory.CreateDirectory(prefabDir);
            }
            catch (Exception ex)
            {
              EditorManager.DumpException(ex);
              prefabDir = proj; // OK, fallback to project directory
            }
              }

              // first select the prefab file to save
              CreateFileDlg fileDlg = new CreateFileDlg();
              fileDlg.Caption = "Save a prefab";
              fileDlg.Description = "Enter the name of the prefab file and select the directory to save it in. Then click OK to proceed.";
              fileDlg.InitialDirectory = prefabDir;
              fileDlg.Ext = ".prefab";
              fileDlg.Filter = new string[] { ".prefab" };
              fileDlg.AllowOverwrite = true;

              if (fileDlg.ShowDialog() != DialogResult.OK)
            return;

              prefab.Filename = fileDlg.FileName;

              // if the file exists, load it to get the properties
              if (File.Exists(prefab.Filename))
              {
            prefab.Load();
              }

              // set this before the dialog opens
              prefab.SourceShapesForExposedParameters = shapes;

              // edit the prefab properties
              using (PropertyGridDlg propDlg = new PropertyGridDlg("Edit prefab properties", "Edit additional prefab properties. Click OK to proceed with saving the prefab file."))
              {
            propDlg.DataObjectNoClone = prefab;
            if (propDlg.ShowDialog() != DialogResult.OK)
              return;

            // fill with the shapes
            if (!prefab.CreateFromInstances(shapes, shapes.Center, true, true))
            {
              EditorManager.ShowMessageBox("Failed to create prefab. Detailed message:\n\n" + prefab.LastError, "Creation Failed", MessageBoxButtons.OK, MessageBoxIcon.Error);
              return;
            }

            if (!prefab.SaveToFile(fileDlg.FileName))
            {
              EditorManager.ShowMessageBox("Failed to save prefab. Detailed message:\n\n" + prefab.LastError, "Saving Failed", MessageBoxButtons.OK, MessageBoxIcon.Error);
              return;
            }
              }
        }