Difference between revisions of "SourceCode Overview"

From SfzWiki
Jump to: navigation, search
Line 37: Line 37:
  
 
== c++ ==
 
== c++ ==
outdated : this part needs to be updated to reflect the externalization of lugre
+
  for most things there are   
<pre> for most things there are   
+
  include/thing.h  as header
include/thing.h  as header
+
  src/thing.cpp    for the actual code
src/thing.cpp    for the actual code
+
  src/thing_L.cpp  for luabindings/wrappers
src/thing_L.cpp  for lua bindings/wrappers
+
  
*main.cpp main function
+
=== sfz ===
*game.h .cpp mainclass, init, step, deinit
+
 
 +
  *main.cpp main function
 +
 
 +
  *object.h .cpp _L.cpp game object baseclass (for ships,asteroids,...)
 +
  *location.h .cpp _L.cpp group/sub-scenegraph hierarchy
 +
  *objectcontroller.h .cpp _L.cpp autopilot utils
 +
  *physicform.h .cpp physics/collision info (so far empty)
 +
  *resyncreceiver.h .cpp _L.cpp receiving of position resync messages via tcp/udp
 +
  *sfz_scripting.h .cpp luabindings for global functions
 +
 
 +
  *GhoulPrimitives.h .cpp obsolete, geometry generation codesnippets
 +
  *GhoulPrimitivesLoft.cpp obsolete, geometry generation codesnippets
 +
  *GhoulPrimitivesOgre.cpp obsolete, geometry generation codesnippets
 +
  *HUDElement2D.h .cpp _L.cpp obsolete, aiming codesnippets
 +
 
 +
=== lugre ===
 +
i'll leave out the lugre_ prefix of filenames for clarity
  
*scripting.h .cpp global interface for lua, and utils
+
  *game.h  .cpp mainclass, init, step, deinit
*luabind.h template class for lua binding
+
  *main.h  .cpp boilerplate utils, parsing win32 commandline, opening win32 console window...
*luaxml.h .cpp make tinyxml parser available for lua
+
 
(there are currently luabindings for data, builder, gfx2D, gfx3D, widget, fifo, luaxml,...)
+
  *scripting.h .cpp lua framework
 +
  *scripting.ogre.cpp luabindings for ogre utils
 +
  *scripting.general.cpp luabindings for misc utils
 +
  *luaxml.h .cpp luabinding for tinyxml parser
 +
  *luabind.h template class for luabindings of classes
 +
 
 +
  *ogrewrapper.h .cpp central interface to ogre
 +
  *robrenderable.h .cpp util for custom geometry renderables
 +
  *meshshape.h .cpp used for mousepicking of meshes
 +
  *widget.h .cpp _L.cpp gui system core
 +
  *beam.h .cpp _L.cpp 3d-beam-like geometry generator
 +
  *bitmask.h .cpp _L.cpp 2d image mousepicking mask utils
 +
 
 +
  *camera.h .cpp _L.cpp luabinding for ogre cam
 +
  *viewport.h .cpp _L.cpp luabinding for ogre viewport
 +
  *material.h .cpp _L.cpp luabinding for ogre material
 +
  *rendertexture.h .cpp _L.cpp luabinding for ogre render-to-texture holder
 +
  *gfx2D.h .cpp _L.cpp luabinding for 2D graphics
 +
  *gfx3D.h .cpp _L.cpp luabinding for 3D graphics
 +
 
 +
  *SortedOverlayContainer.h gui-element class (z-ordering)
 +
  *BorderColourClipPaneOverlay.h gui-element class (border rect)
 +
  *ColourClipPaneOverlay.h gui-element class (rect)
 +
  *ColourClipTextOverlay.h gui-element class (text)
 +
  *RobRenderableOverlay.h gui-element class (custom 2D geometry)
 +
 
 +
  *sound.h .cpp _L.cpp sound and musik wrapper
 +
  *sound_fmod.cpp sound implementation using fmod
 +
  *sound_openal.cpp sound implementation using openal
 +
 
 +
  *net.h .cpp _L.cpp networking
 +
  *fifo.h _L.cpp general purpose first in first out buffer, used by net
 +
 
 +
  *prefix.h should be included first in every source file, for os specific macros
 +
  *shell.h .cpp os specific utils : directory listing, timer, ...
 +
  *input.h .cpp keyboard, mouse, see also ogrewrapper.cpp for OIS access
 +
  *listener.h .cpp baseclass for listener pattern
 +
  *smartptr.h baseclass for smartptr design pattern
 +
  *timer.h .cpp timed callbacks, stepper, fps-calc, etc
 +
  *profile.h .cpp runtime callstack and calltime measurement
 +
  *tiny?.h ?.cpp tiny xml parser
 +
  *robstring1.2.h .cpp string utils
 +
  *random.h .cpp _L.cpp custom random utils used for procedural stuff
 +
 
  
