123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203 |
- class PlayerStatBase
- {
- protected Man m_Player;
- int m_Type;
- void OnStoreSave( ParamsWriteContext ctx );
- bool OnStoreLoad( ParamsReadContext ctx);
- void OnRPC(ParamsReadContext ctx);
- void OnAfterStoreLoad();
- float Get();
- string GetLabel();
- void SetByFloat(float value);
- void SetByFloatEx(float value, string system = "" );
- bool IsSynced();
- array<PlayerStatRecord> GetRecords();
- void Init(int id);
- void SerializeValue(array<ref StatDebugObject> objects, int flags);
- float GetNormalized();
- float GetMax();
- float GetMin();
- int GetType()
- {
- return m_Type;
- }
- void SetPlayer(Man player)
- {
- m_Player = player;
- }
- }
- class PlayerStat<Class T> extends PlayerStatBase
- {
- protected T m_MinValue;
- protected T m_MaxValue;
- protected T m_Value;
- protected T m_ValueLastSynced;
- protected string m_ValueLabel;
- protected int m_Flags;
-
- ref array<PlayerStatRecord> m_Records;
- void PlayerStat(T min, T max, T init, string label, int flags)
- {
- m_MinValue = min;
- m_MaxValue = max;
- m_Value = init;
- m_ValueLabel = label;
- m_Flags = flags;
-
- m_Records = new array<PlayerStatRecord>;
- }
-
- override void Init(int id)
- {
- m_Type = id;
- }
-
- override void SerializeValue(array<ref StatDebugObject> objects, int flags)
- {
- objects.Insert(new StatDebugObject(GetLabel(), Get(), eRemoteStatType.PLAYER_STATS));
- }
-
- override bool IsSynced()
- {
- return m_Flags & EPSstatsFlags.SYNCED == EPSstatsFlags.SYNCED;
- }
-
- override void OnRPC(ParamsReadContext ctx)
- {
- if (IsSynced())
- {
- Param2<int, T> data;
- if (ctx.Read(data))
- {
- int type = data.param1;
- T value = data.param2;
- if (m_Type == type)
- Set(value);
- }
- }
- }
-
- void Set(T value, string system = "")
- {
- if (value > m_MaxValue)
- {
- m_Value = m_MaxValue;
- }
- else if (value < m_MinValue)
- {
- m_Value = m_MinValue;
- }
- else
- {
- m_Value = value;
- }
-
- #ifdef SERVER
- if (IsSynced())
- {
- if (m_ValueLastSynced != m_Value)
- {
- //! limits the sync for bigger changes of float stats
- if (T == float && Math.AbsFloat(m_ValueLastSynced - m_Value) < 0.05)
- return;
-
- Param2<int, T> data = new Param2<int, T>(-1, 0);
- data.param1 = m_Type;
- data.param2 = m_Value;
- m_Player.RPCSingleParam(ERPCs.RPC_PLAYER_STAT, data, true, m_Player.GetIdentity());
- m_ValueLastSynced = m_Value;
- }
- }
- #endif
- }
-
- void SetByFloat(float value, string system = "")
- {
- T f = value;
- Set(f, system);
- }
- override void SetByFloatEx(float value, string system = "")
- {
- SetByFloat(value, system);
- }
- void Add( T value, string system = "" )
- {
- Set(m_Value+value, system);
- }
- override float Get()
- {
- return m_Value;
- }
-
- override string GetLabel()
- {
- return m_ValueLabel;
- }
- override float GetMax()
- {
- return m_MaxValue;
- }
- override float GetMin()
- {
- return m_MinValue;
- }
-
- override float GetNormalized()
- {
- return Math.InverseLerp(GetMin(), GetMax(), Get());
- }
-
- override array<PlayerStatRecord> GetRecords()
- {
- return m_Records;
- }
-
- void CreateRecord(float value, string system)
- {
- m_Records.Insert( new PlayerStatRecord(value, GetGame().GetTime(), system ) );
- }
-
- override void OnStoreSave(ParamsWriteContext ctx)
- {
- ctx.Write(m_Value);
- }
- override bool OnStoreLoad( ParamsReadContext ctx)
- {
- T value;
- if (ctx.Read(value))
- {
- m_Value = value;
- }
- else
- {
- return false;
- }
- return true;
- }
-
- override void OnAfterStoreLoad()
- {
- // forces the sync
- Set(Get());
- }
-
- //! DEPRECATED
- PlayerStats m_Manager;
-
- PlayerStats GetManager()
- {
- return m_Manager;
- }
- }
|