123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360 |
- enum eFertlityState
- {
- NONE = 0,
- FERTILIZED = 1
- //This will be used to set bit values (DO NOT ADD MORE VALUES)
- }
- enum eWateredState
- {
- DRY = 0,
- WET = 1
- //Used to improve readability of watered state changes
- }
- class Slot
- {
- static const int STATE_DIGGED = 1;
- static const int STATE_PLANTED = 2;
-
- private int m_WaterQuantity;
- static private int m_WaterNeeded = 190; // How much water is needed to water a plant from a bottle. Value is in mililitres
- static private int m_WaterMax = 200;
-
- float m_Fertility;
- float m_FertilizerUsage;
- float m_FertilizerQuantity;
- float m_FertilizerQuantityMax; // how much of a fertilizer can the slot contain
- int m_slotIndex;
- int m_slotId;
-
- string m_FertilizerType;
- int m_FertilityState = eFertlityState.NONE;
- int m_WateredState = eWateredState.DRY;
- string m_DiggedSlotComponent; // example: "Component02" for the 1st slot in GardenBase
- string m_PlantType;
- private ItemBase m_Seed;
- private GardenBase m_Garden;
-
- float m_HarvestingEfficiency;
-
- int m_State;
-
- private PlantBase m_Plant;
-
- void Slot( float base_fertility )
- {
- m_Seed = NULL;
- m_Plant = NULL;
- m_WaterQuantity = 0.0;
- Init( base_fertility );
- }
- void ~Slot()
- {
- if (m_Plant && GetGame()) // GetGame() returns NULL when the game is being quit!
- {
- GetGame().ObjectDelete( GetPlant() );
- }
- }
-
- int GetSlotIndex()
- {
- return m_slotIndex;
- }
-
- void SetSlotIndex(int index)
- {
- m_slotIndex = index;
- }
-
- int GetSlotId()
- {
- return m_slotId;
- }
- void SetSlotId(int id)
- {
- m_slotId = id;
- }
-
- void SetGarden(GardenBase garden)
- {
- m_Garden = garden;
- }
-
- GardenBase GetGarden()
- {
- return m_Garden;
- }
-
- void SetSeed(ItemBase seed)
- {
- m_Seed = seed;
- }
-
- PlantBase GetPlant()
- {
- return m_Plant;
- }
-
- void SetPlant(PlantBase plant)
- {
- m_Plant = plant;
-
- if (plant)
- {
- plant.SetSlot(this);
- }
- }
-
- //Used to force water level an go around sync issues
- void SetWater( int val )
- {
- val = Math.Clamp( val, 0, m_WaterMax );
- m_WaterQuantity = val;
- }
-
- ItemBase GetSeed()
- {
- return m_Seed;
- }
-
- bool HasSeed()
- {
- if (m_Seed)
- return true;
-
- return false;
- }
-
- void GiveWater( float consumed_quantity )
- {
- bool needed_water = NeedsWater();
- m_WaterQuantity += consumed_quantity;
-
- if (m_WaterQuantity >= GetWaterMax())
- m_WaterQuantity = GetWaterMax();
-
- if (m_WaterQuantity < 0)
- m_WaterQuantity = 0;
-
- if (!g_Game.IsServer())
- return;
-
- if (!GetPlant() && GetSeed() && !NeedsWater()) // if there is no seed then do not create plant. Plant will be created when the seed is inserted into watered slot.
- GetGarden().CreatePlant(this);
-
- if ( needed_water != NeedsWater() )
- {
- SetWateredState( eWateredState.WET );
- if ( m_Garden.GetSlotWateredState() != m_Garden.GetMaxWaterStateVal() )
- m_Garden.SlotWaterStateUpdate( this );
- }
- }
-
- bool NeedsWater()
- {
- if ( m_WaterQuantity < GetWaterUsage() )
- {
- return true;
- }
- else
- {
- return false;
- }
- }
-
- bool CanBeWatered()
- {
- if ( m_WaterQuantity < GetWaterMax() )
- {
- return true;
- }
- else
- {
- return false;
- }
- }
-
- float GetWater()
- {
- return m_WaterQuantity;
- }
-
- float GetFertility()
- {
- return m_Fertility;
- }
-
- float GetFertilityMax()
- {
- return m_FertilizerUsage;
- }
-
- void SetFertility(float fertility)
- {
- m_Fertility = fertility;
- }
-
- float GetFertilizerQuantity()
- {
- return m_FertilizerQuantity;
- }
- void SetFertilizerQuantity(float fertility)
- {
- m_FertilizerQuantity = fertility;
- }
-
- float GetFertilizerQuantityMax()
- {
- return m_FertilizerQuantityMax;
- }
-
- void SetFertilizerQuantityMax(float quantMax)
- {
- m_FertilizerQuantityMax = quantMax;
- }
-
-
- string GetFertilityType()
- {
- return m_FertilizerType;
- }
-
- void SetFertilityType(string type)
- {
- m_FertilizerType = type;
- }
-
- int GetFertilityState()
- {
- return m_FertilityState;
- }
-
- void SetFertilityState( int newState )
- {
- m_FertilityState = newState;
- }
-
- int GetWateredState()
- {
- return m_WateredState;
- }
-
- void SetWateredState( int newState )
- {
- m_WateredState = newState;
- if ( m_WateredState == eWateredState.WET )
- SetWater( GetWaterMax() );
- }
-
- float GetWaterUsage()
- {
- return m_WaterNeeded;
- }
-
- float GetWaterMax()
- {
- return m_WaterMax;
- }
-
- int GetState()
- {
- return m_State;
- }
-
- void SetState(int new_state)
- {
- m_State = new_state;
- }
-
- bool IsDigged()
- {
- if (m_State == STATE_DIGGED)
- {
- return true;
- }
-
- return false;
- }
- bool IsPlanted()
- {
- if (m_State == STATE_PLANTED)
- {
- return true;
- }
-
- return false;
- }
-
- void Init( float base_fertility )
- {
- m_Fertility = base_fertility;
- m_FertilizerUsage = 200;
- m_FertilizerQuantity = 0.0;
- m_FertilizerType = "";
- m_FertilityState = eFertlityState.NONE;
-
- m_WaterQuantity = 0;
- m_WateredState = eWateredState.DRY;
-
- m_HarvestingEfficiency = 1.0;
- //m_DiggedSlotComponent = "";
- m_State = STATE_DIGGED;
- m_Plant = NULL;
- }
- void SetSlotComponent(string component)
- {
- m_DiggedSlotComponent = component;
- }
- string GetSlotComponent()
- {
- return m_DiggedSlotComponent;
- }
-
- bool OnStoreLoadCustom( ParamsReadContext ctx, int version )
- {
- if ( version < 102 )
- {
- ctx.Read( m_Fertility );
- ctx.Read( m_FertilizerUsage );
- ctx.Read( m_FertilizerQuantity );
-
- if ( !ctx.Read( m_FertilizerType ) )
- m_FertilizerType = "";
-
- ctx.Read( m_HarvestingEfficiency );
- ctx.Read( m_State );
- }
-
- if ( version >= 102 )
- {
- ctx.Read( m_Fertility );
- ctx.Read( m_FertilizerUsage );
- ctx.Read( m_FertilizerQuantity );
- ctx.Read( m_HarvestingEfficiency );
- ctx.Read( m_State );
-
- if ( !ctx.Read( m_FertilizerType ) )
- {
- m_FertilizerType = "";
- }
- }
-
- return true;
- }
- void OnStoreSaveCustom( ParamsWriteContext ctx )
- {
- ctx.Write( m_Fertility );
- ctx.Write( m_FertilizerUsage );
- ctx.Write( m_FertilizerQuantity );
- ctx.Write( m_HarvestingEfficiency );
- ctx.Write( m_State );
- ctx.Write( m_FertilizerType );
- }
- }
|