*ogrewrapper.h .cpp central interface to ogre
+
== lua ==
*robrenderable.h .cpp util for custom renderables
+
*meshshape.h .cpp used for mousepicking of meshes (statics,dynamics,chars)
+
*widget.h .cpp _L.cpp managing for gui elements
+
  
*gfx2D.h .cpp _L.cpp wrapper for 2D graphics
+
=== sfz ===
*gfx3D.h .cpp _L.cpp wrapper for 3D graphics
+
  main.lua main file
*SortedOverlayContainer.h gui-element class (z-ordering)
+
  lib.mainmenu.lua the menu before the game starts
*BorderColourClipPaneOverlay.h gui-element class
+
 
*ColourClipPaneOverlay.h gui-element class
+
  lib.client.lua client
*ColourClipTextOverlay.h gui-element class
+
  lib.client.message.lua client netmessage handling
 +
  lib.server.lua server
 +
  lib.server.message.lua server netmessage handling
 +
  lib.netmessagelist.lua network protocol
 +
 
 +
  lib.object.lua gameobject main file
 +
  lib.object.movement.lua orientation,movement
 +
  lib.object.pos.lua distance calc, global2local
 +
  lib.object.search.lua nearest, raypick
 +
  lib.object.hp.lua damage
 +
  lib.object.shield.lua shields
 +
  lib.object.weapon.lua firepower, cooldown
 +
  lib.object.destroy.lua cleanup,register listeners
 +
  lib.object.container.lua cargo,weaponslots
 +
  lib.object.furniture.lua tables,computers,grates,ladders...
 +
  lib.object.hangar.lua launch and dock fighters, exit in spacesuit
 +
 
 +
  lib.mission.lua mission system
 +
  lib.service.lua service system for stations/planets, e.g. repair
 +
  lib.target.lua targeting system (next,prev,nearest...)
 +
  lib.trade.lua trading system buy/sell stuff
 +
  lib.autopilot.lua autopilot system
 +
  lib.plugin.lua plugin system
 +
  lib.system.lua solar systems
 +
  lib.location.lua group/sub-scenegraph hierarchy system
 +
  lib.effect.lua effect system, lasers,explosions...
 +
  lib.music.lua music system, tracklist, shuffles
 +
 
 +
  lib.shipedit.lua ship editor
 +
  lib.shipeditmodule.lua modules/shipparts in editor
 +
  lib.shipeditguess.lua educated guessing of good ship positions
 +
  lib.shipeditloadsave.lua load and save ship-designs to disk
 +
 
 +
  lib.preview.lua mesh to image via render-to-texture
 +
  lib.interior.walk.lua walking around
 +
  lib.shipvoxelgrid.lua collision, interior
 +
  lib.shipgfx.lua optimising ship meshes, removing inner walls
 +
  lib.loft.lua geometry generation
 +
  testarea.lua experiments
 +
 
 +
  lib.keybinds.lua pressing v takes a screenshot...
 +
  lib.keys.lua networking enums for abstract key names
 +
 
 +
  lib.buymenu.lua obsolete
 +
  lib.map.lua obsolete
 +
  lib.hud.lua obsolete
 +
 
 +
=== lugre ===
  
*camera.h .cpp _L.cpp lua binding for ogre cam
+
 
*viewport.h .cpp _L.cpp lua binding for ogre viewport
+
  lib.input.lua keyboard/mouse events
*material.h .cpp _L.cpp lua binding for ogre material
+
  lib.gui.lua gui event distribution
*rendertexture.h .cpp _L.cpp lua binding for ogre render-to-texture holder
+
  lib.guimaker.lua gui creation utils lowlevel
 
+
  lib.plaingui.lua gui creation utils highlevel
*sound.h .cpp _L.cpp sound and musik wrapper
+
  lib.guiutils.lua gui : logo,bottomline,fps-display
*sound_fmod.cpp sound implementation using fmod
+
  lib.edittext.lua gui : text-input fields
