/// <summary>
        /// Builds the module for this slime
        /// </summary>
        protected virtual void BuildModule()
        {
            GameObjectTemplate module = new GameObjectTemplate("module" + mainObject.Name);

            module.AddComponents(extras.ToArray());
            module.AddComponents(
                new Create <SlimeEat>((eat) =>
            {
                eat.slimeDefinition    = definition;
                eat.damagePerAttack    = 20;
                eat.EatFX              = EffectObjects.fxSlimeEat;
                eat.EatFavoriteFX      = EffectObjects.fxSlimeFavEat;
                eat.ProduceFX          = EffectObjects.fxSlimeProduce;
                eat.TransformFX        = EffectObjects.fxSlimeTrans;
                eat.minDriveToEat      = driveToEat;
                eat.drivePerEat        = drivePerEat;
                eat.agitationPerEat    = agitPerEat;
                eat.agitationPerFavEat = agitPerFavEat;
            }),
                new Create <ReactToToyNearby>((react) => react.slimeDefinition = definition)
                );

            slimeModule             = module.ToGameObject(null);
            definition.SlimeModules = slimeModule.Group();
        }
Exemple #2
0
        /// <summary>
        /// Creates the object of the template (To get the prefab version use .ToPrefab() after calling this)
        /// </summary>
        public override FruitPlantableTemplate Create()
        {
            // Create main object
            mainObject.AddComponents(
                new Create <SpawnResource>((spawn) =>
            {
                spawn.BonusChance = bonusChance;
                spawn.forceDestroyLeftoversOnSpawn = false;
                spawn.id = resID;
                spawn.MaxActiveSpawns           = 0;
                spawn.MaxObjectsSpawned         = maxSpawn;
                spawn.MaxSpawnIntervalGameHours = maxHours;
                spawn.MaxTotalSpawns            = 0;
                spawn.minBonusSelections        = minBonusSelection;
                spawn.MinNutrientObjectsSpawned = minNutrient;
                spawn.MinObjectsSpawned         = minSpawn;
                spawn.MinSpawnIntervalGameHours = minHours;
                spawn.wateringDurationHours     = waterHours;
                spawn.ObjectsToSpawn            = toSpawn.ToArray();
                spawn.BonusObjectsToSpawn       = bonusToSpawn.ToArray();
            }),
                new Create <BoxCollider>((col) =>
            {
                col.size      = new Vector3(8, 0.1f, 8);
                col.center    = new Vector3(0, 0, 0.1f);
                col.isTrigger = true;
            })
                ).AddAfterChildren(GrabJoints).AddAfterChildren(SetNetworkNodes);

            if (!isDeluxe)
            {
                mainObject.AddComponents(
                    new Create <ScaleMarker>((scale) => scale.doNotScaleAsReplacement = false)
                    );
            }

            // Add network nodes
            GameObjectTemplate[] droneNetworkNodes = new GameObjectTemplate[4];

            for (int i = 0; i < 4; i++)
            {
                droneNetworkNodes[i] = new GameObjectTemplate($"DroneNetworkNode{(i + 1).ToString("00")}",
                                                              new Create <PathingNetworkNode>(null)
                                                              ).AddChild(new GameObjectTemplate("NodeLoc").SetTransform(new Vector3(0, 2, 0), Vector3.zero, Vector3.one).SetDebugMarker(MarkerType.DroneNode))
                                       .AddAfterChildren((obj) => obj.GetComponent <PathingNetworkNode>().nodeLoc = obj.transform.GetChild(0))
                                       .SetTransform(GardenObjects.droneNodes[i]);
            }

            mainObject.AddChild(new GameObjectTemplate("DroneSubnetwork", new Create <GardenDroneSubnetwork>(null))
                                .AddChild(droneNetworkNodes[0])
                                .AddChild(droneNetworkNodes[1])
                                .AddChild(droneNetworkNodes[2])
                                .AddChild(droneNetworkNodes[3])
                                );

            // Add tree
            GameObjectTemplate treeObj = new GameObjectTemplate("tree_bark",
                                                                new Create <MeshFilter>((filter) => filter.sharedMesh        = tree ?? GardenObjects.modelTreeMeshs[treeID] ?? GardenObjects.modelTreeMeshs[SpawnResource.Id.POGO_TREE]),
                                                                new Create <MeshRenderer>((render) => render.sharedMaterials = treeMaterials ?? GardenObjects.modelTreeMaterials[treeID] ?? GardenObjects.modelTreeMaterials[SpawnResource.Id.POGO_TREE]),
                                                                new Create <MeshCollider>((col) =>
            {
                col.sharedMesh = treeCol ?? GardenObjects.modelTreeCols[treeID] ?? GardenObjects.modelTreeCols[SpawnResource.Id.POGO_TREE];
                col.convex     = treeCol == tree;
            })
                                                                ).SetTransform(Vector3.zero, Vector3.zero, customTreeScale ? treeScale : Vector3.one * 0.7f);

            GameObjectTemplate leavesObj = new GameObjectTemplate("leaves_tree",
                                                                  new Create <MeshFilter>((filter) => filter.sharedMesh        = leaves ?? GardenObjects.modelLeavesMeshs[leavesID] ?? GardenObjects.modelLeavesMeshs[SpawnResource.Id.POGO_TREE]),
                                                                  new Create <MeshRenderer>((render) => render.sharedMaterials = leavesMaterials ?? GardenObjects.modelLeavesMaterials[leavesID] ?? GardenObjects.modelLeavesMaterials[SpawnResource.Id.POGO_TREE]),
                                                                  new Create <MeshCollider>((col) =>
            {
                col.sharedMesh = leavesCol ?? GardenObjects.modelLeavesCols[leavesID] ?? GardenObjects.modelLeavesCols[SpawnResource.Id.POGO_TREE];
                col.convex     = leavesCol == leaves;
            })
                                                                  ).SetTransform(leavesPosition, Vector3.zero, customLeavesScale ? leavesScale : Vector3.one);

            if (!isDeluxe)
            {
                mainObject.AddChild(treeObj.AddChild(leavesObj));
            }
            else
            {
                mainObject.AddChild(treeObj.AddComponents(
                                        new Create <ScaleMarker>((scale) => scale.doNotScaleAsReplacement = false)
                                        ).AddChild(leavesObj));
            }

            // Add spawn joints
            for (int i = 0; i < 20; i++)
            {
                mainObject.AddChild(new GameObjectTemplate($"SpawnJoint{(i + 1).ToString("00")}",
                                                           new Create <MeshFilter>((filter) => filter.sharedMesh        = GardenObjects.modelMeshs.ContainsKey(ID) ? GardenObjects.modelMeshs[ID] : modelMesh),
                                                           new Create <MeshRenderer>((render) => render.sharedMaterials = GardenObjects.modelMaterials.ContainsKey(ID) ? GardenObjects.modelMaterials[ID] : modelMaterials),
                                                           new Create <Rigidbody>((body) =>
                {
                    body.drag        = 0;
                    body.angularDrag = 0.05f;
                    body.mass        = 1;
                    body.useGravity  = false;
                    body.isKinematic = true;
                }),
                                                           new Create <FixedJoint>(null),
                                                           new Create <HideOnStart>(null)
                                                           ).SetTransform(customSpawnJoints == null ? GardenObjects.treeSpawnJoints[leavesID][i] : customSpawnJoints[i])
                                    .SetDebugMarker(MarkerType.SpawnPoint)
                                    );
            }

            // Add Deluxe Stuff
            if (isDeluxe)
            {
                // Add spawn joints
                for (int i = 20; i < 34; i++)
                {
                    mainObject.AddChild(new GameObjectTemplate($"SpawnJoint{(i + 1).ToString("00")}",
                                                               new Create <MeshFilter>((filter) => filter.sharedMesh        = GardenObjects.modelMeshs.ContainsKey(ID) ? GardenObjects.modelMeshs[ID] : modelMesh),
                                                               new Create <MeshRenderer>((render) => render.sharedMaterials = GardenObjects.modelMaterials.ContainsKey(ID) ? GardenObjects.modelMaterials[ID] : modelMaterials),
                                                               new Create <Rigidbody>((body) =>
                    {
                        body.drag        = 0;
                        body.angularDrag = 0.05f;
                        body.mass        = 1;
                        body.useGravity  = false;
                        body.isKinematic = true;
                    }),
                                                               new Create <FixedJoint>(null),
                                                               new Create <HideOnStart>(null)
                                                               ).SetTransform(customSpawnJoints == null ? GardenObjects.treeSpawnJoints[leavesID][i] : customSpawnJoints[i])
                                        .SetDebugMarker(MarkerType.SpawnPoint)
                                        );
                }

                // Add trees
                mainObject.AddChild(treeObj.Clone().AddComponents(
                                        new Create <ScaleMarker>((scale) => scale.doNotScaleAsReplacement = false)
                                        ).SetTransform(new Vector3(3.8f, 0.8f, -3.8f), new Vector3(0, 225, 0), customTreeScale ? treeDeluxeScale : new Vector3(0.4f, 0.5f, 0.4f))
                                    .AddChild(leavesObj.Clone().SetTransform(leavesDeluxePosition, Vector3.zero, customLeavesScale ? leavesDeluxeScale : new Vector3(1.3f, 0.9f, 1.3f))));

                mainObject.AddChild(treeObj.Clone().AddComponents(
                                        new Create <ScaleMarker>((scale) => scale.doNotScaleAsReplacement = false)
                                        ).SetTransform(new Vector3(-3.8f, 0.8f, 3.8f), new Vector3(0, 45, 0), customTreeScale ? treeDeluxeScale : new Vector3(0.4f, 0.5f, 0.4f))
                                    .AddChild(leavesObj.Clone().SetTransform(leavesDeluxePosition, Vector3.zero, customLeavesScale ? leavesDeluxeScale : new Vector3(1.3f, 0.9f, 1.3f))));
            }

            return(this);
        }