public static void OnGameFinishLoad() { foreach (Mod m in mods) { Logger.Log("Game finished loading!"); m.OnGameFinishLoad(); } Initializer.Postpatch(); }
// 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); } }
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)); }