public static Material MatFrom(MaterialRequest req) { if (!UnityData.IsInMainThread) { Log.Error("Tried to get a material from a different thread.", false); return(null); } if (req.mainTex == null) { Log.Error("MatFrom with null sourceTex.", false); return(BaseContent.BadMat); } if (req.shader == null) { Log.Warning("Matfrom with null shader.", false); return(BaseContent.BadMat); } if (req.maskTex != null && !req.shader.SupportsMaskTex()) { Log.Error("MaterialRequest has maskTex but shader does not support it. req=" + req.ToString(), false); req.maskTex = null; } Material material; if (!MaterialPool.matDictionary.TryGetValue(req, out material)) { material = MaterialAllocator.Create(req.shader); material.name = req.shader.name + "_" + req.mainTex.name; material.mainTexture = req.mainTex; material.color = req.color; if (req.maskTex != null) { material.SetTexture(ShaderPropertyIDs.MaskTex, req.maskTex); material.SetColor(ShaderPropertyIDs.ColorTwo, req.colorTwo); } if (req.renderQueue != 0) { material.renderQueue = req.renderQueue; } if (!req.shaderParameters.NullOrEmpty <ShaderParameter>()) { for (int i = 0; i < req.shaderParameters.Count; i++) { req.shaderParameters[i].Apply(material); } } MaterialPool.matDictionary.Add(req, material); if (!MaterialPool.matDictionary.ContainsKey(req)) { Log.Error("MaterialRequest is not present in the dictionary even though we've just added it there. The equality operators are most likely defined incorrectly.", false); } if (req.shader == ShaderDatabase.CutoutPlant || req.shader == ShaderDatabase.TransparentPlant) { WindManager.Notify_PlantMaterialCreated(material); } } return(material); }
public static Material MatFrom(MaterialRequest req) { if (!UnityData.IsInMainThread) { Log.Error("Tried to get a material from a different thread."); return(null); } if (req.mainTex == null) { Log.Error("MatFrom with null sourceTex."); return(BaseContent.BadMat); } if (req.shader == null) { Log.Warning("Matfrom with null shader."); return(BaseContent.BadMat); } if (req.maskTex != null && !req.shader.SupportsMaskTex()) { Log.Error("MaterialRequest has maskTex but shader does not support it. req=" + req.ToString()); req.maskTex = null; } req.color = (Color32)req.color; req.colorTwo = (Color32)req.colorTwo; if (!matDictionary.TryGetValue(req, out var value)) { value = MaterialAllocator.Create(req.shader); value.name = req.shader.name + "_" + req.mainTex.name; value.mainTexture = req.mainTex; value.color = req.color; if (req.maskTex != null) { value.SetTexture(ShaderPropertyIDs.MaskTex, req.maskTex); value.SetColor(ShaderPropertyIDs.ColorTwo, req.colorTwo); } if (req.renderQueue != 0) { value.renderQueue = req.renderQueue; } if (!req.shaderParameters.NullOrEmpty()) { for (int i = 0; i < req.shaderParameters.Count; i++) { req.shaderParameters[i].Apply(value); } } matDictionary.Add(req, value); if (req.shader == ShaderDatabase.CutoutPlant || req.shader == ShaderDatabase.TransparentPlant) { WindManager.Notify_PlantMaterialCreated(value); } } return(value); }
public void ConstructComponents() { this.spawnedThings = new ThingOwner <Thing>(this); this.cellIndices = new CellIndices(this); this.listerThings = new ListerThings(ListerThingsUse.Global); this.listerBuildings = new ListerBuildings(); this.mapPawns = new MapPawns(this); this.dynamicDrawManager = new DynamicDrawManager(this); this.mapDrawer = new MapDrawer(this); this.tooltipGiverList = new TooltipGiverList(); this.pawnDestinationReservationManager = new PawnDestinationReservationManager(); this.reservationManager = new ReservationManager(this); this.physicalInteractionReservationManager = new PhysicalInteractionReservationManager(); this.designationManager = new DesignationManager(this); this.lordManager = new LordManager(this); this.debugDrawer = new DebugCellDrawer(); this.passingShipManager = new PassingShipManager(this); this.haulDestinationManager = new HaulDestinationManager(this); this.gameConditionManager = new GameConditionManager(this); this.weatherManager = new WeatherManager(this); this.zoneManager = new ZoneManager(this); this.resourceCounter = new ResourceCounter(this); this.mapTemperature = new MapTemperature(this); this.temperatureCache = new TemperatureCache(this); this.areaManager = new AreaManager(this); this.attackTargetsCache = new AttackTargetsCache(this); this.attackTargetReservationManager = new AttackTargetReservationManager(this); this.lordsStarter = new VoluntarilyJoinableLordsStarter(this); this.thingGrid = new ThingGrid(this); this.coverGrid = new CoverGrid(this); this.edificeGrid = new EdificeGrid(this); this.blueprintGrid = new BlueprintGrid(this); this.fogGrid = new FogGrid(this); this.glowGrid = new GlowGrid(this); this.regionGrid = new RegionGrid(this); this.terrainGrid = new TerrainGrid(this); this.pathGrid = new PathGrid(this); this.roofGrid = new RoofGrid(this); this.fertilityGrid = new FertilityGrid(this); this.snowGrid = new SnowGrid(this); this.deepResourceGrid = new DeepResourceGrid(this); this.exitMapGrid = new ExitMapGrid(this); this.linkGrid = new LinkGrid(this); this.glowFlooder = new GlowFlooder(this); this.powerNetManager = new PowerNetManager(this); this.powerNetGrid = new PowerNetGrid(this); this.regionMaker = new RegionMaker(this); this.pathFinder = new PathFinder(this); this.pawnPathPool = new PawnPathPool(this); this.regionAndRoomUpdater = new RegionAndRoomUpdater(this); this.regionLinkDatabase = new RegionLinkDatabase(); this.moteCounter = new MoteCounter(); this.gatherSpotLister = new GatherSpotLister(); this.windManager = new WindManager(this); this.listerBuildingsRepairable = new ListerBuildingsRepairable(); this.listerHaulables = new ListerHaulables(this); this.listerMergeables = new ListerMergeables(this); this.listerFilthInHomeArea = new ListerFilthInHomeArea(this); this.reachability = new Reachability(this); this.itemAvailability = new ItemAvailability(this); this.autoBuildRoofAreaSetter = new AutoBuildRoofAreaSetter(this); this.roofCollapseBufferResolver = new RoofCollapseBufferResolver(this); this.roofCollapseBuffer = new RoofCollapseBuffer(); this.wildAnimalSpawner = new WildAnimalSpawner(this); this.wildPlantSpawner = new WildPlantSpawner(this); this.steadyEnvironmentEffects = new SteadyEnvironmentEffects(this); this.skyManager = new SkyManager(this); this.overlayDrawer = new OverlayDrawer(); this.floodFiller = new FloodFiller(this); this.weatherDecider = new WeatherDecider(this); this.fireWatcher = new FireWatcher(this); this.dangerWatcher = new DangerWatcher(this); this.damageWatcher = new DamageWatcher(); this.strengthWatcher = new StrengthWatcher(this); this.wealthWatcher = new WealthWatcher(this); this.regionDirtyer = new RegionDirtyer(this); this.cellsInRandomOrder = new MapCellsInRandomOrder(this); this.rememberedCameraPos = new RememberedCameraPos(this); this.mineStrikeManager = new MineStrikeManager(); this.storyState = new StoryState(this); this.retainedCaravanData = new RetainedCaravanData(this); this.components.Clear(); this.FillComponents(); }