123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409 |
- 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
- }
- enum eGardenSlotState
- {
- STATE_DIGGED = 1,
- STATE_PLANTED = 2
- //Used to set bit values depending on seed plant state
- }
- class Slot
- {
- static const int FERTILIZER_USAGE = 200;
-
- 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;
- 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);
- plant.SetGarden(m_Garden);
- }
- }
-
- //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 )
- {
- m_WaterQuantity = Math.Clamp(m_WaterQuantity + consumed_quantity, 0.0, GetWaterMax());
- m_Garden.SetWaterQuantity(GetSlotIndex(), m_WaterQuantity);
-
- bool needsWater = NeedsWater();
- if (m_WateredState == eWateredState.DRY && !needsWater)
- {
- SetWateredState(eWateredState.WET);
- m_Garden.SlotWaterStateUpdate(this);
- }
- //! This is here in case we want to support dry out the slot in the future
- else if (m_WateredState == eWateredState.WET && needsWater)
- {
- SetWateredState(eWateredState.DRY);
- m_Garden.SlotWaterStateUpdate(this);
- }
- 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);
- }
-
- 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;
- m_Garden.SetFertilizerQuantity(GetSlotIndex(), Math.Ceil(m_FertilizerQuantity));
-
- if (m_FertilizerQuantityMax != 0 && m_FertilizerQuantity >= m_FertilizerQuantityMax)
- {
- SetFertilityState(eFertlityState.FERTILIZED);
- m_Garden.SlotFertilityStateUpdate(this);
- }
- }
-
- 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)
- {
- if (m_FertilityState == newState)
- return;
- m_FertilityState = newState;
- m_Garden.SlotFertilityStateUpdate(this);
- }
-
- int GetWateredState()
- {
- return m_WateredState;
- }
-
- void SetWateredState(int newState)
- {
- if (m_WateredState == newState)
- return;
-
- m_WateredState = newState;
- if (m_WateredState == eWateredState.WET)
- {
- SetWater(GetWaterMax());
- }
- else if (m_WateredState == eWateredState.DRY)
- {
- SetWater(0);
- }
-
- m_Garden.SlotWaterStateUpdate(this);
- }
-
- float GetWaterUsage()
- {
- return m_WaterNeeded;
- }
-
- float GetWaterMax()
- {
- return m_WaterMax;
- }
-
- int GetState()
- {
- return m_State;
- }
-
- void SetState(int new_state)
- {
- m_State = new_state;
- m_Garden.SetSlotState(GetSlotIndex(), new_state);
- }
-
- bool IsDigged()
- {
- if (m_State == eGardenSlotState.STATE_DIGGED)
- {
- return true;
- }
-
- return false;
- }
-
- bool IsPlanted()
- {
- if (m_State == eGardenSlotState.STATE_PLANTED)
- {
- return true;
- }
-
- return false;
- }
-
- void Init( float base_fertility )
- {
- m_Fertility = base_fertility;
- m_FertilizerUsage = FERTILIZER_USAGE;
- m_FertilizerQuantity = 0.0;
- m_FertilizerType = "";
- m_FertilityState = eFertlityState.NONE;
- m_WateredState = eWateredState.DRY;
- m_WaterQuantity = 0.0;
- m_HarvestingEfficiency = 1.0;
- m_State = eGardenSlotState.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 )
- {
- if(!ctx.Read( m_Fertility ))
- return false;
- if(!ctx.Read( m_FertilizerUsage ))
- return false;
-
- if(!ctx.Read( m_FertilizerQuantity ))
- return false;
-
- if(!ctx.Read( m_HarvestingEfficiency ))
- return false;
-
- if(!ctx.Read( m_State ))
- return false;
-
- if (!ctx.Read( m_FertilizerType ))
- {
- m_FertilizerType = "";
- }
- }
-
- if (version >= 142)
- {
- int wateredState;
- if(!ctx.Read( wateredState ))
- {
- return false;
- }
- else
- {
- SetWateredState(wateredState);
- }
- }
-
- 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 );
- ctx.Write( m_WateredState );
- }
- }
|