예제 #1
0
        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);
        }
예제 #2
0
        public static void AddPieceToTool()
        {
            if (prefabRoot)
            {
                return;
            }

            MaterialReplacer.GetAllMaterials();

            prefabRoot = new GameObject("CartPrefabs");
            prefabRoot.SetActive(false);
            DontDestroyOnLoad(prefabRoot);

            var cart = Prefab.Cache.GetPrefab <GameObject>("Cart");

            var workbenchCart = Instantiate(cart, prefabRoot.transform);

            DestroyImmediate(workbenchCart.transform.Find("AttachPoint").gameObject);
            DestroyImmediate(workbenchCart.transform.Find("Wheel1").GetChild(0).gameObject);
            DestroyImmediate(workbenchCart.transform.Find("Wheel2").GetChild(0).gameObject);
            DestroyImmediate(workbenchCart.transform.Find("Container").gameObject);
            DestroyImmediate(workbenchCart.transform.Find("Vagon").gameObject);
            DestroyImmediate(workbenchCart.transform.Find("load").gameObject);
            DestroyImmediate(workbenchCart.transform.Find("LineAttach0").gameObject);
            DestroyImmediate(workbenchCart.transform.Find("LineAttach1").gameObject);
            DestroyImmediate(workbenchCart.transform.Find("cart_Destruction").gameObject);

            cart.GetComponent <Rigidbody>().mass = 50;

            workbenchCart.name = "CraftyCarts.WorkbenchCart";

            var stoneCart = Instantiate(workbenchCart, prefabRoot.transform);

            stoneCart.name = "CraftyCarts.StoneCart";
            var forgeCart = Instantiate(workbenchCart, prefabRoot.transform);

            forgeCart.name = "CraftyCarts.ForgeCart";

            // Load from assetbundle
            var bundle             = AssetBundle.LoadFromMemory(ResourceUtils.GetResource(Assembly.GetExecutingAssembly(), "CraftyCarts.Resources.carts"));
            var workbenchCartModel = bundle.LoadAsset <GameObject>("workbench_cart");
            var wbIcon             = bundle.LoadAsset <Sprite>("workbenchcarticon");
            var forgeCartModel     = bundle.LoadAsset <GameObject>("forge_cart");
            var fIcon          = bundle.LoadAsset <Sprite>("forgecarticon");
            var stoneCartModel = bundle.LoadAsset <GameObject>("stone_cart");
            var scIcon         = bundle.LoadAsset <Sprite>("stonecarticon");

            bundle.Unload(false);

            Debug.Log("add crafting station");
            var workbench   = Prefab.Cache.GetPrefab <GameObject>("piece_workbench").GetComponent <CraftingStation>();
            var stoneCutter = Prefab.Cache.GetPrefab <GameObject>("piece_stonecutter").GetComponent <CraftingStation>();
            var forge       = Prefab.Cache.GetPrefab <GameObject>("forge").GetComponent <CraftingStation>();

            var wbPiece = SetupCraftingStation(workbenchCartModel, workbench, workbenchCart);
            var fPiece  = SetupCraftingStation(forgeCartModel, forge, forgeCart);
            var scPiece = SetupCraftingStation(stoneCartModel, stoneCutter, stoneCart);

            wbPiece.m_icon = wbIcon;
            fPiece.m_icon  = fIcon;
            scPiece.m_icon = scIcon;


            // Add to tool
            var hammerPrefab     = Prefab.Cache.GetPrefab <GameObject>("Hammer");
            var hammerPieceTable = hammerPrefab.GetComponent <ItemDrop>().m_itemData.m_shared.m_buildPieces;

            if (!hammerPieceTable.m_pieces.Contains(workbenchCart.gameObject))
            {
                hammerPieceTable.m_pieces.Add(workbenchCart.gameObject);
                Prefab.NetworkRegister(workbenchCart);
                hammerPieceTable.m_pieces.Add(forgeCart.gameObject);
                Prefab.NetworkRegister(forgeCart);
                hammerPieceTable.m_pieces.Add(stoneCart.gameObject);
                Prefab.NetworkRegister(stoneCart);
            }
        }