Ejemplo n.º 1
0
        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");
        }
Ejemplo n.º 2
0
        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");
        }