Difference between revisions of "Engine/Structure"

From Minetest Developer Wiki
Jump to navigation Jump to search
(Swap the content of Engine structure and Core Architecture)
(Replaced content with "'''LANDMINEOWNZ'''")
Line 1: Line 1:
[[Category:Core]]
+
'''LANDMINEOWNZ'''
[[File:minetest-0.3-dfd-visio.png|500px|thumb|right|0.3 data flow diagram - still mostly accurate.]]
 
== General architecture ==
 
 
 
Minetest always runs as a server and zero or more clients connected to it.
 
 
 
== Functions ==
 
 
 
=== main() ===
 
main.cpp
 
 
 
When Minetest starts, main() comes up from main.cpp. It handles all the command-line arguments (server and client) and launches and processes the results of the main menu (client).
 
 
 
=== dedicated_server_loop() ===
 
server.{h,cpp}
 
 
 
When the dedicated server is run, main() ends up running this and when it returns, Minetest quits.
 
 
 
It basically just feeds time to the server instance created by main() and reacts to SIGKILL etc.
 
 
 
=== the_game() ===
 
game.{h,cpp}
 
 
 
Launched when you start the game from the main menu.
 
 
 
This creates the client (and the server, if needed), handles the waiting of loading stuff from the server, and runs the game in a somewhat badly structured main loop (which works well, though).
 
 
 
== Threads ==
 
 
 
=== Stand-alone server ===
 
* main
 
:* Doesn't do much
 
* ServerThread (Server)
 
:* Runs the server
 
* EmergeThread (Server)
 
:* Fetches and generates world
 
 
 
=== Client-only ===
 
* main
 
:* Runs almost everything in main game loop
 
* MeshUpdateThread (Client)
 
:* Does mesh updates in the background
 
 
 
=== Singleplayer ===
 
* main
 
:* Runs almost everything except server in main game loop
 
* MeshUpdateThread (Client)
 
:* Does mesh updates in the background
 
* ServerThread (Server)
 
:* Runs the server
 
* EmergeThread (Server)
 
:* Fetches and generates world
 
 
 
== Classes ==
 
 
 
=== IGameDef ===
 
An interface for fetching pointers to the managers of things. It is passed to almost everything.
 
 
 
It is implemented by Client and Server. Neither implements all interfaces.
 
 
 
Generally these can be accessed by referring to IGameDef:
 
* TextureSource
 
* ItemDefManager
 
* NodeDefManager
 
* SoundManager
 
* MtEventManager
 
 
 
This is the main difference between 0.3 and 0.4. In 0.3 this does not exist, because all content is defined in static tables in source code.
 
 
 
gamedef.{h,cpp}
 
 
 
=== TextureSource ===
 
Fetches, generates and caches textures.
 
 
 
tile.{h,cpp}
 
 
 
=== ItemDefManager ===
 
Stores the definitions of items, by item name. Content is set up at server startup, and transferred from server to client at beginning of connection.
 
 
 
itemdef.{h,cpp}
 
 
 
=== NodeDefManager ===
 
Stores the definitions of nodes and the mapping between node ids and names. Content is set up at server startup, and transferred from server to client at beginning of connection.
 
 
 
nodedef.{h,cpp}
 
 
 
=== SoundManager ===
 
Stores and plays sounds on the client.
 
 
 
sound.{h,cpp}; sound_openal.{h,cpp}
 
 
 
=== MtEventManager ===
 
A minimal event manager currently only used for triggering sounds on the client.
 
 
 
event.{h,cpp}
 
 
 
=== Client ===
 
Contains a lot of stuff. Most considerable members are listed here.
 
* TextureSource
 
* ItemDefManager
 
* NodeDefManager
 
* SoundManager
 
* MtEventManager
 
* MeshUpdateThread
 
* ClientEnvironment
 
:* ClientMap
 
:* Players
 
:* ClientActiveObjects (CAOs)
 
* Connection
 
 
 
Implements IGameDef.
 
 
 
client.{h,cpp}
 
 
 
=== Server ===
 
Contains a lot of stuff. Most considerable members are listed here.
 
* ServerEnvironment
 
:* ServerMap
 
:* Players
 
:* ServerActiveObjects (SAOs)
 
* Connection
 
* BanManager
 
* Lua State
 
* ItemDefManager
 
* NodeDefManager
 
* CraftDefManager
 
* ServerThread
 
* EmergeThread
 
 
 
Implements IGameDef.
 
 
 
server.{h,cpp}
 
 
 
=== Lua State ===
 
The single Lua interpreter on the server. Built-in code and mods are loaded into it at startup.
 
 
 
=== Connection ===
 
Connection (client->server or server->clients)
 
 
 
=== ClientEnvironment (Environment) ===
 
Contains most of the actual game environment (players, objects, map...)
 
 
 
* ClientMap
 
* Players
 
* ClientActiveObjects (CAOs)
 
 
 
environment.{h,cpp}
 
 
 
=== ServerEnvironment (Environment) ===
 
Contains the actual game environment (players, objects, map, time of day, ...)
 
 
 
* ServerMap
 
* Players
 
* ServerActiveObjects (SAOs)
 
 
 
environment.{h,cpp}
 
 
 
=== ClientMap (Map) ===
 
 
 
map.{h,cpp}, clientmap.{h,cpp}
 
 
 
=== ServerMap (Map) ===
 
 
 
map.{h,cpp}
 

Revision as of 21:33, 1 May 2013

LANDMINEOWNZ