Ejemplo n.º 1
0
        public static void OnGameFinishLoad()
        {
            foreach (Mod m in mods)
            {
                Logger.Log("Game finished loading!");
                m.OnGameFinishLoad();
            }

            Initializer.Postpatch();
        }
Ejemplo n.º 2
0
        // Called when GameInput.Awake happens.
        public static void OnGameStart()
        {
            try
            {
                if (patched)
                {
                    return;
                }

                patched = true;

                Logger.Initialize("SMLLog.log");

                Logger.Log("Logging started!");

                if (!Directory.Exists(ModFolder))
                {
                    Directory.CreateDirectory(ModFolder);
                }

                FileInfo[] modFiles = new DirectoryInfo(ModFolder).GetFiles();
                Logger.Log("Found mod files! Amount of mod files: " + modFiles.Length);

                foreach (FileInfo file in modFiles)
                {
                    if (file.Extension != ".dll")
                    {
                        continue;
                    }

                    if (file.Name.Contains("0Harmony"))
                    {
                        continue;
                    }

                    AssemblyName an       = AssemblyName.GetAssemblyName(file.FullName);
                    Assembly     assembly = Assembly.Load(an);
                    Type         modType  = typeof(Mod);
                    foreach (Type t in assembly.GetTypes())
                    {
                        if (t.Name == "EntryPoint")
                        {
                            Mod mod = (Mod)Activator.CreateInstance(t);
                            mod.OnGameStart();

                            mods.Add(mod);

                            Logger.Log("Loaded mod: " + assembly.FullName + "!");
                        }
                    }
                }

                var propulsionCannon = Resources.Load <GameObject>("WorldEntities/Tools/RepulsionCannon");
                foreach (var component in propulsionCannon.GetComponents <Component>())
                {
                    Logger.Log("Component: " + component.GetType().Name);
                }

                Patcher.Patch();
                Initializer.Patch();
            }
            catch (Exception e)
            {
                Logger.Log("Caught exception! " + e.Message);
                Logger.Log(e.StackTrace);
            }
        }
