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 ) )
119 string path =
string.Format(
"CfgVehicles %1 Food FoodStages %2 visual_properties", foodType,
GetFoodStageName(i));
120 GetGame().ConfigGetFloatArray(
path, visual_properties);
122 stagePropertiesMap.Insert( VISUAL_PROPERTIES_HASH , visual_properties );
126 path =
string.Format(
"CfgVehicles %1 Food FoodStages %2 nutrition_properties", foodType,
GetFoodStageName(i));
127 GetGame().ConfigGetFloatArray(
path, nutrition_properties);
129 stagePropertiesMap.Insert( NUTRITION_PROPERTIES_HASH, nutrition_properties );
133 path =
string.Format(
"CfgVehicles %1 Food FoodStages %2 cooking_properties", foodType,
GetFoodStageName(i));
134 GetGame().ConfigGetFloatArray(
path, cooking_properties);
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 )
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 ) );
169 for (
int j = 0; j <
GetGame().ConfigGetChildrenCount( config_path ); ++j )
173 GetGame().ConfigGetChildName( config_path, j, classCheck );
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 );
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;
288 GetGame().ConfigGetText( config_path, nutr_mod_class );
290 config_path =
string.Format(
"CfgVehicles NutritionModifiers %1 base_stage", nutr_mod_class);
291 string nutr_base_stage;
292 GetGame().ConfigGetText( config_path, nutr_base_stage );
295 config_path =
string.Format(
"CfgVehicles %1 Food FoodStages %2 nutrition_properties", classname, nutr_base_stage);
297 GetGame().ConfigGetFloatArray( config_path, base_nutr_properties );
299 config_path =
string.Format(
"CfgVehicles NutritionModifiers %1 %2 nutrition_properties", nutr_mod_class, food_stage_name);
301 GetGame().ConfigGetFloatArray( config_path, nutr_mod_properties );
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 );
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 );
409 stage_type = stage.m_FoodStageType;
410 classname = stage.GetFoodItem().GetType();
414 int hashedStageName = GetFoodStageNameHash( stage_type );
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;
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];
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)
524 void UpdateVisualsEx(
bool forced =
false)
526 if (forced || m_FoodStageTypeClientLast != m_FoodStageType)
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
Serialization general interface. Serializer API works with:
Result for an object found in CGame.IsBoxCollidingGeometryProxy.
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)
string GetFoodStageName(FoodStageType food_stage_type)
void SetCookingTime(float time)
FoodStageType GetFoodStageType()
enum FoodStageType MIN_TEMP
enum FoodStageType COOK_TIME
proto native CGame GetGame()
void OnStoreSave(ParamsWriteContext ctx)
bool OnStoreLoad(ParamsReadContext ctx, int version)