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 GetGame().ConfigGetTextRaw(
string.Format(
"%1 displayName",
path), m_LiquidDisplayName);
25 GetGame().FormatRawConfigStringKeys(m_LiquidDisplayName);
27 if (
GetGame().ConfigIsExisting(
string.Format(
"%1 liquidFreezeThreshold",
path)))
28 m_TemperatureLiquidFreezeThreshold =
GetGame().ConfigGetFloat(
string.Format(
"%1 liquidFreezeThreshold",
path));
29 if (
GetGame().ConfigIsExisting(
string.Format(
"%1 liquidThawThreshold",
path)))
30 m_TemperatureLiquidThawThreshold =
GetGame().ConfigGetFloat(
string.Format(
"%1 liquidThawThreshold",
path));
31 if (
GetGame().ConfigIsExisting(
string.Format(
"%1 liquidBoilingThreshold",
path)))
32 m_TemperatureLiquidBoilThreshold =
GetGame().ConfigGetFloat(
string.Format(
"%1 liquidBoilingThreshold",
path));
33 m_Flammability =
GetGame().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 GetGame().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 =
GetGame().ConfigGetInt(
string.Format(
"%1 type", liquid_full_path));
72 NutritionalProfile profile = SetUpNutritionalProfile(config_liquid_type, liquid_class_name);
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)
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 isContainerFull = container.IsFullQuantity();
240 if (isContainerFull && !ignore_fullness_check)
247 int containerMask = container.GetLiquidContainerMask();
248 if (containerMask == 0)
254 if ((liquid_type & containerMask) == 0)
260 float containerQuantity = container.GetQuantity();
262 int containerLiquidType = container.GetLiquidType();
264 if (containerQuantity > 0 && containerLiquidType != TranslateLiquidType(liquid_type))
276 static float GetLiquidTypeEnviroTemperature(
int liquidType)
284 private static string GetLiquidConfigProperty(
int liquid_type,
string property_name,
bool is_nutrition_property =
false)
286 string cfg_classname =
"cfgLiquidDefinitions";
287 string property_value =
"NULL_PROPERTY";
289 return property_value;
291 int cfg_item_count =
g_Game.ConfigGetChildrenCount(cfg_classname);
293 for (
int i = 0; i < cfg_item_count; i++)
295 string liquid_class_name;
296 GetGame().ConfigGetChildName(cfg_classname, i, liquid_class_name);
297 string liquid_full_path =
string.Format(
"%1 %2", cfg_classname, liquid_class_name);
298 int config_liquid_type =
GetGame().ConfigGetInt(
string.Format(
"%1 type", liquid_full_path));
300 if (config_liquid_type == liquid_type)
302 if (!is_nutrition_property)
304 GetGame().ConfigGetText(
string.Format(
"%1 %2", liquid_full_path, property_name), property_value);
305 return property_value;
309 GetGame().ConfigGetText(
string.Format(
"%1 Nutrition %2", liquid_full_path, property_name), property_value);
310 return property_value;
314 return property_value;
319 LiquidInfo info = m_LiquidInfosByType.Get(liquid_type);
320 if (info && info.m_NutriProfile)
321 return info.m_NutriProfile;
329 if (info && info.m_NutriProfile)
330 return info.m_NutriProfile;
335 static NutritionalProfile SetUpNutritionalProfile(
int liquid_type,
string liquid_class_name)
338 profile.m_Energy = Liquid.GetLiquidConfigProperty(liquid_type,
"energy",
true).ToFloat();
339 profile.m_NutritionalIndex = Liquid.GetLiquidConfigProperty(liquid_type,
"nutritionalIndex",
true).ToFloat();
340 profile.m_FullnessIndex = Liquid.GetLiquidConfigProperty(liquid_type,
"fullnessIndex",
true).ToFloat();
341 profile.m_WaterContent = Liquid.GetLiquidConfigProperty(liquid_type,
"water",
true).ToFloat();
342 profile.m_Toxicity = Liquid.GetLiquidConfigProperty(liquid_type,
"toxicity",
true).ToFloat();
343 profile.m_Agents = Liquid.GetLiquidConfigProperty(liquid_type,
"agents",
true).ToInt();
344 profile.m_Digestibility = Liquid.GetLiquidConfigProperty(liquid_type,
"digestibility",
true).ToFloat();
345 profile.m_AgentsPerDigest = Liquid.GetLiquidConfigProperty(liquid_type,
"agentsPerDigest",
true).ToFloat();
347 profile.MarkAsLiquid(liquid_type, liquid_class_name);
353 return m_LiquidInfosByType.Get(liquid_type).m_NutriProfile.GetAgents();
356 static int GetAgentsPerDigest(
int liquidType)
358 return m_LiquidInfosByType.Get(liquidType).m_NutriProfile.m_AgentsPerDigest;
361 static float GetToxicity(
int liquid_type)
363 return m_LiquidInfosByType.Get(liquid_type).m_NutriProfile.GetToxicity();
366 static float GetWaterContent(
int liquid_type)
368 return m_LiquidInfosByType.Get(liquid_type).m_NutriProfile.GetWaterContent();
373 return m_LiquidInfosByType.Get(liquid_type).m_NutriProfile.GetEnergy();
376 static float GetNutritionalIndex(
int liquid_type)
378 return m_LiquidInfosByType.Get(liquid_type).m_NutriProfile.GetNutritionalIndex();
381 static string GetDisplayName(
int liquid_type)
383 return m_LiquidInfosByType.Get(liquid_type).m_LiquidDisplayName;
386 static float GetFlammability(
int liquid_type)
388 return m_LiquidInfosByType.Get(liquid_type).m_Flammability;
391 static float GetFullness(
int liquid_type)
393 return m_LiquidInfosByType.Get(liquid_type).m_NutriProfile.GetFullnessIndex();
396 static float GetDigestibility(
int liquid_type)
398 return m_LiquidInfosByType.Get(liquid_type).m_NutriProfile.GetDigestibility();
401 static float GetFreezeThreshold(
int liquid_type)
403 return m_LiquidInfosByType.Get(liquid_type).m_TemperatureLiquidFreezeThreshold;
406 static float GetThawThreshold(
int liquid_type)
408 return m_LiquidInfosByType.Get(liquid_type).m_TemperatureLiquidThawThreshold;
411 static float GetBoilThreshold(
int liquid_type)
413 return m_LiquidInfosByType.Get(liquid_type).m_TemperatureLiquidBoilThreshold;
419 static string GetName(
int liquid_type)
421 return Liquid.GetLiquidConfigProperty(liquid_type,
"name");
#define LIQUID_RIVERWATER
#define LIQUID_FRESHWATER
#define LIQUID_STILLWATER
void Init(string className)
float GetLiquidTypeEnviroTemperature(int liquidType)
proto native CGame GetGame()
const int AGT_TRANSFER_COPY
const int AGT_WATER_HOT_SPRING
const int LIQUID_GROUP_DRINKWATER
class LiquidInfo m_AllLiquidsByType
class OptionSelectorMultistate extends OptionSelector class_name
PluginBase GetPlugin(typename plugin_type)