private static void PostProcess(ModComponent modComponent) { modComponent.gameObject.layer = vp_Layer.Gear; GearItem gearItem = modComponent.GetComponent <GearItem>(); gearItem.m_SkinnedMeshRenderers = ModUtils.NotNull <SkinnedMeshRenderer>(gearItem.m_SkinnedMeshRenderers); GameObject template = Resources.Load <GameObject>("GEAR_CoffeeCup"); MeshRenderer meshRenderer = template.GetComponentInChildren <MeshRenderer>(); foreach (var eachMeshRenderer in gearItem.m_MeshRenderers) { foreach (var eachMaterial in eachMeshRenderer.materials) { if (eachMaterial.shader.name == "Standard") { eachMaterial.shader = meshRenderer.material.shader; eachMaterial.shaderKeywords = meshRenderer.material.shaderKeywords; if (eachMaterial.GetTexture("_dmg_texture") is null) { eachMaterial.SetTexture("_dmg_texture", eachMaterial.GetTexture("_MainTex")); } } } } ConsoleWaitlist.MaybeRegisterConsoleGearName(modComponent.GetEffectiveConsoleName(), modComponent.name); UnityEngine.Object.DontDestroyOnLoad(modComponent.gameObject); }
internal static void MapBlueprint(ModBlueprint modBlueprint) { BlueprintItem bpItem = GameManager.GetBlueprints().AddComponent <BlueprintItem>(); if (bpItem == null) { throw new Exception("Error creating Blueprint"); } bpItem.m_DurationMinutes = modBlueprint.DurationMinutes; bpItem.m_CraftingAudio = modBlueprint.CraftingAudio; bpItem.m_RequiresForge = modBlueprint.RequiresForge; bpItem.m_RequiresWorkbench = modBlueprint.RequiresWorkbench; bpItem.m_RequiresLight = modBlueprint.RequiresLight; bpItem.m_Locked = modBlueprint.Locked; bpItem.m_CraftedResultCount = modBlueprint.CraftedResultCount; bpItem.m_CraftedResult = ModUtils.GetItem <GearItem>(modBlueprint.CraftedResult); if (!string.IsNullOrEmpty(modBlueprint.RequiredTool)) { bpItem.m_RequiredTool = ModUtils.GetItem <ToolsItem>(modBlueprint.RequiredTool); } bpItem.m_OptionalTools = ModUtils.NotNull(ModUtils.GetMatchingItems <ToolsItem>(modBlueprint.OptionalTools)); bpItem.m_RequiredGear = ModUtils.NotNull(ModUtils.GetMatchingItems <GearItem>(modBlueprint.RequiredGear)); bpItem.m_RequiredGearUnits = modBlueprint.RequiredGearUnits; }
private static void PostProcess(ModComponent modComponent) { modComponent.gameObject.layer = vp_Layer.Gear; GearItem gearItem = modComponent.GetComponent <GearItem>(); gearItem.m_SkinnedMeshRenderers = ModUtils.NotNull(gearItem.m_SkinnedMeshRenderers); GameObject template = Resources.Load <GameObject>("GEAR_CoffeeCup"); MeshRenderer meshRenderer = template.GetComponentInChildren <MeshRenderer>(); foreach (var eachMeshRenderer in gearItem.m_MeshRenderers) { foreach (var eachMaterial in eachMeshRenderer.materials) { if (eachMaterial.shader.name == "Standard") { Debug.Log("Updating shader of " + modComponent.name); eachMaterial.shader = meshRenderer.material.shader; eachMaterial.shaderKeywords = meshRenderer.material.shaderKeywords; } } } ModUtils.RegisterConsoleGearName(modComponent.GetEffectiveConsoleName(), modComponent.name); if (modComponent.Radial != Radial.None) { RadialConfigurator.RegisterGear(modComponent.Radial, modComponent.name); } UnityEngine.Object.DontDestroyOnLoad(modComponent.gameObject); }
internal static T[] GetMatchingItems <T>(string[] names, string reference = null) { names = ModUtils.NotNull(names); List <T> values = new List <T>(); for (int i = 0; i < names.Length; i++) { var matchingItem = GetMatchingItem <T>(names[i], reference); if (matchingItem != null) { values.Add(matchingItem); } } return(values.ToArray()); }
private static void ConfigureFood(ModComponent modComponent) { ModFoodComponent modFoodComponent = modComponent as ModFoodComponent; if (modFoodComponent == null) { return; } FoodItem foodItem = ModUtils.GetOrCreateComponent <FoodItem>(modFoodComponent); foodItem.m_CaloriesTotal = modFoodComponent.Calories; foodItem.m_CaloriesRemaining = modFoodComponent.Calories; foodItem.m_ReduceThirst = modFoodComponent.ThirstEffect; foodItem.m_ChanceFoodPoisoning = Mathf.Clamp01(modFoodComponent.FoodPoisoning / 100f); foodItem.m_ChanceFoodPoisoningLowCondition = Mathf.Clamp01(modFoodComponent.FoodPoisoningLowCondition / 100f); foodItem.m_DailyHPDecayInside = GetDecayPerStep(modFoodComponent.DaysToDecayIndoors, modFoodComponent.MaxHP); foodItem.m_DailyHPDecayOutside = GetDecayPerStep(modFoodComponent.DaysToDecayOutdoors, modFoodComponent.MaxHP); foodItem.m_TimeToEatSeconds = Mathf.Clamp(1, modFoodComponent.EatingTime, 10); foodItem.m_EatingAudio = modFoodComponent.EatingAudio; foodItem.m_OpenAndEatingAudio = modFoodComponent.EatingPackagedAudio; foodItem.m_Packaged = !string.IsNullOrEmpty(foodItem.m_OpenAndEatingAudio); foodItem.m_IsDrink = modFoodComponent.Drink; foodItem.m_IsFish = modFoodComponent.Fish; foodItem.m_IsMeat = modFoodComponent.Meat; foodItem.m_IsRawMeat = modFoodComponent.Raw; foodItem.m_IsNatural = modFoodComponent.Natural; foodItem.m_ParasiteRiskPercentIncrease = ModUtils.NotNull(modFoodComponent.ParasiteRiskIncrements); foodItem.m_PercentHeatLossPerMinuteIndoors = 1; foodItem.m_PercentHeatLossPerMinuteOutdoors = 2; if (modFoodComponent.Opening) { foodItem.m_GearRequiredToOpen = true; foodItem.m_OpenedWithCanOpener = modFoodComponent.OpeningWithCanOpener; foodItem.m_OpenedWithHatchet = modFoodComponent.OpeningWithHatchet; foodItem.m_OpenedWithKnife = modFoodComponent.OpeningWithKnife; if (modFoodComponent.OpeningWithSmashing) { SmashableItem smashableItem = ModUtils.GetOrCreateComponent <SmashableItem>(modFoodComponent); smashableItem.m_MinPercentLoss = 10; smashableItem.m_MaxPercentLoss = 30; smashableItem.m_TimeToSmash = 6; smashableItem.m_SmashAudio = "Play_EatingSmashCan"; } if (modFoodComponent.Canned) { foodItem.m_GearPrefabHarvestAfterFinishEatingNormal = Resources.Load <GameObject>("GEAR_RecycledCan"); } } if (modFoodComponent.AffectRest) { FatigueBuff fatigueBuff = ModUtils.GetOrCreateComponent <FatigueBuff>(modFoodComponent); fatigueBuff.m_InitialPercentDecrease = modFoodComponent.InstantRestChange; fatigueBuff.m_RateOfIncreaseScale = modFoodComponent.RestFactor; fatigueBuff.m_DurationHours = modFoodComponent.RestFactorMinutes / 60f; } if (modFoodComponent.AffectCold) { FreezingBuff freezingBuff = ModUtils.GetOrCreateComponent <FreezingBuff>(modFoodComponent); freezingBuff.m_InitialPercentDecrease = modFoodComponent.InstantColdChange; freezingBuff.m_RateOfIncreaseScale = modFoodComponent.ColdFactor; freezingBuff.m_DurationHours = modFoodComponent.ColdFactorMinutes / 60f; } if (modFoodComponent.AffectCondition) { ConditionRestBuff conditionRestBuff = ModUtils.GetOrCreateComponent <ConditionRestBuff>(modFoodComponent); conditionRestBuff.m_ConditionRestBonus = modFoodComponent.ConditionRestBonus; conditionRestBuff.m_NumHoursRestAffected = modFoodComponent.ConditionRestMinutes / 60f; } if (modFoodComponent.ContainsAlcohol) { AlcoholComponent alcohol = ModUtils.GetOrCreateComponent <AlcoholComponent>(modFoodComponent); alcohol.AmountTotal = modFoodComponent.WeightKG * modFoodComponent.AlcoholPercentage * 0.01f; alcohol.AmountRemaining = alcohol.AmountTotal; alcohol.UptakeSeconds = modFoodComponent.AlcoholUptakeMinutes * 60; } HoverIconsToShow hoverIconsToShow = ModUtils.GetOrCreateComponent <HoverIconsToShow>(modFoodComponent); hoverIconsToShow.m_HoverIcons = new HoverIconsToShow.HoverIcons[] { HoverIconsToShow.HoverIcons.Food }; }