public static void AddPieceToTool() { Harmony.CreateAndPatchAll(Assembly.GetExecutingAssembly(), "com.rolopogo.Basement"); MaterialReplacer.GetAllMaterials(); // Load from assetbundle var bundle = AssetBundle.LoadFromMemory(ResourceUtils.GetResource(Assembly.GetExecutingAssembly(), "Basement.Resources.basement")); basementPrefab = bundle.LoadAsset <GameObject>("Basement"); basementPrefab.AddComponent <Basement>(); bundle.Unload(false); Plugin.basementPrefab.name = "basement.basementprefab"; // update material references MaterialReplacer.ReplaceAllMaterialsWithOriginal(basementPrefab); var woodRequirement = MockRequirement.Create("Wood", 100, true); woodRequirement.FixReferences(); var stoneRequirement = MockRequirement.Create("Stone", 100, true); stoneRequirement.FixReferences(); var customRequirements = new Piece.Requirement[] { woodRequirement, stoneRequirement }; var piece = basementPrefab.GetComponent <Piece>(); piece.m_resources = customRequirements; piece.m_category = Piece.PieceCategory.Misc; piece.m_craftingStation = Mock <CraftingStation> .Create("piece_stonecutter"); piece.m_clipEverything = true; // Add spawn effect piece.m_placeEffect = Prefab.Cache.GetPrefab <GameObject>("piece_stonecutter").GetComponent <Piece>().m_placeEffect; piece.FixReferences(); Prefab.NetworkRegister(basementPrefab); // Add to tool var hammerPrefab = Prefab.Cache.GetPrefab <GameObject>("Hammer"); var hammerPieceTable = hammerPrefab.GetComponent <ItemDrop>().m_itemData.m_shared.m_buildPieces; hammerPieceTable.m_pieces.Add(basementPrefab.gameObject); }
private static Piece SetupCraftingStation(GameObject model, CraftingStation station, GameObject cart) { //Add model to cart var modelInstance = Instantiate(model, cart.transform); modelInstance.SetActive(true); // update material references MaterialReplacer.ReplaceAllMaterialsWithOriginal(modelInstance); Debug.Log("fix component refs"); //Fix component refs var wbWNT = cart.GetComponent <WearNTear>(); wbWNT.m_new = modelInstance.transform.Find("new").gameObject; wbWNT.m_worn = modelInstance.transform.Find("worn").gameObject; wbWNT.m_broken = modelInstance.transform.Find("broken").gameObject; wbWNT.m_fragmentRoots = new GameObject[] { modelInstance.transform.Find("cart_Destruction").gameObject }; var rb = cart.GetComponent <Rigidbody>(); rb.centerOfMass = Vector3.up * 0.3f; Debug.Log("fix vagon"); var vagon = cart.GetComponent <Vagon>(); vagon.m_name = station.m_name + " $tool_cart"; vagon.m_attachPoint = modelInstance.transform.Find("AttachPoint"); vagon.m_lineAttachPoints0 = modelInstance.transform.Find("LineAttach0"); vagon.m_lineAttachPoints1 = modelInstance.transform.Find("LineAttach1"); vagon.m_container = null; vagon.m_loadVis = new List <Vagon.LoadData>(); Debug.Log("fix wheels"); cart.transform.Find("Wheel1").position = modelInstance.transform.Find("Wheel1").position; cart.transform.Find("Wheel2").position = modelInstance.transform.Find("Wheel2").position; modelInstance.transform.Find("Wheel1").SetParent(cart.transform.Find("Wheel1"), false); modelInstance.transform.Find("Wheel2").SetParent(cart.transform.Find("Wheel2"), false); cart.transform.Find("Wheel1/Wheel1").localRotation = Quaternion.identity; cart.transform.Find("Wheel2/Wheel2").localRotation = Quaternion.identity; cart.transform.Find("Wheel1/Wheel1").localPosition = Vector3.zero; cart.transform.Find("Wheel2/Wheel2").localPosition = Vector3.zero; Debug.Log("add crafting station"); var cs = modelInstance.transform.Find("crafting station").gameObject.AddComponent <CraftingStation>(); cs.m_name = station.m_name; cs.m_icon = station.m_icon; cs.m_discoverRange = station.m_discoverRange; cs.m_rangeBuild = station.m_rangeBuild; cs.m_craftRequireRoof = false; cs.m_craftRequireFire = false; cs.m_roofCheckPoint = cs.transform; cs.m_connectionPoint = cs.transform; cs.m_showBasicRecipies = station.m_showBasicRecipies; cs.m_useDistance = station.m_useDistance; cs.m_useAnimation = station.m_useAnimation; cs.m_craftItemEffects = station.m_craftItemEffects; cs.m_craftItemDoneEffects = station.m_craftItemDoneEffects; cs.m_repairItemDoneEffects = station.m_repairItemDoneEffects; if (cs.transform.Find("AreaMarker")) { DestroyImmediate(cs.transform.Find("AreaMarker")); } cs.m_areaMarker = Instantiate(station.transform.Find("AreaMarker"), modelInstance.transform).gameObject; cs.gameObject.name = "CraftyCarts.CraftingStation"; Debug.Log("setup recipe"); var piece = cart.GetComponent <Piece>(); piece.m_name = station.m_name + " $tool_cart"; piece.m_craftingStation = station.GetComponent <Piece>().m_craftingStation; // Recipes var nail = MockRequirement.Create("BronzeNails", 10, true); nail.FixReferences(); var newReqs = station.GetComponent <Piece>().m_resources.ToList(); newReqs.Add(nail); piece.m_resources = newReqs.ToArray(); return(piece); }