15enum eCookingPropertyIndices
25 protected int m_SelectionIndex;
26 protected int m_TextureIndex;
27 protected int m_MaterialIndex;
31 protected float m_CookingTime;
39 static const string VISUAL_PROPERTIES =
"visual_properties";
40 static const string NUTRITION_PROPERTIES =
"nutrition_properties";
41 static const string COOKING_PROPERTIES =
"cooking_properties";
42 static const int VISUAL_PROPERTIES_HASH = VISUAL_PROPERTIES.
Hash();
43 static const int NUTRITION_PROPERTIES_HASH = NUTRITION_PROPERTIES.
Hash();
44 static const int COOKING_PROPERTIES_HASH = COOKING_PROPERTIES.
Hash();
46 static const int TRANSITION_FOODSTAGE_IDX = 0;
47 static const int TRANSITION_COOKINGMETHOD_IDX = 1;
50 private static int m_StageRawHash = 0;
51 private static int m_StageBakedHash = 0;
52 private static int m_StageBoiledHash = 0;
53 private static int m_StageDriedHash = 0;
54 private static int m_StageBurnedHash = 0;
55 private static int m_StageRottenHash = 0;
63 static ref array<int> m_FoodStageTransitionKeys;
70 m_FoodItem = food_item;
76 if ( m_StageRawHash == 0 )
77 m_StageRawHash =
"Raw".Hash();
78 if ( m_StageBakedHash == 0 )
79 m_StageBakedHash =
"Baked".Hash();
80 if ( m_StageBoiledHash == 0 )
81 m_StageBoiledHash =
"Boiled".Hash();
82 if ( m_StageDriedHash == 0 )
83 m_StageDriedHash =
"Dried".Hash();
84 if ( m_StageBurnedHash == 0 )
85 m_StageBurnedHash =
"Burned".Hash();
86 if ( m_StageRottenHash == 0 )
87 m_StageRottenHash =
"Rotten".Hash();
90 SetupFoodStageMapping();
93 SetupFoodStageTransitionMapping();
99 void SetupFoodStageMapping()
102 if ( !m_EdibleBasePropertiesMap )
105 string foodType = m_FoodItem.GetType();
106 int hashedFood = foodType.
Hash();
109 if ( !m_EdibleBasePropertiesMap.Contains( hashedFood ) )
118 array<float> visual_properties =
new array<float>;
122 stagePropertiesMap.Insert( VISUAL_PROPERTIES_HASH , visual_properties );
125 array<float> nutrition_properties =
new array<float>;
129 stagePropertiesMap.Insert( NUTRITION_PROPERTIES_HASH, nutrition_properties );
132 array<float> cooking_properties =
new array<float>;
136 stagePropertiesMap.Insert( COOKING_PROPERTIES_HASH , cooking_properties );
139 foodStagesMap.Insert( GetFoodStageNameHash( i ), stagePropertiesMap );
142 m_EdibleBasePropertiesMap.Insert( hashedFood, foodStagesMap );
146 void SetupFoodStageTransitionMapping()
149 if ( !m_EdibleBaseTransitionsMap )
153 if ( !m_FoodStageTransitionKeys )
154 m_FoodStageTransitionKeys =
new array<int>;
156 string foodType = m_FoodItem.GetType();
157 int hashedFood = foodType.
Hash();
160 if ( !m_EdibleBaseTransitionsMap.Contains( hashedFood ) )
167 string config_path =
string.Format(
"CfgVehicles %1 Food FoodStageTransitions %2", foodType,
GetFoodStageName( i ) );
171 array<int> stageTransition =
new array<int>;
175 string transition_path =
string.Format(
"%1 %2", config_path, classCheck );
176 if (
GetGame().ConfigIsExisting( transition_path ) )
178 int transitionClassHash = classCheck.
Hash();
179 stageTransition.Insert(
GetGame().ConfigGetInt(
string.Format(
"%1 transition_to", transition_path) ) );
180 stageTransition.Insert(
GetGame().ConfigGetInt(
string.Format(
"%1 cooking_method", transition_path) ) );
181 stageTransitionsMap.Insert( transitionClassHash, stageTransition);
184 if ( m_FoodStageTransitionKeys.Find( transitionClassHash ) == -1 )
186 m_FoodStageTransitionKeys.Insert( transitionClassHash );
191 foodStagesMap.Insert( GetFoodStageNameHash(i), stageTransitionsMap );
194 m_EdibleBaseTransitionsMap.Insert( hashedFood, foodStagesMap );
201 return m_FoodStageType;
207 m_FoodStageType = food_stage_type;
210 GetFoodItem().Synchronize();
214 int GetSelectionIndex()
216 return m_SelectionIndex;
218 void SetSelectionIndex(
int index )
220 m_SelectionIndex = index;
224 int GetTextureIndex()
226 return m_TextureIndex;
228 void SetTextureIndex(
int index )
230 m_TextureIndex = index;
234 int GetMaterialIndex()
236 return m_MaterialIndex;
238 void SetMaterialIndex(
int index )
240 m_MaterialIndex = index;
244 protected static float GetNutritionPropertyFromIndex(
int index,
FoodStageType stage_type, FoodStage stage,
string classname )
248 stage_type = stage.m_FoodStageType;
249 classname = stage.GetFoodItem().GetType();
253 int hashedStageName = GetFoodStageNameHash( stage_type );
255 array<float> nutrition_properties;
260 if( !m_EdibleBasePropertiesMap.Find(classname.
Hash(), foodStagesMap))
262 if( !foodStagesMap.Find(hashedStageName, stagePropertiesMap))
264 if( !stagePropertiesMap.Find(NUTRITION_PROPERTIES_HASH, nutrition_properties))
267 if ( nutrition_properties.Count() > 0 )
269 if ( index > (nutrition_properties.Count() - 1) )
275 return nutrition_properties.Get( index );
283 string config_path =
string.
Format(
"CfgVehicles %1 Food nutrition_modifiers_class", classname);
285 if (
GetGame().ConfigIsExisting( config_path ) )
287 string nutr_mod_class;
290 config_path =
string.
Format(
"CfgVehicles NutritionModifiers %1 base_stage", nutr_mod_class);
291 string nutr_base_stage;
295 config_path =
string.
Format(
"CfgVehicles %1 Food FoodStages %2 nutrition_properties", classname, nutr_base_stage);
296 array<float> base_nutr_properties =
new array<float>;
299 config_path =
string.
Format(
"CfgVehicles NutritionModifiers %1 %2 nutrition_properties", nutr_mod_class, food_stage_name);
300 array<float> nutr_mod_properties =
new array<float>;
304 if ( base_nutr_properties.Count() > 0 && nutr_mod_properties.Count() > 0 )
306 return ( base_nutr_properties.Get( index ) * nutr_mod_properties.Get( index ) );
314 static float GetFullnessIndex(FoodStage stage,
int stage_type = -1,
string classname =
"")
316 return GetNutritionPropertyFromIndex( 0 , stage_type, stage, classname );
319 static float GetEnergy(FoodStage stage,
int stage_type = -1,
string classname =
"")
321 return GetNutritionPropertyFromIndex( 1 , stage_type, stage, classname );
324 static float GetWater(FoodStage stage,
int stage_type = -1,
string classname =
"")
326 return GetNutritionPropertyFromIndex( 2 , stage_type, stage, classname );
329 static float GetNutritionalIndex(FoodStage stage,
int stage_type = -1,
string classname =
"")
331 return GetNutritionPropertyFromIndex( 3 , stage_type , stage, classname);
334 static float GetToxicity(FoodStage stage,
int stage_type = -1,
string classname =
"")
336 return GetNutritionPropertyFromIndex( 4 , stage_type, stage, classname );
339 static int GetAgents(FoodStage stage,
int stage_type = -1,
string classname =
"")
341 return GetNutritionPropertyFromIndex( 5 , stage_type, stage, classname );
344 static float GetDigestibility(FoodStage stage,
int stage_type = -1,
string classname =
"")
346 return GetNutritionPropertyFromIndex( 6 , stage_type, stage, classname );
349 static float GetAgentsPerDigest(FoodStage stage,
int stageType = -1,
string className =
"")
351 return GetNutritionPropertyFromIndex(7, stageType, stage, className);
363 return m_CookingTime;
367 m_CookingTime = time;
370 static float GetCookingPropertyFromIndex(
int index,
FoodStageType stage_type, FoodStage stage,
string classname )
374 stage_type = stage.m_FoodStageType;
375 classname = stage.GetFoodItem().GetType();
379 int hashedStageName = GetFoodStageNameHash( stage_type );
381 array<float> cooking_properties =
new array<float>;
386 m_EdibleBasePropertiesMap.Find(classname.
Hash(), foodStagesMap);
387 foodStagesMap.Find(hashedStageName, stagePropertiesMap);
389 stagePropertiesMap.Find(COOKING_PROPERTIES_HASH, cooking_properties);
391 if ( cooking_properties.Count() > 0 )
393 if ( index > (cooking_properties.Count() - 1) )
399 return cooking_properties.Get( index );
405 static array<float> GetAllCookingPropertiesForStage(
FoodStageType stage_type, FoodStage stage,
string classname )
409 stage_type = stage.m_FoodStageType;
410 classname = stage.GetFoodItem().GetType();
414 int hashedStageName = GetFoodStageNameHash( stage_type );
416 array<float> cooking_properties =
new array<float>;
421 m_EdibleBasePropertiesMap.Find(classname.
Hash(), foodStagesMap);
422 foodStagesMap.Find(hashedStageName, stagePropertiesMap);
424 stagePropertiesMap.Find(COOKING_PROPERTIES_HASH, cooking_properties);
426 if ( cooking_properties.Count() > 0 )
428 return cooking_properties;
450 array<int> food_transition =
new array<int>;
455 m_EdibleBaseTransitionsMap.Find(GetFoodItem().
GetType().Hash(), foodStagesMap);
456 foodStagesMap.Find( GetFoodStageNameHash(
GetFoodStageType() ), foodTransitionsMap );
459 int count = m_FoodStageTransitionKeys.Count();
460 for (
int i = 0; i < count; ++i)
463 foodTransitionsMap.Find(m_FoodStageTransitionKeys[i], food_transition);
467 if (food_transition[TRANSITION_COOKINGMETHOD_IDX] == cooking_method)
469 return food_transition[TRANSITION_FOODSTAGE_IDX];
479 array<int> food_transition =
new array<int>;
484 m_EdibleBaseTransitionsMap.Find(GetFoodItem().
GetType().Hash(), foodStagesMap);
485 foodStagesMap.Find(GetFoodStageNameHash(
GetFoodStageType()), foodTransitionsMap);
488 int count = m_FoodStageTransitionKeys.Count();
489 for (
int i = 0; i < count; ++i)
492 foodTransitionsMap.Find(m_FoodStageTransitionKeys[i], food_transition);
493 if (food_transition )
496 if (food_transition[0] == type)
508 SetFoodStageType(new_stage_type);
518 if (stageOld == stageNew)
526 if (forced || m_FoodStageTypeClientLast != m_FoodStageType)
531 array<float> visual_properties =
new array<float>;
533 m_EdibleBasePropertiesMap.Find(food_item.GetType().Hash(), foodStagesMap);
534 foodStagesMap.Find(GetFoodStageNameHash(
GetFoodStageType() ), stagePropertiesMap);
535 stagePropertiesMap.Find(VISUAL_PROPERTIES_HASH, visual_properties);
537 if (visual_properties.Count() > 0)
540 int index = visual_properties.Get( 0 );
543 SetSelectionIndex( index );
546 index = visual_properties.Get( 1 );
549 SetTextureIndex( index );
552 index = visual_properties.Get( 2 );
555 SetMaterialIndex( index );
559 array<string> config_selections = food_item.GetHiddenSelections();
560 array<string> config_textures = food_item.GetHiddenSelectionsTextures();
561 array<string> config_materials = food_item.GetHiddenSelectionsMaterials();
565 if ( GetSelectionIndex() >= 0 && config_selections.Count() > GetSelectionIndex() )
567 selection_index = GetSelectionIndex();
572 if ( GetTextureIndex() >= 0 && config_textures.Count() > GetTextureIndex() )
574 texture_index = GetTextureIndex();
579 if ( GetMaterialIndex() >= 0 && config_materials.Count() > GetMaterialIndex() )
581 material_index = GetMaterialIndex();
585 for (
int i = 0; i < config_selections.Count(); i++ )
587 if ( config_selections.Get( i ) != config_selections.Get( selection_index ) )
589 food_item.SetAnimationPhase( config_selections.Get( i ), 1 );
594 food_item.SetAnimationPhase( config_selections.Get( selection_index ), 0 );
596 food_item.SetObjectTexture( selection_index, config_textures.Get( texture_index ) );
598 food_item.SetObjectMaterial( selection_index, config_materials.Get( material_index ) );
600 m_FoodStageTypeClientLast = m_FoodStageType;
649 switch ( food_stage_type )
663 static int GetFoodStageNameHash(
FoodStageType food_stage_type )
665 switch ( food_stage_type )
675 return m_StageRawHash;
684 ctx.
Write( m_FoodStageType );
687 ctx.
Write( m_SelectionIndex );
690 ctx.
Write( m_TextureIndex );
693 ctx.
Write( m_MaterialIndex );
699 if ( !ctx.
Read( m_FoodStageType ) )
706 if ( !ctx.
Read( m_SelectionIndex ) )
708 m_SelectionIndex = 0;
713 if ( !ctx.
Read( m_TextureIndex ) )
720 if ( !ctx.
Read( m_MaterialIndex ) )
eBleedingSourceType GetType()
void OnFoodStageChange(FoodStageType stageOld, FoodStageType stageNew)
called on server
bool CanChangeToNewStage(CookingMethodType cooking_method)
FoodStageType GetNextFoodStageType(CookingMethodType cooking_method)
void ChangeFoodStage(FoodStageType new_food_stage_type)
void UpdateVisualsEx(bool forced=false)
string GetFoodStageName(FoodStageType food_stage_type)
void SetCookingTime(float time)
FoodStageType GetFoodStageType()
static float GetAgentsPerDigest(ItemBase item, string className="", int foodStage=0)
enum FoodStageType MIN_TEMP
enum FoodStageType COOK_TIME
static float GetToxicity(int liquid_type)
static float GetDigestibility(int liquid_type)
static float GetNutritionalIndex(int liquid_type)
void OnStoreSave(ParamsWriteContext ctx)
bool OnStoreLoad(ParamsReadContext ctx, int version)
proto bool ConfigGetChildName(string path, int index, out string name)
Get name of subclass in config class on path.
proto bool ConfigGetText(string path, out string value)
Get string value from config on path.
proto native int ConfigGetChildrenCount(string path)
Get count of subclasses in config class on path.
proto native void ConfigGetFloatArray(string path, out TFloatArray values)
Get array of floats from config on path.
void OnFoodStageChange(FoodStageType stageOld, FoodStageType stageNew)
called on server
proto bool Write(void value_out)
proto bool Read(void value_in)
Serializer ParamsReadContext
proto native CGame GetGame()
Serializer ParamsWriteContext
proto native int Hash()
Returns hash of string.
static proto string Format(string fmt, void param1=NULL, void param2=NULL, void param3=NULL, void param4=NULL, void param5=NULL, void param6=NULL, void param7=NULL, void param8=NULL, void param9=NULL)
Gets n-th character from string.