*sound_openal.cpp sound implementation using openal
+
  lib.tooltip.lua gui : tooltips
 
+
  lib.movedialog.lua gui : dialog movement utils
*prefix.h should be included first in every source file, for os specific macros
+
  lib.chatline.lua gui : text-input line at the bottom of the screen, chat history
*shell.h .cpp obsolete, inits timer and random
+
  lib.fadelines.lua gui : console-lines at the bottom slowly fading out
*input.h .cpp keyboard, mouse, see also ogrewrapper.cpp for OIS access
+
  lib.contextmenu.lua gui : right-click menu
*listener.h .cpp baseclass for listener pattern
+
  lib.cursor.lua gui : mouse-icon
*smartptr.h baseclass for smartptr design pattern
+
 
*timer.h .cpp timed callbacks, stepper, fps-calc, etc
+
  lib.listener.lua listener system
*profile.h .cpp runtime callstack and calltime measurement
+
  lib.material.lua material utils
*tiny?.h ?.cpp tiny xml parser
+
  lib.cam.lua camera handling, 3rd person utils
*robstring1.2.h .cpp string utils
+
  lib.netmessage.lua network protocol framework
 
+
  lib.plugin.lua plugin system
*net.h .cpp networking
+
  lib.sound.lua sound system
*fifo.h first in first out buffer, used by net
+
  lib.time.lua timeout,stepper,fpscalc
</pre>
+
  lib.types.lua type system (flyweight design-pattern)
 
+
 
== lua ==
+
  lib.beam.lua geometry generation
outdated : this part needs to be updated to reflect the externalization of lugre
+
  lib.box.lua geometry generation
<pre>
+
  lib.primitive.lua geometry generation
main.lua main file
+
  lib.prism.lua geometry generation
 +
  lib.voxel.lua mesh 2 voxel utils
 +
 
 +
  lib.util.lua misc utils, vector, quaternion
 +
  lugre.lua main include file
 +
  udata.lua luabinding helper, loaded from c++ code early
 +
 
  
lib.guimaker.lua core of the guisystem drin, utility functions for creating text-fields etc, no UO specific code
 
sort of like the interface to the c++ gui code, and common shortcuts
 
lib.edittext.lua text-input fields
 
lib.fadelines.lua the messages at the bottom left of the screen that slowly fade away
 
lib.input.lua keyboard and mouse events, keybindings
 
lib.plaingui.lua simple gui, only used for teleport dialog in offline gameplay
 
lib.time.lua calcs fps, calls MainStep from main.lua and calls registered steppers
 
lib.util.lua some utilities, mainly vector and quaternion math
 
lib.xml.lua xml-parser utils (see lib.gfm.lua for parser usage)
 
</pre>
 
  
  

Revision as of 12:51, 8 August 2007

Warning : preliminary documentation This part is about the C++ SourceCode and Lua Scripts for SFZ.

overview

* src/			: sfz c++ source files (.cpp)
* include/		: sfz c++ header files (.h)
* data/			: sfz data files
* data/lua/		: sfz lua scripts (.lua)
* lugre/src/		: lugre c++ source files (.cpp)
* lugre/include/	: lugre c++ header files (.h)
* lugre/lua/		: lugre lua scripts (.lua)

the c++ source code is in the src/ directory, the headers are in include/

the lua code is in the data/lua/ directory,  one main.lua and several libs.<br>
large parts of SFZ are coded in lua to ensure high flexibility, <br>
and customizability without recompiling, while keeping performance critical code in c++.

http://lugre.sf.net is a lib/framework we use across multiple projects, with Lua-bindings for Ogre3d and several other utils (networking,sound,...)


data

the data/ dir contains all data, lua scripts are under data/lua/

* main.material			contains definitions of materials used by ogre
* OgreCore.zip			standard materials and fonts
* lua/				contains lua scripts
* lua/main.lua			central lua file
* lua/udata.lua			helper used for lua binding (luabind.h)


c++

 for most things there are  
 include/thing.h  as header
 src/thing.cpp    for the actual code
 src/thing_L.cpp  for luabindings/wrappers