Ejemplo n.º 3
0
        public override void OnGameStart()
        {
            warpCannonTechType  = TechTypePatcher.AddTechType(WARP_CANNON_CLASS_ID, "Warp Cannon", "A tool that allows you to warp 30 meters using Warper technology.");
            warpScalesTechType  = TechTypePatcher.AddTechType(WARP_SCALE_CLASS_ID, "Warp Scale", "A resource obtained from warpers that can be used to craft Warp Batteries.");
            warpBatteryTechType = TechTypePatcher.AddTechType(WARP_BATTERY_CLASS_ID, "Warp Battery", "A battery that powers Warp Cannons.");

            var warpCannonData = new TechDataHelper();

            warpCannonData._craftAmount = 1;
            warpCannonData._ingredients = new List <IngredientHelper>();
            warpCannonData._ingredients.Add(new IngredientHelper(warpBatteryTechType, 1));
            warpCannonData._ingredients.Add(new IngredientHelper(TechType.AdvancedWiringKit, 1));
            warpCannonData._ingredients.Add(new IngredientHelper(TechType.Magnetite, 2));
            warpCannonData._ingredients.Add(new IngredientHelper(TechType.Kyanite, 2));
            warpCannonData._techType = warpCannonTechType;

            var warpBatteryData = new TechDataHelper();

            warpBatteryData._craftAmount = 1;
            warpBatteryData._ingredients = new List <IngredientHelper>();
            warpBatteryData._ingredients.Add(new IngredientHelper(TechType.Battery, 1));
            warpBatteryData._ingredients.Add(new IngredientHelper(warpScalesTechType, 2));
            warpBatteryData._techType = warpScalesTechType;

            CraftDataPatcher.customTechData.Add(warpCannonTechType, warpCannonData);
            CraftDataPatcher.customTechData.Add(warpBatteryTechType, warpBatteryData);

            CraftDataPatcher.customEquipmentTypes.Add(warpCannonTechType, EquipmentType.Hand);
            CraftDataPatcher.customItemSizes.Add(warpCannonTechType, new Vector2int(2, 2));
            CraftDataPatcher.customHarvestTypeList.Add(TechType.Warper, HarvestType.DamageAlive);
            CraftDataPatcher.customHarvestOutputList.Add(TechType.Warper, warpScalesTechType);

            CraftTreePatcher.customCraftNodes.Add("Personal/Tools/WarpCannon", warpCannonTechType);
            CraftTreePatcher.customCraftNodes.Add("Resources/Electronics/WarpBattery", warpBatteryTechType);

            // Load AssetBundle
            AssetBundle = AssetBundle.LoadFromFile(Path.Combine(pathToModsFolder, "warpcannon.assets"));
            if (AssetBundle == null)
            {
                Logger.Log("Assetbundle not found!");
                return;
            }

            // Load GameObjects

            // Load Battery
            var warpCannonBattery = AssetBundle.LoadAsset <GameObject>("WarpBattery") as GameObject;

            Utility.AddBasicComponents(ref warpCannonBattery, "WarpBattery");
            warpCannonBattery.AddComponent <Pickupable>();
            warpCannonBattery.AddComponent <Battery>();
            warpCannonBattery.AddComponent <TechTag>().type = warpBatteryTechType;

            CustomPrefabHandler.customPrefabs.Add(new CustomPrefab("WarpBattery", "WorldEntities/Tools/WarpBattery", warpCannonBattery, warpBatteryTechType));

            // Load Warp Cannon
            var warpCannon = AssetBundle.LoadAsset <GameObject>("WarpCannon");

            Utility.AddBasicComponents(ref warpCannon, WARP_CANNON_CLASS_ID);
            warpCannon.AddComponent <Pickupable>();
            warpCannon.AddComponent <TechTag>().type = warpCannonTechType;

            var fabricating = warpCannon.FindChild("3rd person model").AddComponent <VFXFabricating>();

            fabricating.localMinY   = -0.4f;
            fabricating.localMaxY   = 0.2f;
            fabricating.posOffset   = new Vector3(-0.054f, 0.223f, -0.06f);
            fabricating.eulerOffset = new Vector3(-44.86f, 90f, 0f);
            fabricating.scaleFactor = 1;

            var energyMixin = warpCannon.AddComponent <EnergyMixin>();

            energyMixin.defaultBattery      = warpBatteryTechType;
            energyMixin.storageRoot         = warpCannon.FindChild("3rd person model").AddComponent <ChildObjectIdentifier>();
            energyMixin.compatibleBatteries = new List <TechType> {
                warpBatteryTechType
            };
            energyMixin.allowBatteryReplacement = true;
            energyMixin.batteryModels           = (new List <EnergyMixin.BatteryModels>()
            {
                new EnergyMixin.BatteryModels()
                {
                    techType = warpBatteryTechType,
                    model = warpCannonBattery
                }
            }).ToArray();

            var warpCannonComponent = warpCannon.AddComponent <WarpCannon>();

            warpCannonComponent.Init();
            warpCannonComponent.mainCollider             = warpCannon.AddComponent <BoxCollider>();
            warpCannonComponent.ikAimRightArm            = true;
            warpCannonComponent.useLeftAimTargetOnPlayer = true;

            CustomPrefabHandler.customPrefabs.Add(new CustomPrefab(WARP_CANNON_CLASS_ID, "WorldEntities/Tools/WarpCannon", warpCannon, warpCannonTechType));

            // Load Sprites
            var warpCannonSprite  = AssetBundle.LoadAsset <Sprite>("Warp_Cannon");
            var warpScalesSprite  = AssetBundle.LoadAsset <Sprite>("Warp_Scale");
            var warpBatterySprite = AssetBundle.LoadAsset <Sprite>("Warp_Battery");

            CustomSpriteHandler.customSprites.Add(new CustomSprite(warpCannonTechType, warpCannonSprite));
            CustomSpriteHandler.customSprites.Add(new CustomSprite(warpScalesTechType, warpScalesSprite));
            CustomSpriteHandler.customSprites.Add(new CustomSprite(warpBatteryTechType, warpBatterySprite));
        }