internal void Register() { HydroponicHarvestersModelPrefab.GetPrefabs(); _prefab = HydroponicHarvestersModelPrefab.BottlePrefab; if (_prefab == null) { QuickLogger.Error("FloraKleen prefab is null"); return; } GameObjectHelpers.AddConstructableBounds(_prefab, new Vector3(0.1969692f, 0.25098f, 0.1916926f), new Vector3(0, -0.01675579f, 0)); QuickLogger.Debug("Added Constructable Bounds"); //Make the rigid body isKinematic so it doesnt shake the cyclops var rb = _prefab.AddComponent <Rigidbody>(); rb.isKinematic = true; QuickLogger.Debug("Added Rigid Body"); // Make the object drop slowly in water var wf = _prefab.EnsureComponent <WorldForces>(); wf.underwaterGravity = 0; wf.underwaterDrag = 10f; wf.enabled = true; QuickLogger.Debug("Ensuring World Forces"); // Add fabricating animation var fabricatingA = _prefab.EnsureComponent <VFXFabricating>(); fabricatingA.localMinY = -0.1f; fabricatingA.localMaxY = 0.6f; fabricatingA.posOffset = new Vector3(0f, 0f, 0f); fabricatingA.eulerOffset = new Vector3(0f, 0f, 0f); fabricatingA.scaleFactor = 1.0f; QuickLogger.Debug("Ensuring VFXFabricating"); //// Set proper shaders (for crafting animation) var renderer = _prefab.GetComponentInChildren <Renderer>(); QuickLogger.Debug("Getting Renderer"); // Update sky applier var applier = _prefab.EnsureComponent <SkyApplier>(); applier.renderers = new Renderer[] { renderer }; applier.anchorSky = Skies.Auto; QuickLogger.Debug("Ensuring SkyApplier"); }
private static void AddTechFabricatorItems() { var dnaIcon = ImageUtils.LoadSpriteFromFile(Path.Combine(Mod.GetAssetFolder(), "DNA.png")); var icon = ImageUtils.LoadSpriteFromFile(Path.Combine(Mod.GetAssetFolder(), "LargeHydroponicHarvester.png")); var eatableIcon = ImageUtils.LoadSpriteFromFile(Path.Combine(Mod.GetAssetFolder(), "eatableIcon.png")); var usableIcon = ImageUtils.LoadSpriteFromFile(Path.Combine(Mod.GetAssetFolder(), "usableIcon.png")); var decorIcon = ImageUtils.LoadSpriteFromFile(Path.Combine(Mod.GetAssetFolder(), "BluePalm_FCSDNA.png")); var craftingTab = new CraftingTab(Mod.HydroHarvTabID, Mod.ModFriendlyName, icon); var largeHydroHarv = new FCSKit(Mod.LargeHydroHarvKitClassID, Mod.LargeFriendlyName, craftingTab, Mod.LargeHydroHarvIngredients); largeHydroHarv.Patch(FcTechFabricatorService.PublicAPI, FcAssetBundlesService.PublicAPI); var mediumHydroHarv = new FCSKit(Mod.MediumHydroHarvKitClassID, Mod.MediumFriendlyName, craftingTab, Mod.MediumHydroHarvIngredients); mediumHydroHarv.Patch(FcTechFabricatorService.PublicAPI, FcAssetBundlesService.PublicAPI); var smallHydroHarv = new FCSKit(Mod.SmallHydroHarvKitClassID, Mod.SmallFriendlyName, craftingTab, Mod.SmallHydroHarvIngredients); smallHydroHarv.Patch(FcTechFabricatorService.PublicAPI, FcAssetBundlesService.PublicAPI); FcTechFabricatorService.PublicAPI.AddTabNode("DNASample", "DNA Samples", dnaIcon); FcTechFabricatorService.PublicAPI.AddTabNode("FCS_EatableDNA", "Eatable DNA Samples", eatableIcon, "DNASample"); FcTechFabricatorService.PublicAPI.AddTabNode("FCS_UsableDNA", "Usable DNA Samples", usableIcon, "DNASample"); FcTechFabricatorService.PublicAPI.AddTabNode("FCS_DecorDNA", "Decor DNA Samples", decorIcon, "DNASample"); foreach (var dnaSample in Mod.EatableDNASamples) { var dna = new FCSDNASample(dnaSample.ClassID, dnaSample.Friendly, dnaSample.Description, dnaSample.Ingredient, dnaSample.Amount); dna.ChangeIconLocation(Mod.GetAssetFolder()); dna.Patch(); FcTechFabricatorService.PublicAPI.AddCraftNode(dna, "FCS_EatableDNA"); } foreach (var dnaSample in Mod.UsableDNASamples) { var dna = new FCSDNASample(dnaSample.ClassID, dnaSample.Friendly, dnaSample.Description, dnaSample.Ingredient, dnaSample.Amount); dna.ChangeIconLocation(Mod.GetAssetFolder()); dna.Patch(); FcTechFabricatorService.PublicAPI.AddCraftNode(dna, "FCS_UsableDNA"); } foreach (var dnaSample in Mod.DecorSamples) { var dna = new FCSDNASample(dnaSample.ClassID, dnaSample.Friendly, dnaSample.Description, dnaSample.Ingredient, dnaSample.Amount); dna.ChangeIconLocation(Mod.GetAssetFolder()); dna.Patch(); FcTechFabricatorService.PublicAPI.AddCraftNode(dna, "FCS_DecorDNA"); } if (HydroponicHarvestersModelPrefab.GetPrefabs()) { var hydroHarvesterLarge = new HydroponicHarvestersBuildable(Mod.LargeClassID, Mod.LargeFriendlyName, Mod.LargeDescription, new Vector3(2.13536f, 2.379217f, 2.341017f), new Vector3(0f, 1.556781f, 0f), Mod.LargeHydroHarvKitClassID.ToTechType(), HydroponicHarvestersModelPrefab.LargePrefab, Mod.LargeBubblesLocations); hydroHarvesterLarge.Patch(); QuickLogger.Debug("Patched Large"); var hydroHarvesterMedium = new HydroponicHarvestersBuildable(Mod.MediumClassID, Mod.MediumFriendlyName, Mod.MediumDescription, new Vector3(1.654228f, 2.46076f, 2.274961f), new Vector3(-0.02562737f, 1.505608f, 0.02242398f), Mod.MediumHydroHarvKitClassID.ToTechType(), HydroponicHarvestersModelPrefab.MediumPrefab, Mod.MediumBubblesLocations); hydroHarvesterMedium.Patch(); QuickLogger.Debug("Patched Medium"); var hydroHarvesterSmall = new HydroponicHarvestersBuildable(Mod.SmallClassID, Mod.SmallFriendlyName, Mod.SmallDescription, new Vector3(1.648565f, 2.492922f, 1.784077f), new Vector3(-0.01223725f, 1.492922f, 0.1544394f), Mod.SmallHydroHarvKitClassID.ToTechType(), HydroponicHarvestersModelPrefab.SmallPrefab, Mod.SmallBubblesLocations); hydroHarvesterSmall.Patch(); FloraKleen = new FloraKleenPatcher(Mod.FloraKleenClassID, Mod.FloraKleenFriendlyName, Mod.FloraKleenDescription, craftingTab); FloraKleen.Register(); FloraKleen.Patch(FcTechFabricatorService.PublicAPI, FcAssetBundlesService.PublicAPI); QuickLogger.Debug("Patched Small"); } else { throw new PatchTerminatedException("Failed to get the prefabs from the asset bundle"); } }
internal void Register() { HydroponicHarvestersModelPrefab.GetPrefabs(); _prefab = HydroponicHarvestersModelPrefab.BottlePrefab; if (_prefab == null) { QuickLogger.Error("FloraKleen prefab is null"); return; } GameObjectHelpers.AddConstructableBounds(_prefab, new Vector3(0.1969692f, 0.25098f, 0.1916926f), new Vector3(0, -0.01675579f, 0)); QuickLogger.Debug("Added Constructable Bounds"); //Make the rigid body isKinematic so it doesnt shake the cyclops var rb = _prefab.AddComponent <Rigidbody>(); rb.isKinematic = true; QuickLogger.Debug("Added Rigid Body"); // Set collider var collider = _prefab.GetComponentInChildren <Collider>(); collider.enabled = true; collider.isTrigger = true; QuickLogger.Debug("Added Getting Collider"); // Make the object drop slowly in water var wf = _prefab.EnsureComponent <WorldForces>(); wf.underwaterGravity = 0; wf.underwaterDrag = 10f; wf.enabled = true; QuickLogger.Debug("Ensuring World Forces"); // Add fabricating animation var fabricatingA = _prefab.EnsureComponent <VFXFabricating>(); fabricatingA.localMinY = -0.1f; fabricatingA.localMaxY = 0.6f; fabricatingA.posOffset = new Vector3(0f, 0f, 0f); fabricatingA.eulerOffset = new Vector3(0f, 0f, 0f); fabricatingA.scaleFactor = 1.0f; QuickLogger.Debug("Ensuring VFXFabricating"); //// Set proper shaders (for crafting animation) var renderer = _prefab.GetComponentInChildren <Renderer>(); QuickLogger.Debug("Getting Renderer"); // Update sky applier var applier = _prefab.EnsureComponent <SkyApplier>(); applier.renderers = new Renderer[] { renderer }; applier.anchorSky = Skies.Auto; QuickLogger.Debug("Ensuring SkyApplier"); // We can pick this item var pickupable = _prefab.EnsureComponent <Pickupable>(); pickupable.isPickupable = true; pickupable.randomizeRotationWhenDropped = true; QuickLogger.Debug("Ensuring Pickupable"); //Allow this kit to be placed on surfaces in these situations var placeTool = _prefab.EnsureComponent <PlaceTool>(); placeTool.allowedInBase = true; placeTool.allowedOnBase = false; placeTool.allowedOnCeiling = false; placeTool.allowedOnConstructable = true; placeTool.allowedOnGround = true; placeTool.allowedOnRigidBody = true; placeTool.allowedOnWalls = false; placeTool.allowedOutside = false; placeTool.rotationEnabled = true; placeTool.enabled = true; placeTool.hasAnimations = false; placeTool.hasBashAnimation = false; placeTool.hasFirstUseAnimation = false; placeTool.mainCollider = collider; placeTool.pickupable = pickupable; placeTool.drawTime = 0.5f; placeTool.dropTime = 1; placeTool.holsterTime = 0.35f; QuickLogger.Debug("Ensuring PlaceTool"); }