sfz

 *main.cpp			main function
 
 *object.h .cpp _L.cpp				game object baseclass (for ships,asteroids,...)
 *location.h .cpp _L.cpp			group/sub-scenegraph hierarchy
 *objectcontroller.h .cpp _L.cpp	autopilot utils
 *physicform.h .cpp 				physics/collision info (so far empty)
 *resyncreceiver.h .cpp _L.cpp		receiving of position resync messages via tcp/udp
 *sfz_scripting.h .cpp				luabindings for global functions
 
 *GhoulPrimitives.h .cpp 			obsolete, geometry generation codesnippets
 *GhoulPrimitivesLoft.cpp			obsolete, geometry generation codesnippets
 *GhoulPrimitivesOgre.cpp			obsolete, geometry generation codesnippets
 *HUDElement2D.h .cpp _L.cpp		obsolete, aiming codesnippets
 

lugre

i'll leave out the lugre_ prefix of filenames for clarity

 *game.h   .cpp				mainclass, init, step, deinit
 *main.h   .cpp				boilerplate utils, parsing win32 commandline, opening win32 console window...
 
 *scripting.h .cpp				lua framework
 *scripting.ogre.cpp			luabindings for ogre utils
 *scripting.general.cpp		luabindings for misc utils
 *luaxml.h .cpp				luabinding for tinyxml parser
 *luabind.h					template class for luabindings of classes
 
 *ogrewrapper.h .cpp			central interface to ogre
 *robrenderable.h .cpp			util for custom geometry renderables
 *meshshape.h .cpp				used for mousepicking of meshes
 *widget.h .cpp _L.cpp			gui system core
 *beam.h .cpp _L.cpp			3d-beam-like geometry generator
 *bitmask.h .cpp _L.cpp		2d image mousepicking mask utils
 
 *camera.h .cpp _L.cpp			luabinding for ogre cam
 *viewport.h .cpp _L.cpp		luabinding for ogre viewport
 *material.h .cpp _L.cpp		luabinding for ogre material
 *rendertexture.h .cpp _L.cpp	luabinding for ogre render-to-texture holder
 *gfx2D.h .cpp _L.cpp			luabinding for 2D graphics
 *gfx3D.h .cpp _L.cpp			luabinding for 3D graphics
 
 *SortedOverlayContainer.h			gui-element class (z-ordering)
 *BorderColourClipPaneOverlay.h	gui-element class (border rect)
 *ColourClipPaneOverlay.h			gui-element class (rect)
 *ColourClipTextOverlay.h			gui-element class (text)
 *RobRenderableOverlay.h			gui-element class (custom 2D geometry)
 
 *sound.h .cpp _L.cpp			sound and musik wrapper
 *sound_fmod.cpp				sound implementation using fmod
 *sound_openal.cpp				sound implementation using openal
 
 *net.h .cpp _L.cpp			networking
 *fifo.h _L.cpp				general purpose first in first out buffer, used by net
 
 *prefix.h						should be included first in every source file, for os specific macros
 *shell.h .cpp					os specific utils : directory listing, timer, ...
 *input.h .cpp					keyboard, mouse, see also ogrewrapper.cpp for OIS access
 *listener.h .cpp				baseclass for listener pattern
 *smartptr.h					baseclass for smartptr design pattern
 *timer.h .cpp					timed callbacks, stepper, fps-calc, etc
 *profile.h .cpp				runtime callstack and calltime measurement
 *tiny?.h ?.cpp				tiny xml parser
 *robstring1.2.h .cpp			string utils
 *random.h .cpp _L.cpp			custom random utils used for procedural stuff
 

lua

sfz

 main.lua						main file				
 lib.mainmenu.lua				the menu before the game starts
 
 lib.client.lua					client
 lib.client.message.lua			client netmessage handling
 lib.server.lua					server
 lib.server.message.lua			server netmessage handling
 lib.netmessagelist.lua			network protocol
 		
 lib.object.lua					gameobject main file
 lib.object.movement.lua			orientation,movement
 lib.object.pos.lua				distance calc, global2local
 lib.object.search.lua			nearest, raypick
 lib.object.hp.lua				damage
 lib.object.shield.lua			shields
 lib.object.weapon.lua			firepower, cooldown
 lib.object.destroy.lua			cleanup,register listeners
 lib.object.container.lua		cargo,weaponslots
 lib.object.furniture.lua		tables,computers,grates,ladders...
 lib.object.hangar.lua			launch and dock fighters, exit in spacesuit
 
 lib.mission.lua					mission system
 lib.service.lua					service system for stations/planets, e.g. repair
 lib.target.lua					targeting system (next,prev,nearest...)
 lib.trade.lua					trading system buy/sell stuff
 lib.autopilot.lua				autopilot system
 lib.plugin.lua					plugin system
 lib.system.lua					solar systems
 lib.location.lua				group/sub-scenegraph hierarchy system
 lib.effect.lua					effect system, lasers,explosions...
 lib.music.lua					music system, tracklist, shuffles
 
 lib.shipedit.lua				ship editor
 lib.shipeditmodule.lua			modules/shipparts in editor
 lib.shipeditguess.lua			educated guessing of good ship positions
 lib.shipeditloadsave.lua		load and save ship-designs to disk
 
 lib.preview.lua					mesh to image via render-to-texture		
 lib.interior.walk.lua			walking around
 lib.shipvoxelgrid.lua			collision, interior
 lib.shipgfx.lua					optimising ship meshes, removing inner walls
 lib.loft.lua					geometry generation		
 testarea.lua					experiments
 
 lib.keybinds.lua				pressing v takes a screenshot...
 lib.keys.lua					networking enums for abstract key names
 
 lib.buymenu.lua					obsolete 
 lib.map.lua						obsolete
 lib.hud.lua						obsolete
 

