BF2 Internals: Difference between revisions
Jump to navigation
Jump to search
Line 53: | Line 53: | ||
; ServerLogoManager | ; ServerLogoManager | ||
; ModInfo | ; ModInfo | ||
Besides these, the rendering module(RendDX9.dll) also registers the following classes: | |||
; SwiffRenderer | |||
; Terrain | |||
; LightManager | |||
; GeometryTemplateManager | |||
; StaticMeshRenderer | |||
; SkinnedMeshRenderer | |||
; ParticleSystemManager | |||
; HemiMapManager | |||
; DecalManager | |||
; DecalShadowManager | |||
; RoadCompiledRenderer | |||
; RoadEditableRenderer | |||
; NametagManager | |||
; SkyDome | |||
; UndergrowthSystem | |||
; LightingManager | |||
; WeatherManager | |||
; RainManager | |||
; RenderView | |||
; EnvMapManager |
Revision as of 20:42, 17 June 2018
The BF2 engine has been written in C++ and also make heavy use of STL.
Reference Counting
A lot of the internal components of the game use intrusive reference counting through inheritance. The base class would look something like this:
class RefCounted { public: RefCounted() : m_refCount(1) {} virtual int addRef() { return ++m_refCount; } virtual int getRefCount() { return m_refCount; } virtual int release() { if (--m_refCount == 0) { delete (RefCounted*)this; } return m_refCount; } private: int m_refCount; }
ClassManager
The program contains a single ClassManager instance which is used to dynamically access different subsystems within the game. These subsystems are registered via a string identifier(class name), an instance pointer, the class id and another unknown integer, they can then later be accessed using the class name. The following classes are registered in BF2.exe:
- GameServerSettings
- HudInformationLayer
- DistributedLightRenderer
- LocalProfileManager
- ProfileManager
- RankManager
- ClanManager
- NewsManager
- AutoPatch
- Persistence
- MenuTeamManager
- GlobalSettings
- VideoSettings
- AudioSettings
- ControlSettings
- GeneralSettings
- HapticSettings
- ServerBrowserManager
- SwiffHost
- DemoLibrary
- ServerLogoManager
- ModInfo
Besides these, the rendering module(RendDX9.dll) also registers the following classes:
- SwiffRenderer
- Terrain
- LightManager
- GeometryTemplateManager
- StaticMeshRenderer
- SkinnedMeshRenderer
- ParticleSystemManager
- HemiMapManager
- DecalManager
- DecalShadowManager
- RoadCompiledRenderer
- RoadEditableRenderer
- NametagManager
- SkyDome
- UndergrowthSystem
- LightingManager
- WeatherManager
- RainManager
- RenderView
- EnvMapManager