123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335 |
- class OvenIndoor extends FireplaceBase
- {
- protected float m_SmokePosX;
- protected float m_SmokePosY;
- protected float m_SmokePosZ;
- protected int m_FirePointIndex = 1; //limited to 1 decimal place (1-9)
-
- static const string OVENPOINT_ACTION_SELECTION = "oven_action";
- static const string OVENPOINT_FIRE_POSITION = "oven_point";
- static const string OVENPOINT_PLACE_ROT = "oven_rot";
- static const string OVENPOINT_SMOKE_POSITION = "oven_smoke";
-
- void OvenIndoor()
- {
- //Particles - default for FireplaceBase
- PARTICLE_FIRE_START = ParticleList.OVEN_FIRE_START;
- PARTICLE_SMALL_FIRE = ParticleList.OVEN_SMALL_FIRE;
- PARTICLE_NORMAL_FIRE = ParticleList.OVEN_NORMAL_FIRE;
- PARTICLE_SMALL_SMOKE = ParticleList.HOUSE_SMALL_SMOKE;
- PARTICLE_NORMAL_SMOKE = ParticleList.HOUSE_NORMAL_SMOKE;
- PARTICLE_FIRE_END = ParticleList.OVEN_FIRE_END;
- PARTICLE_STEAM_END = ParticleList.BARREL_FIRE_STEAM_2END;
-
- //register sync variables
- RegisterNetSyncVariableFloat( "m_SmokePosX", 0, 0, 2 );
- RegisterNetSyncVariableFloat( "m_SmokePosY", 0, 0, 2 );
- RegisterNetSyncVariableFloat( "m_SmokePosZ", 0, 0, 2 );
- RegisterNetSyncVariableInt( "m_FirePointIndex", 0, 9 );
-
- m_LightDistance = 50;
- SetRoofAbove(true);
-
- m_UTSSettings.m_EnableOnTemperatureControl = true;
- m_UTSSettings.m_ActiveTemperatureThreshold = 250.0;
- m_UTSSettings.m_InactiveTemperatureThreshold = 975.0;
- }
-
- //================================================================
- // ONSTORESAVE/LOAD/AFTERLOAD
- //================================================================
- override void OnStoreSave( ParamsWriteContext ctx )
- {
- super.OnStoreSave( ctx );
- //fire point name
- ctx.Write( m_FirePointIndex );
-
- //smoke position
- ctx.Write( m_SmokePosX );
- ctx.Write( m_SmokePosY );
- ctx.Write( m_SmokePosZ );
- }
- override bool OnStoreLoad( ParamsReadContext ctx, int version )
- {
- if ( !super.OnStoreLoad( ctx, version ) )
- return false;
- //--- Fireplace Indoor data ---
- //fire point name
- if ( !ctx.Read( m_FirePointIndex ) )
- {
- m_FirePointIndex = 1; //set default
- return false;
- }
-
- //smoke position
- if ( !ctx.Read( m_SmokePosX ) )
- {
- m_SmokePosX = 0; //set default
- return false;
- }
- if ( !ctx.Read( m_SmokePosY ) )
- {
- m_SmokePosY = 0; //set default
- return false;
- }
- if ( !ctx.Read( m_SmokePosZ ) )
- {
- m_SmokePosZ = 0; //set default
- return false;
- }
- //---
- return true;
- }
-
- //================================================================
- // FIRE POINT (HOUSE)
- // LIMITED TO 1 DECIMAL PLACE (0-9)
- //================================================================
- static int GetFirePointIndex( string action_selection )
- {
- int index_location = action_selection.Length() - 1;
- return action_selection.Substring( index_location, 1 ).ToInt();
- }
-
- void SetFirePointIndex( int fire_point_index )
- {
- m_FirePointIndex = fire_point_index;
- }
-
- static bool CanPlaceFireplaceInSelectedSpot( Object building, int fire_point_index, out vector fire_point_pos_world, out vector fire_point_rot_world )
- {
- //Get fire point index position
- vector fire_point_pos = building.GetSelectionPositionMS( OVENPOINT_FIRE_POSITION + fire_point_index.ToString() );
- vector fire_point_rot = building.GetSelectionPositionMS( OVENPOINT_PLACE_ROT + fire_point_index.ToString() );
- fire_point_pos_world = building.ModelToWorld( fire_point_pos );
- fire_point_rot_world = building.ModelToWorld( fire_point_rot );
-
- //check if there is any FireplaceIndoor objects near selected fire point
- ref array<Object> nearest_objects = new array<Object>;
- ref array<CargoBase> proxy_cargos = new array<CargoBase>;
- GetGame().GetObjectsAtPosition3D( fire_point_pos_world, 1, nearest_objects, proxy_cargos );
- for ( int i = 0; i < nearest_objects.Count(); ++i )
- {
- Object object = nearest_objects.Get( i );
-
- if ( object.IsInherited( OvenIndoor ) )
- {
- return false;
- }
- }
-
- return true;
- }
-
- void SetSmokePointPosition( vector smoke_point_pos )
- {
- m_SmokePosX = smoke_point_pos[0];
- m_SmokePosY = smoke_point_pos[1];
- m_SmokePosZ = smoke_point_pos[2];
- }
-
- //================================================================
- // PARTICLES
- //================================================================
- override protected vector GetSmokeEffectPosition()
- {
- return Vector( m_SmokePosX, m_SmokePosY, m_SmokePosZ );
- }
-
- //small smoke
- override void ParticleSmallSmokeStart()
- {
- PlayParticle( m_ParticleSmallSmoke, PARTICLE_SMALL_SMOKE, GetSmokeEffectPosition(), true );
- }
-
- //normal smoke
- override void ParticleNormalSmokeStart()
- {
- PlayParticle( m_ParticleNormalSmoke, PARTICLE_NORMAL_SMOKE, GetSmokeEffectPosition(), true );
- }
- //================================================================
- // STATE
- //================================================================
- override bool IsIndoorOven()
- {
- return true;
- }
- override bool CanReleaseAttachment(EntityAI attachment)
- {
- if (!super.CanReleaseAttachment(attachment))
- {
- return false;
- }
-
- ItemBase item = ItemBase.Cast(attachment);
- if (IsKindling(item) || IsFuel(item))
- {
- return !IsBurning();
- }
-
- return true;
- }
- override void EEItemAttached(EntityAI item, string slot_name)
- {
- super.EEItemAttached(item, slot_name);
-
- ItemBase item_base = ItemBase.Cast(item);
-
- if (IsKindling(item_base) || IsFuel(item_base))
- {
- AddToFireConsumables(item_base);
- }
-
- // direct cooking/smoking slots
- bool edible_base_attached = false;
- switch (slot_name)
- {
- case "DirectCookingA":
- m_DirectCookingSlots[0] = item_base;
- edible_base_attached = true;
- break;
- case "SmokingA":
- m_SmokingSlots[0] = item_base;
- edible_base_attached = true;
- break;
- case "SmokingB":
- m_SmokingSlots[1] = item_base;
- edible_base_attached = true;
- break;
- }
-
- RefreshFireplaceVisuals();
- }
- override void EEItemDetached(EntityAI item, string slot_name)
- {
- super.EEItemDetached(item, slot_name);
-
- ItemBase item_base = ItemBase.Cast(item);
-
- if (IsKindling(item_base) || IsFuel(item_base))
- {
- RemoveFromFireConsumables(GetFireConsumableByItem(item_base));
- }
-
- CheckForDestroy();
- // direct cooking/smoking slots
- switch (slot_name)
- {
- case "DirectCookingA":
- m_DirectCookingSlots[0] = null;
- break;
- case "SmokingA":
- m_SmokingSlots[0] = null;
- break;
- case "SmokingB":
- m_SmokingSlots[1] = null;
- break;
- }
- // cookware-specifics (remove audio visuals and clear references)
- if (item_base.IsCookware())
- {
- ClearCookingEquipment(item_base);
- item_base.RemoveAudioVisualsOnClient();
- }
-
- if (item_base.IsLiquidContainer()) //boiling bottle effects stop
- item_base.RemoveAudioVisualsOnClient();
-
- RefreshFireplaceVisuals();
- }
-
- //================================================================
- // CONDITIONS
- //================================================================
- //this into/outo parent.Cargo
- override bool CanPutInCargo( EntityAI parent )
- {
- return false;
- }
- override bool CanRemoveFromCargo( EntityAI parent )
- {
- return true;
- }
- //hands
- override bool CanPutIntoHands( EntityAI parent )
- {
- return false;
- }
-
- override bool CanRemoveFromHands( EntityAI parent )
- {
- return false;
- }
- // Item-to-item fire distribution
- override bool HasFlammableMaterial()
- {
- return true;
- }
-
- override bool CanBeIgnitedBy( EntityAI igniter = NULL )
- {
- if ( HasAnyKindling() && !GetHierarchyParent() )
- {
- return true;
- }
-
- return false;
- }
-
- override bool CanIgniteItem( EntityAI ignite_target = NULL )
- {
- if ( IsBurning() )
- {
- return true;
- }
-
- return false;
- }
-
- override bool IsIgnited()
- {
- return IsBurning();
- }
-
- override void OnIgnitedTarget( EntityAI target_item )
- {
- }
-
- override void OnIgnitedThis( EntityAI fire_source )
- {
- //start fire
- StartFire();
- }
-
- override bool IsThisIgnitionSuccessful( EntityAI item_source = NULL )
- {
- //check kindling
- if ( !HasAnyKindling() )
- {
- return false;
- }
-
- //check wetness
- if ( IsWet() )
- {
- return false;
- }
-
- return true;
- }
- }
|