lugre

 lib.input.lua					keyboard/mouse events
 lib.gui.lua						gui event distribution
 lib.guimaker.lua				gui creation utils lowlevel
 lib.plaingui.lua				gui creation utils highlevel
 lib.guiutils.lua				gui : logo,bottomline,fps-display
 lib.edittext.lua				gui : text-input fields
 lib.tooltip.lua					gui : tooltips
 lib.movedialog.lua				gui : dialog movement utils
 lib.chatline.lua				gui : text-input line at the bottom of the screen, chat history
 lib.fadelines.lua				gui : console-lines at the bottom slowly fading out
 lib.contextmenu.lua				gui : right-click menu
 lib.cursor.lua					gui : mouse-icon
 
 lib.listener.lua				listener system
 lib.material.lua				material utils
 lib.cam.lua						camera handling, 3rd person utils
 lib.netmessage.lua				network protocol framework
 lib.plugin.lua					plugin system
 lib.sound.lua					sound system
 lib.time.lua					timeout,stepper,fpscalc
 lib.types.lua					type system (flyweight design-pattern)
 
 lib.beam.lua					geometry generation
 lib.box.lua						geometry generation
 lib.primitive.lua				geometry generation
 lib.prism.lua					geometry generation
 lib.voxel.lua					mesh 2 voxel utils
 
 lib.util.lua					misc utils, vector, quaternion
 lugre.lua						main include file
 udata.lua						luabinding helper, loaded from c++ code early
 



notes

<ghoulsblade> many c++ files come in pairs, like   gfx3D.cpp and gfx3D_L.cpp   _L contains the lua bindings
<ghoulsblade> gfx3d and gfx2d are the main parts of the ogre lua binding
<ghoulsblade> they capsule scenenodes and graphical entities 
<ghoulsblade> i.e.  a scenenode with a mesh-entity in c++ ogre is capsuled in a gfx3d object in our code
<ghoulsblade> there is also a big dump for lots of global lua function bindings in   lugre/src/lugre_scripting*
<ghoulsblade> we use a custom smartpointer thing that is a bit different from the usual definition of smartpointer
<ghoulsblade> instead of releasing memory when all references are deleted, our smartpointers act as listeners to the death-event of the target, and set themselves to null if the target is destroyed
<ghoulsblade> that is because most of the time objects and graphics are explicitly destroyed,  but other code elements might be still tracking them
<ghoulsblade> this way the others don't have to be manually notified that the target is gone, they can just check if the smartpointer is null
<ghoulsblade> another point of interest is fifo.h  , a general purpose buffer writer/reader
<ghoulsblade> it has a lua binding and is used extensively for networking stuff
<ghoulsblade> lugre_robstring.cpp has a few string utils i collected over the years in many different projects
<ghoulsblade> it has a nice   printf  syntax that outputs an std::string   that often comes in handy as i don't like the << syntax that much
<ghoulsblade> also has explode and a few other utils, some of the code is also inlined in robstring.h  but i think it isn't used too much in sfz as most string stuff is done in lua
<ghoulsblade> shell.h has a few os-specific utils like listing files, getting timestamp, etc
<ghoulsblade> input.h is a wrapper for some input systems, currently used with OIS that comes with ogre
<ghoulsblade> also has keycode-name association 
<ghoulsblade> lugre_ogrewrapper.cpp is the ogre boilerplate and some utils (like screenshot, mousepicking) 
<ghoulsblade> that file kindof replaces the ogre example framework