FryingPan.c
class FryingPan : Inventory_Base
{
// Cooking data
protected CookingMethodType m_CookingMethod;
protected bool m_CookingIsDone;
protected bool m_CookingIsEmpty;
protected bool m_CookingIsBurned;
// Particles
protected Particle m_ParticleCooking;
protected int m_ParticlePlaying = ParticleList.INVALID;
protected int PARTICLE_BAKING_START = ParticleList.COOKING_BAKING_START;
protected int PARTICLE_BAKING_DONE = ParticleList.COOKING_BAKING_DONE;
protected int PARTICLE_DRYING_START = ParticleList.COOKING_DRYING_START;
protected int PARTICLE_DRYING_DONE = ParticleList.COOKING_DRYING_DONE;
protected int PARTICLE_BURNING_DONE = ParticleList.COOKING_BURNING_DONE;
void FryingPan()
{
RegisterNetSyncVariableInt( "m_CookingMethod", CookingMethodType.NONE, CookingMethodType.COUNT );
RegisterNetSyncVariableBool( "m_CookingIsDone" );
RegisterNetSyncVariableBool( "m_CookingIsEmpty" );
RegisterNetSyncVariableBool( "m_CookingIsBurned" );
}
void ~FryingPan() {}
override bool IsContainer()
{
return true;
}
override bool IsCookware()
{
return true;
}
override bool CanHaveTemperature()
{
return true;
}
override float GetQuantityNormalizedScripted()
{
return 1.0;
}
override bool CanPutInCargo( EntityAI parent )
{
if ( !super.CanPutInCargo( parent ) )
return false;
if ( parent && IsCargoException4x3( parent ) )
return false;
//is 'parent' somewhere in cargo?
if (parent && !parent.GetInventory().AreChildrenAccessible())
return false;
return true;
}
override bool CanReceiveItemIntoCargo( EntityAI item )
{
if ( !super.CanReceiveItemIntoCargo( item ) )
return false;
if ( IsCargoException4x3( item ) )
return false;
//is 'this' somewhere in cargo?
if (!GetInventory().AreChildrenAccessible())
return false;
//can 'this' be attached to the item (->assumed smaller size than item)?
int slotId;
for (int i = 0; i < GetInventory().GetSlotIdCount(); i++)
{
slotId = GetInventory().GetSlotId(i);
if (item.GetInventory().HasAttachmentSlot(slotId))
{
//Print("CanReceiveItemIntoCargo | item " + item + " matches in slot name: " + InventorySlots.GetSlotName(slotId) + " of " + this);
return false;
}
}
return true;
}
override bool CanLoadItemIntoCargo( EntityAI item )
{
if ( !super.CanLoadItemIntoCargo( item ) )
return false;
if ( IsCargoException4x3( item ) )
return false;
//can 'this' be attached to the item (->assumed smaller size than item)?
int slotId;
for (int i = 0; i < GetInventory().GetSlotIdCount(); i++)
{
slotId = GetInventory().GetSlotId(i);
if (item.GetInventory().HasAttachmentSlot(slotId))
{
//Print("CanLoadItemIntoCargo | item " + item + " matches in slot name: " + InventorySlots.GetSlotName(slotId) + " of " + this);
return false;
}
}
return true;
}
override void SetActions()
{
super.SetActions();
AddAction(ActionCreateIndoorFireplace);
AddAction(ActionCreateIndoorOven);
AddAction(ActionAttach);
AddAction(ActionDetach);
}
override void EEDelete( EntityAI parent )
{
super.EEDelete( parent );
//remove audio visuals
RemoveAudioVisuals();
}
void Synchronize()
{
if ( g_Game && g_Game.IsServer() )
{
SetSynchDirty();
}
}
override void OnVariablesSynchronized()
{
super.OnVariablesSynchronized();
//refresh audio visuals
if ( m_CookingMethod != CookingMethodType.NONE )
{
RefreshAudioVisuals( m_CookingMethod, m_CookingIsDone, m_CookingIsEmpty, m_CookingIsBurned );
}
else
{
RemoveAudioVisuals();
}
}
override void RemoveAudioVisualsOnClient()
{
m_CookingMethod = CookingMethodType.NONE;
Synchronize();
}
override void RefreshAudioVisualsOnClient( CookingMethodType cooking_method, bool is_done, bool is_empty, bool is_burned )
{
m_CookingMethod = cooking_method;
m_CookingIsDone = is_done;
m_CookingIsEmpty = is_empty;
m_CookingIsBurned = is_burned;
Synchronize();
}
void RefreshAudioVisuals( CookingMethodType cooking_method, bool is_done, bool is_empty, bool is_burned )
{
int particleId;
//if at least one of the food items is burned
if (is_burned)
{
particleId = PARTICLE_BURNING_DONE;
}
//proper cooking methods
else
{
if (cooking_method == CookingMethodType.BAKING)
{
if (is_done)
particleId = PARTICLE_BAKING_DONE;
else
particleId = PARTICLE_BAKING_START;
}
else if (cooking_method == CookingMethodType.DRYING)
{
if (is_done)
particleId = PARTICLE_DRYING_DONE;
else
particleId = PARTICLE_DRYING_START;
}
}
ParticleCookingStart(particleId);
}
void RemoveAudioVisuals()
{
ParticleCookingStop();
}
void ParticleCookingStart( int particle_id )
{
if ( m_ParticlePlaying != particle_id )
{
//stop previous particles
ParticleCookingStop();
//create new
if ( g_Game && ( !g_Game.IsDedicatedServer() ) )
{
vector local_pos = MiscGameplayFunctions.GetSteamPosition( GetHierarchyParent() );
//TODO set steam position to pot (proxy) memory point (new hierarchy needed)
//m_ParticleCooking = Particle.Create( particle_id, this, local_pos );
m_ParticleCooking = ParticleManager.GetInstance().PlayInWorld( particle_id, local_pos );
m_ParticlePlaying = particle_id;
}
}
}
void ParticleCookingStop()
{
if ( m_ParticleCooking && g_Game && ( !g_Game.IsDedicatedServer() ) )
{
m_ParticleCooking.Stop();
m_ParticleCooking = NULL;
m_ParticlePlaying = ParticleList.INVALID;
}
}
/////////////////////////////////////////////////
// DEPRECATED STUFF
// Sounds
protected SoundOnVehicle m_SoundCooking; //! DEPRECATED
protected EffectSound m_SoundEffectCooking; //! DEPRECATED
protected string m_SoundPlaying = ""; //! DEPRECATED
const string SOUND_BAKING_START = "Baking_SoundSet"; //! DEPRECATED
const string SOUND_BAKING_DONE = "Baking_Done_SoundSet"; //! DEPRECATED
const string SOUND_DRYING_START = "Drying_SoundSet"; //! DEPRECATED
const string SOUND_DRYING_DONE = "Drying_Done_SoundSet"; //! DEPRECATED
const string SOUND_BURNING_DONE = "Food_Burning_SoundSet"; //! DEPRECATED
protected void SoundCookingStart(string sound_name); //! DEPRECATED
protected void SoundCookingStop(); //! DEPRECATED
}