/// <summary> /// Creates the object of the template (To get the prefab version use .ToPrefab() after calling this) /// </summary> public override PlotFrameTemplate Create() { // Create a base post GameObjectTemplate post = new GameObjectTemplate("Post") .AddChild(new GameObjectTemplate("plotBase", new Create <MeshFilter>((filter) => filter.sharedMesh = RanchObjects.plotBase), new Create <MeshRenderer>((render) => render.sharedMaterials = RanchObjects.plotBaseMaterials) )) .AddChild(new GameObjectTemplate("plotPost", new Create <MeshFilter>((filter) => filter.sharedMesh = RanchObjects.plotPost), new Create <MeshRenderer>((render) => render.sharedMaterials = RanchObjects.plotBaseMaterials), new Create <CapsuleCollider>((col) => { col.center = Vector3.up * 2.3f; col.radius = 0.4455906f; col.height = 4.199063f; col.direction = 1; }) )); // Create main object mainObject.AddChild(post.Clone("Post 1").SetTransform(new Vector3(4.8f, 0, -4.8f), Vector3.zero, Vector3.one)); mainObject.AddChild(post.Clone("Post 2").SetTransform(new Vector3(-4.8f, 0, -4.8f), Vector3.up * 90, Vector3.one)); mainObject.AddChild(post.Clone("Post 3").SetTransform(new Vector3(-4.8f, 0, 4.8f), Vector3.up * 180, Vector3.one)); mainObject.AddChild(post.Clone("Post 4").SetTransform(new Vector3(4.8f, 0, 4.8f), Vector3.up * 270, Vector3.one)); return(this); }
/// <summary> /// Creates the object of the template (To get the prefab version use .ToPrefab() after calling this) /// </summary> public override VeggiePlantableTemplate 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; }), new Create <ScaleYOnlyMarker>((scale) => scale.doNotScaleAsReplacement = false) ).AddAfterChildren(GrabJoints); // 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.spawnJoints[i] : customSpawnJoints[i]) .SetDebugMarker(MarkerType.SpawnPoint) ); } // Add beds GameObjectTemplate sprout = new GameObjectTemplate("Sprout", new Create <MeshFilter>((filter) => filter.sharedMesh = this.sprout ?? GardenObjects.modelSproutMeshs[sproutID] ?? GardenObjects.modelSproutMeshs[SpawnResource.Id.CARROT_PATCH]), new Create <MeshRenderer>((render) => render.sharedMaterials = sproutMaterials == null ? GardenObjects.modelSproutMaterials[sproutID] ?? GardenObjects.modelSproutMaterials[SpawnResource.Id.CARROT_PATCH] : sproutMaterials) ); GameObjectTemplate dirt = new GameObjectTemplate("Dirt", new Create <MeshFilter>((filter) => filter.sharedMesh = GardenObjects.dirtMesh), new Create <MeshRenderer>((render) => render.sharedMaterials = GardenObjects.dirtMaterials) ).AddChild(new GameObjectTemplate("rocks_long", new Create <MeshFilter>((filter) => filter.sharedMesh = GardenObjects.rockMesh), new Create <MeshRenderer>((render) => render.sharedMaterials = GardenObjects.rockMaterials) )).SetTransform(Vector3.zero, Vector3.up * 90f, new Vector3(0.5f, 0.4f, 0.5f)); GameObjectTemplate baseBeds = new GameObjectTemplate("BaseBeds"); for (int i = 0; i < 4; i++) { (isDeluxe ? baseBeds : mainObject).AddChild(new GameObjectTemplate("Bed", new Create <LODGroup>((group) => { group.localReferencePoint = Vector3.one * 0.1f; group.size = 8.657982f; group.fadeMode = LODFadeMode.None; group.animateCrossFading = false; }), new Create <CapsuleCollider>((col) => { col.center = new Vector3(0, -0.6f, 0); col.radius = 0.8f; col.height = 8; col.direction = 2; col.contactOffset = 0.01f; }) ).SetTransform(GardenObjects.beds[i]) .AddChild(dirt) .AddChild(sprout.Clone().SetTransform(GardenObjects.bedSprouts[0])) .AddChild(sprout.Clone().SetTransform(GardenObjects.bedSprouts[1])) .AddChild(sprout.Clone().SetTransform(GardenObjects.bedSprouts[2])) .AddChild(sprout.Clone().SetTransform(GardenObjects.bedSprouts[3])) ); } // Add Deluxe Stuff if (isDeluxe) { mainObject.AddChild(baseBeds); // 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.spawnJoints[i] : customSpawnJoints[i]) .SetDebugMarker(MarkerType.SpawnPoint) ); } // Add beds GameObjectTemplate dirtDeluxe = new GameObjectTemplate("Dirt", new Create <MeshFilter>((filter) => filter.sharedMesh = GardenObjects.deluxeDirtMesh), new Create <MeshRenderer>((render) => render.sharedMaterials = GardenObjects.deluxeDirtMaterials) ).AddChild(new GameObjectTemplate("rocks_long", new Create <MeshFilter>((filter) => filter.sharedMesh = GardenObjects.deluxeRockMesh), new Create <MeshRenderer>((render) => render.sharedMaterials = GardenObjects.deluxeRockMaterials) )).SetTransform(Vector3.zero, Vector3.up * 90f, new Vector3(0.5f, 0.3f, 0.5f)); for (int i = 4; i < 6; i++) { mainObject.AddChild(new GameObjectTemplate("Bed", new Create <LODGroup>((group) => { group.localReferencePoint = Vector3.one * 0.1f; group.size = 8.657982f; group.fadeMode = LODFadeMode.None; group.animateCrossFading = false; }), new Create <ScaleYOnlyMarker>((scale) => scale.doNotScaleAsReplacement = false) ).SetTransform(GardenObjects.beds[i]) .AddChild(dirtDeluxe) .AddChild(sprout.Clone().SetTransform(GardenObjects.bedSprouts[4])) .AddChild(sprout.Clone().SetTransform(GardenObjects.bedSprouts[5])) .AddChild(sprout.Clone().SetTransform(GardenObjects.bedSprouts[6])) ); } } return(this); }
/// <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); }