BVB Source Codes

CRYENGINE Show BreakReplicator.h Source code

Return Download CRYENGINE: download BreakReplicator.h Source code - Download CRYENGINE Source code - Type:.h
  1. // Copyright 2001-2016 Crytek GmbH / Crytek Group. All rights reserved.
  2.  
  3. #ifndef __BREAKREPLICATOR_H__
  4. #define __BREAKREPLICATOR_H__
  5.  
  6. #pragma once
  7.  
  8. #if NET_USE_SIMPLE_BREAKAGE
  9.  
  10.         #include "BreakReplicator_Simple.h"
  11.  
  12. #else // NET_USE_SIMPLE_BREAKAGE
  13.  
  14. //**=======================================================**
  15. //**                                                       **
  16. //**     OLD BREAKREPLICATOR                               **
  17. //**                                                       **
  18. //**     Deprecated !                                      **
  19. //**                                                       **
  20. //**                                                       **
  21. //**=======================================================**
  22.  
  23.         #include "ActionGame.h"
  24.         #include <CryNetwork/NetHelpers.h>
  25.         #include "ObjectSelector.h"
  26.  
  27.         #include "ProceduralBreak.h"
  28.         #include "DeformingBreak.h"
  29.         #include "PlaneBreak.h"
  30.         #include "IBreakReplicatorListener.h"
  31.         #include "IBreakPlaybackStream.h"
  32.         #include "ExplosiveObjectState.h"
  33.         #include "JointBreak.h"
  34.         #include "SimulateRemoveEntityParts.h"
  35.         #include "SimulateCreateEntityPart.h"
  36.         #include "DebugBreakage.h"
  37.  
  38. class CGameContext;
  39.  
  40. struct SProceduralBreak;
  41. struct SDeformingBreak;
  42. struct SExplosiveBreak;
  43. struct SExplosiveObjectState;
  44. class CGenericRecordingListener;
  45. class CGenericPlaybackListener;
  46. class CNullListener;
  47. class CProceduralBreakingBaseListener;
  48. class CProceduralBreakingRecordingListener;
  49. class CProceduralBreakingPlaybackListener;
  50. class CDeformingBreak;
  51. class IBreakReplicator_Simple;
  52.  
  53. struct SSetMagicId
  54. {
  55.         SSetMagicId() : breakId(-1), magicId(-1) {}
  56.         SSetMagicId(int bid, int mid) : breakId(bid), magicId(mid) {}
  57.  
  58.         int  breakId;
  59.         int  magicId;
  60.  
  61.         void SerializeWith(TSerialize ser)
  62.         {
  63.                 LOGBREAK("SSetMagicId, %s", ser.IsReading() ? "Reading:" : "Writing");
  64.                 ser.Value("breakId", breakId, 'brId');
  65.                 ser.Value("magicId", magicId);
  66.         }
  67. };
  68.  
  69. class CBreakReplicator : public CNetMessageSinkHelper<CBreakReplicator, INetMessageSink>, IBreakReplicator
  70. {
  71. public:
  72.         CBreakReplicator(CGameContext* pCtx);
  73.         ~CBreakReplicator();
  74.         void Reset();
  75.  
  76.         bool m_bDefineProtocolMode_server;
  77.         void                                      DefineProtocol(IProtocolBuilder* pBuilder);
  78.  
  79.         void                                      PlaybackBreakage(int breakId, INetBreakagePlaybackPtr pBreakage);
  80.         void*                                     ReceiveSimpleBreakage(TSerialize ser);
  81.         void                                      PlaybackSimpleBreakage(void* userData, INetBreakageSimplePlaybackPtr pBreakage);
  82.  
  83.         void                                      OnSpawn(IEntity* pEntity, SEntitySpawnParams& params);
  84.         void                                      OnSpawn(IEntity* pEntity, IPhysicalEntity* pPhysEntity, IPhysicalEntity* pSrcPhysEntity);
  85.         void                                      OnRemove(IEntity* pEntity);
  86.         void                                      OnReuse(IEntity* pEntity, SEntitySpawnParams& params);
  87.         void                                      OnStartFrame();
  88.         void                                      OnEndFrame();
  89.         void                                      OnBrokeSomething(const SBreakEvent& be, EventPhysMono* pMono, bool isPlane);
  90.         void                                      GetMemoryStatistics(ICrySizer* s);
  91.  
  92.         void                                      BeginEvent(IBreakReplicatorListenerPtr pListener);
  93.         void                                      EndEvent();
  94.  
  95.         void                                      RemoveEntity(IEntity* pEntity);
  96.  
  97.         virtual const EventPhysRemoveEntityParts* GetRemovePartEvents(int& iNumEvents);
  98.  
  99.         void                                      AddListener(IBreakReplicatorListenerPtr pListener, int nFrames);
  100.  
  101.         int                                       PullOrderId();
  102.         void                                      PushBreak(int orderId, const SNetBreakDescription& desc);
  103.         void                                      PushAbandonment(int orderId);
  104.  
  105.         static CBreakReplicator*                  Get()                 { return m_pThis; }
  106.         static IBreakReplicator*                  GetIBreakReplicator() { return static_cast<IBreakReplicator*>(m_pThis); }
  107.         static void                               RegisterClasses();
  108.  
  109.         NET_DECLARE_SIMPLE_ATSYNC_MESSAGE(DeformingBreak, SDeformingBreakParams);
  110.         NET_DECLARE_SIMPLE_ATSYNC_MESSAGE(PlaneBreak, SPlaneBreakParams);
  111.         NET_DECLARE_SIMPLE_ATSYNC_MESSAGE(JointBreak, SJointBreakParams);
  112.         NET_DECLARE_SIMPLE_ATSYNC_MESSAGE(SimulateCreateEntityPart, SSimulateCreateEntityPartMessage);
  113.         NET_DECLARE_SIMPLE_ATSYNC_MESSAGE(SimulateRemoveEntityParts, SSimulateRemoveEntityPartsMessage);
  114.  
  115.         NET_DECLARE_SIMPLE_ATSYNC_MESSAGE(DeclareProceduralSpawnRec, SDeclareProceduralSpawnRec);
  116.         NET_DECLARE_SIMPLE_ATSYNC_MESSAGE(DeclareJointBreakRec, SDeclareJointBreakRec);
  117.         NET_DECLARE_SIMPLE_ATSYNC_MESSAGE(DeclareJointBreakParticleRec, SDeclareJointBreakParticleRec);
  118.         NET_DECLARE_SIMPLE_ATSYNC_MESSAGE(DeclareExplosiveObjectState, SDeclareExplosiveObjectState);
  119.         NET_DECLARE_SIMPLE_ATSYNC_MESSAGE(SetMagicId, SSetMagicId);
  120.  
  121. private:
  122.  
  123.         struct SListenerInfo
  124.         {
  125.                 SListenerInfo() : timeout(-10) {}
  126.                 SListenerInfo(IBreakReplicatorListenerPtr p, int t) : timeout(t), pListener(p) {}
  127.                 int                         timeout;
  128.                 IBreakReplicatorListenerPtr pListener;
  129.         };
  130.  
  131.         void                        EnterEvent();
  132.  
  133.         void                        OnUpdateMesh(const EventPhysUpdateMesh* pEvent);
  134.         void                        OnCreatePhysEntityPart(const EventPhysCreateEntityPart* pEvent);
  135.         void                        OnRemovePhysEntityParts(const EventPhysRemoveEntityParts* pEvent);
  136.         void                        OnJointBroken(const EventPhysJointBroken* pEvent);
  137.  
  138.         static int                  OnUpdateMesh_Begin(const EventPhys* pEvent);
  139.         static int                  OnCreatePhysEntityPart_Begin(const EventPhys* pEvent);
  140.         static int                  OnRemovePhysEntityParts_Begin(const EventPhys* pEvent);
  141.         static int                  OnJointBroken_Begin(const EventPhys* pEvent);
  142.  
  143.         static int                  OnUpdateMesh_End(const EventPhys* pEvent);
  144.         static int                  OnCreatePhysEntityPart_End(const EventPhys* pEvent);
  145.         static int                  OnRemovePhysEntityParts_End(const EventPhys* pEvent);
  146.         static int                  OnJointBroken_End(const EventPhys* pEvent);
  147.  
  148.         static int                  OnPostStepEvent(const EventPhys* pEvent);
  149.         void                        OnPostStep(const EventPhysPostStep* pEvent);
  150.  
  151.         IBreakReplicatorListenerPtr AddProceduralBreakTypeListener(const IProceduralBreakTypePtr& pBT);
  152.  
  153.         void                        SpinPendingStreams();
  154.  
  155.         static CBreakReplicator*             m_pThis;
  156.         typedef std::vector<SListenerInfo> ListenerInfos;
  157.         ListenerInfos                        m_listenerInfos;
  158.         ListenerInfos                        m_listenerInfos_temp;
  159.         IBreakReplicatorListenerPtr          m_pActiveListener;
  160.         IBreakReplicatorListenerPtr          m_pGenericUpdateMesh;
  161.         IBreakReplicatorListenerPtr          m_pGenericJointBroken;
  162.         IBreakReplicatorListenerPtr          m_pGenericCreateEntityPart;
  163.         IBreakReplicatorListenerPtr          m_pGenericRemoveEntityParts;
  164.         IBreakReplicatorListenerPtr          m_pNullListener;
  165.         _smart_ptr<CGenericPlaybackListener> m_pGenericPlaybackListener;
  166.  
  167.         std::vector<IBreakPlaybackStreamPtr> m_playbackMessageHandlers;
  168.  
  169.         bool                    BeginStream(int idx, const IProceduralBreakTypePtr& p);
  170.         IBreakPlaybackStreamPtr GetStream(int idx);
  171.         IBreakPlaybackStreamPtr PullStream(int idx);
  172.         IBreakPlaybackStreamPtr m_pNullPlayback;
  173.  
  174.         struct SPendingPlayback
  175.         {
  176.                 IBreakPlaybackStreamPtr pStream;
  177.                 INetBreakagePlaybackPtr pNetBreakage;
  178.         };
  179.         std::vector<SPendingPlayback>        m_pendingPlayback;
  180.         IBreakReplicatorListenerPtr          m_pPlaybackListener;
  181.         CGameContext*                        m_pContext;
  182.  
  183.         int                                  m_nextOrderId;
  184.         int                                  m_loggedOrderId;
  185.         std::map<int, SNetBreakDescription*> m_pendingLogs;
  186.         void FlushPendingLogs();
  187.  
  188.         std::vector<EntityId>                   m_entitiesToRemove;
  189.  
  190.         std::vector<EventPhysRemoveEntityParts> m_removePartEvents;
  191. };
  192.  
  193. #endif // NET_USE_SIMPLE_BREAKAGE
  194.  
  195. #endif
  196.  
downloadBreakReplicator.h Source code - Download CRYENGINE Source code
Related Source Codes/Software:
postal - 2017-06-11
reactide - Reactide is the first dedicated IDE for React web ... 2017-06-11
rkt - rkt is a pod-native container engine for Linux. It... 2017-06-11
uWebSockets - Tiny WebSockets https://for... 2017-06-11
realworld - TodoMVC for the RealWorld - Exemplary fullstack Me... 2017-06-11
CRYENGINE - CRYENGINE is a powerful real-time game development... 2017-06-11
goreplay - GoReplay is an open-source tool for capturing and ... 2017-06-10
pyenv - Simple Python version management 2017-06-10
redux-saga - An alternative side effect model for Redux apps ... 2017-06-10
angular-starter - 2017-06-10

 Back to top