4 string m_LiquidClassName;
5 string m_LiquidDisplayName;
7 float m_TemperatureLiquidFreezeThreshold =
float.LOWEST;
8 float m_TemperatureLiquidThawThreshold =
float.LOWEST;
9 float m_TemperatureLiquidBoilThreshold = Cooking.LIQUID_BOILING_POINT;
16 m_NutriProfile = profile;
20 protected void Init(
string className)
22 string path =
"cfgLiquidDefinitions " + className;
23 m_LiquidClassName = className;
24 g_Game.ConfigGetTextRaw(
string.Format(
"%1 displayName",
path), m_LiquidDisplayName);
25 g_Game.FormatRawConfigStringKeys(m_LiquidDisplayName);
26 m_LiquidType =
g_Game.ConfigGetInt(
string.Format(
"%1 type",
path));
27 if (
g_Game.ConfigIsExisting(
string.Format(
"%1 liquidFreezeThreshold",
path)))
28 m_TemperatureLiquidFreezeThreshold =
g_Game.ConfigGetFloat(
string.Format(
"%1 liquidFreezeThreshold",
path));
29 if (
g_Game.ConfigIsExisting(
string.Format(
"%1 liquidThawThreshold",
path)))
30 m_TemperatureLiquidThawThreshold =
g_Game.ConfigGetFloat(
string.Format(
"%1 liquidThawThreshold",
path));
31 if (
g_Game.ConfigIsExisting(
string.Format(
"%1 liquidBoilingThreshold",
path)))
32 m_TemperatureLiquidBoilThreshold =
g_Game.ConfigGetFloat(
string.Format(
"%1 liquidBoilingThreshold",
path));
33 m_Flammability =
g_Game.ConfigGetFloat(
string.Format(
"%1 flammability",
path));
43 static bool m_Init = InitAllLiquids();
45 static string GetLiquidClassname(
int liquid_type)
47 LiquidInfo info = m_LiquidInfosByType.Get(liquid_type);
50 return info.m_LiquidClassName;
56 static bool InitAllLiquids()
61 string cfg_classname =
"cfgLiquidDefinitions";
62 string property_value =
"NULL_PROPERTY";
63 int cfg_item_count =
g_Game.ConfigGetChildrenCount(cfg_classname);
65 for (
int i = 0; i < cfg_item_count; i++)
67 string liquid_class_name;
68 g_Game.ConfigGetChildName(cfg_classname, i, liquid_class_name);
69 string liquid_full_path =
string.Format(
"%1 %2",cfg_classname, liquid_class_name);
70 int config_liquid_type =
g_Game.ConfigGetInt(
string.Format(
"%1 type", liquid_full_path));
72 NutritionalProfile profile = SetUpNutritionalProfile(config_liquid_type, liquid_class_name);
73 LiquidInfo info =
new LiquidInfo(liquid_class_name, profile);
74 m_LiquidInfosByType.Insert(config_liquid_type, info);
75 m_LiquidInfosByName.Insert(liquid_class_name, info);
79 m_AllLiquidsByName.Insert(liquid_class_name, profile);
85 static void Transfer(
ItemBase source_ent,
ItemBase target_ent,
float quantity = -1)
87 if (!Liquid.CanTransfer(source_ent, target_ent))
90 float source_quantity = source_ent.GetQuantity();
91 float target_quantity = target_ent.GetQuantity();
92 float targetCfgWeight = target_ent.m_ConfigWeight;
93 int source_liquid_type = source_ent.GetLiquidType();
95 float available_capacity = target_ent.GetQuantityMax() - target_quantity;
96 float quantity_to_transfer;
100 quantity_to_transfer = Math.Clamp(source_quantity,0,available_capacity);
105 quantity_to_transfer = Math.Clamp(Math.Min(source_quantity,quantity),0,available_capacity);
108 PluginTransmissionAgents m_mta = PluginTransmissionAgents.Cast(
GetPlugin(PluginTransmissionAgents));
111 source_ent.AddQuantity(-quantity_to_transfer);
113 float retultTemp = (source_ent.GetTemperature() * quantity_to_transfer + target_ent.GetTemperature() * (targetCfgWeight + target_quantity)) / (targetCfgWeight + target_quantity + quantity_to_transfer);
114 target_ent.SetTemperature(retultTemp);
116 AffectContainerOnTransfer(target_ent,source_liquid_type,quantity_to_transfer,source_ent.GetTemperature());
118 Liquid.FillContainer(target_ent,source_liquid_type,quantity_to_transfer);
123 if (!source_ent || !target_ent)
126 Barrel_ColorBase barrelTarget = Barrel_ColorBase.Cast(target_ent);
127 Barrel_ColorBase barrelSource = Barrel_ColorBase.Cast(source_ent);
128 if ((barrelTarget && !barrelTarget.
IsOpen()) || (barrelSource && !barrelSource.
IsOpen()))
133 if (source_ent.GetIsFrozen())
138 float source_quantity = source_ent.GetQuantity();
139 if (source_quantity <= 0)
145 int source_liquid_type = source_ent.GetLiquidType();
146 if (source_liquid_type < 1)
152 if (!CanFillContainer(target_ent,source_liquid_type))
160 static void FillContainer(
ItemBase container,
int liquid_type,
float amount)
162 if (!CanFillContainer(container,liquid_type))
167 container.SetLiquidType(liquid_type);
168 container.AddQuantity(amount);
172 static void FillContainerEnviro(
ItemBase container,
int liquid_type,
float amount,
bool inject_agents =
true)
174 float containerCfgWeight = container.m_ConfigWeight;
175 float retultTemp = (GetLiquidTypeEnviroTemperature(liquid_type) * amount + container.GetTemperature() * (containerCfgWeight + container.GetQuantity())) / (container.GetQuantity() + containerCfgWeight + amount);
176 container.SetTemperature(retultTemp);
177 AffectContainerOnFill(container,liquid_type,amount);
179 FillContainer(container, TranslateLiquidType(liquid_type), amount);
183 PluginTransmissionAgents plugin = PluginTransmissionAgents.Cast(
GetPlugin(PluginTransmissionAgents));
203 plugin.TransmitAgents(NULL, container, agtSource, amount);
208 static void AffectContainerOnFill(
ItemBase container,
int liquid_type,
float amount)
210 container.AffectLiquidContainerOnFill(liquid_type,amount);
213 static void AffectContainerOnTransfer(
ItemBase container,
int liquidType,
float amount,
float sourceLiquidTransfer)
215 container.AffectLiquidContainerOnTransfer(liquidType,amount,sourceLiquidTransfer);
218 static bool IsLiquidDrinkWater(
int liquidType)
226 static int TranslateLiquidType(
int liquidType)
228 if (IsLiquidDrinkWater(liquidType))
234 static bool CanFillContainer(
ItemBase container,
int liquid_type,
bool ignore_fullness_check =
false)
239 bool is_container_full = container.IsFullQuantity();
241 if (is_container_full && !ignore_fullness_check)
247 int container_mask = container.GetLiquidContainerMask();
249 if (container_mask == 0)
255 if ((liquid_type & container_mask) == 0)
261 float container_quantity = container.GetQuantity();
263 int container_liquid_type = container.GetLiquidType();
265 if (container_quantity > 0 && container_liquid_type != liquid_type)
277 static float GetLiquidTypeEnviroTemperature(
int liquidType)
279 float ret =
g_Game.GetMission().GetWorldData().GetLiquidTypeEnviroTemperature(liquidType);
285 private static string GetLiquidConfigProperty(
int liquid_type,
string property_name,
bool is_nutrition_property =
false)
287 string cfg_classname =
"cfgLiquidDefinitions";
288 string property_value =
"NULL_PROPERTY";
290 return property_value;
292 int cfg_item_count =
g_Game.ConfigGetChildrenCount(cfg_classname);
294 for (
int i = 0; i < cfg_item_count; i++)
296 string liquid_class_name;
297 g_Game.ConfigGetChildName(cfg_classname, i, liquid_class_name);
298 string liquid_full_path =
string.Format(
"%1 %2", cfg_classname, liquid_class_name);
299 int config_liquid_type =
g_Game.ConfigGetInt(
string.Format(
"%1 type", liquid_full_path));
301 if (config_liquid_type == liquid_type)
303 if (!is_nutrition_property)
305 g_Game.ConfigGetText(
string.Format(
"%1 %2", liquid_full_path, property_name), property_value);
306 return property_value;
310 g_Game.ConfigGetText(
string.Format(
"%1 Nutrition %2", liquid_full_path, property_name), property_value);
311 return property_value;
315 return property_value;
318 static NutritionalProfile GetNutritionalProfileByType(
int liquid_type)
320 LiquidInfo info = m_LiquidInfosByType.Get(liquid_type);
321 if (info && info.m_NutriProfile)
322 return info.m_NutriProfile;
327 static NutritionalProfile GetNutritionalProfileByName(
string class_name)
329 LiquidInfo info = m_LiquidInfosByName.Get(
class_name);
330 if (info && info.m_NutriProfile)
331 return info.m_NutriProfile;
336 static NutritionalProfile SetUpNutritionalProfile(
int liquid_type,
string liquid_class_name)
338 NutritionalProfile profile =
new NutritionalProfile();
339 profile.m_Energy = Liquid.GetLiquidConfigProperty(liquid_type,
"energy",
true).ToFloat();
340 profile.m_NutritionalIndex = Liquid.GetLiquidConfigProperty(liquid_type,
"nutritionalIndex",
true).ToFloat();
341 profile.m_FullnessIndex = Liquid.GetLiquidConfigProperty(liquid_type,
"fullnessIndex",
true).ToFloat();
342 profile.m_WaterContent = Liquid.GetLiquidConfigProperty(liquid_type,
"water",
true).ToFloat();
343 profile.m_Toxicity = Liquid.GetLiquidConfigProperty(liquid_type,
"toxicity",
true).ToFloat();
344 profile.m_Agents = Liquid.GetLiquidConfigProperty(liquid_type,
"agents",
true).ToInt();
345 profile.m_Digestibility = Liquid.GetLiquidConfigProperty(liquid_type,
"digestibility",
true).ToFloat();
346 profile.m_AgentsPerDigest = Liquid.GetLiquidConfigProperty(liquid_type,
"agentsPerDigest",
true).ToFloat();
348 profile.MarkAsLiquid(liquid_type, liquid_class_name);
354 return m_LiquidInfosByType.Get(liquid_type).m_NutriProfile.GetAgents();
357 static int GetAgentsPerDigest(
int liquidType)
359 return m_LiquidInfosByType.Get(liquidType).m_NutriProfile.m_AgentsPerDigest;
362 static float GetToxicity(
int liquid_type)
364 return m_LiquidInfosByType.Get(liquid_type).m_NutriProfile.GetToxicity();
367 static float GetWaterContent(
int liquid_type)
369 return m_LiquidInfosByType.Get(liquid_type).m_NutriProfile.GetWaterContent();
374 return m_LiquidInfosByType.Get(liquid_type).m_NutriProfile.GetEnergy();
377 static float GetNutritionalIndex(
int liquid_type)
379 return m_LiquidInfosByType.Get(liquid_type).m_NutriProfile.GetNutritionalIndex();
382 static string GetDisplayName(
int liquid_type)
384 return m_LiquidInfosByType.Get(liquid_type).m_LiquidDisplayName;
387 static float GetFlammability(
int liquid_type)
389 return m_LiquidInfosByType.Get(liquid_type).m_Flammability;
392 static float GetFullness(
int liquid_type)
394 return m_LiquidInfosByType.Get(liquid_type).m_NutriProfile.GetFullnessIndex();
397 static float GetDigestibility(
int liquid_type)
399 return m_LiquidInfosByType.Get(liquid_type).m_NutriProfile.GetDigestibility();
402 static float GetFreezeThreshold(
int liquid_type)
404 return m_LiquidInfosByType.Get(liquid_type).m_TemperatureLiquidFreezeThreshold;
407 static float GetThawThreshold(
int liquid_type)
409 return m_LiquidInfosByType.Get(liquid_type).m_TemperatureLiquidThawThreshold;
412 static float GetBoilThreshold(
int liquid_type)
414 return m_LiquidInfosByType.Get(liquid_type).m_TemperatureLiquidBoilThreshold;
420 static string GetName(
int liquid_type)
422 return Liquid.GetLiquidConfigProperty(liquid_type,
"name");
#define LIQUID_RIVERWATER
#define LIQUID_FRESHWATER
#define LIQUID_STILLWATER
void Init(string className)
class GP5GasMask extends MaskBase ItemBase
const int AGT_TRANSFER_COPY
const int AGT_WATER_HOT_SPRING
const int LIQUID_GROUP_DRINKWATER
proto string GetName()
Suite class name getter. Strictly for UI porposes!
class LiquidInfo m_AllLiquidsByType
class OptionSelectorMultistate extends OptionSelector class_name
PluginBase GetPlugin(typename plugin_type)