protected bool IsNotFullWater(IBillGiver giver, DefExtension_WaterRecipe ext, List <ThingAmount> chosen) { if (ext == null) { return(true); } if (giver == null) { return(false); } var thing = giver as Thing; if (thing == null) { return(false); } switch (ext.recipeType) { case DefExtension_WaterRecipe.RecipeType.DrawFromTerrain: return(true); case DefExtension_WaterRecipe.RecipeType.DrawFromWaterPool: return(true); case DefExtension_WaterRecipe.RecipeType.DrawFromWaterNet: return(true); case DefExtension_WaterRecipe.RecipeType.PourWater: { var building = thing as Building_WaterNetWorkTable; if (building == null) { return(false); } var totalWaterVolume = 0f; foreach (var ta in chosen) { var sourceComp = ta.thing.TryGetComp <CompWaterSource>(); if (sourceComp != null) { totalWaterVolume += sourceComp.WaterVolume * ta.count; } } if (GetTotalAmountCanAccept(building) < totalWaterVolume) { return(false); } return(true); } default: Log.Error("recipeType is Undefined"); return(false); } }
protected static Job CreateNewJob(DefExtension_WaterRecipe ext) { if (ext == null) { return(new Job(JobDefOf.DoBill)); } switch (ext.recipeType) { case DefExtension_WaterRecipe.RecipeType.DrawFromTerrain: return(new Job(MizuDef.Job_DrawFromTerrain)); case DefExtension_WaterRecipe.RecipeType.DrawFromWaterPool: return(new Job(MizuDef.Job_DrawFromWaterPool)); case DefExtension_WaterRecipe.RecipeType.DrawFromWaterNet: return(new Job(MizuDef.Job_DrawFromWaterNet)); case DefExtension_WaterRecipe.RecipeType.PourWater: return(new Job(MizuDef.Job_PourWater)); default: Log.Error("recipeType is Undefined"); return(null); } }
protected bool IsFoundWater(IBillGiver giver, DefExtension_WaterRecipe ext, List <ThingAmount> chosen) { if (ext == null) { return(true); } if (giver == null) { return(false); } var thing = giver as Thing; if (thing == null) { return(false); } switch (ext.recipeType) { case DefExtension_WaterRecipe.RecipeType.DrawFromTerrain: { // 水質チェック return(ext.needWaterTerrainTypes != null && ext.needWaterTerrainTypes.Contains(thing.Map.terrainGrid.TerrainAt(thing.Position).GetWaterTerrainType())); } case DefExtension_WaterRecipe.RecipeType.DrawFromWaterPool: { var waterGrid = thing.Map.GetComponent <MapComponent_ShallowWaterGrid>(); var pool = waterGrid.GetPool(thing.Map.cellIndices.CellToIndex(thing.Position)); // 水質条件チェック if (!ext.needWaterTypes.Contains(pool.WaterType)) { return(false); } // 入力水道網の水の種類から水アイテムの種類を決定 var waterThingDef = MizuUtility.GetWaterThingDefFromWaterType(pool.WaterType); if (waterThingDef == null) { return(false); } // 水アイテムの水源情報を得る var compprop = waterThingDef.GetCompProperties <CompProperties_WaterSource>(); if (compprop == null) { return(false); } // 水量チェック if (pool.CurrentWaterVolume < compprop.waterVolume * ext.getItemCount) { return(false); } return(true); } case DefExtension_WaterRecipe.RecipeType.DrawFromWaterNet: { var workTable = giver as Building_WaterNetWorkTable; if (workTable == null || workTable.InputWaterNet == null) { return(false); } var targetWaterType = WaterType.NoWater; var targetWaterVolume = 0.0f; if (ext.canDrawFromFaucet) { // 蛇口から汲むレシピ targetWaterType = workTable.InputWaterNet.StoredWaterTypeForFaucet; targetWaterVolume = workTable.InputWaterNet.StoredWaterVolumeForFaucet; } else { // 自身から汲むレシピ(水箱など) targetWaterType = workTable.TankComp.StoredWaterType; targetWaterVolume = workTable.TankComp.StoredWaterVolume; } // 水質チェック if (!ext.needWaterTypes.Contains(targetWaterType)) { return(false); } // 入力水道網の水の種類から水アイテムの種類を決定 var waterThingDef = MizuUtility.GetWaterThingDefFromWaterType(targetWaterType); if (waterThingDef == null) { return(false); } // 水アイテムの水源情報を得る var compprop = waterThingDef.GetCompProperties <CompProperties_WaterSource>(); if (compprop == null) { return(false); } // 水量チェック if (targetWaterVolume < compprop.waterVolume * ext.getItemCount) { return(false); } return(true); } case DefExtension_WaterRecipe.RecipeType.PourWater: return(true); default: Log.Error("recipeType is Undefined"); return(false); } }