Engine structure/ja

全体の構造
Minetestは常に、サーバーと0個以上の接続されているクライアントとして動作します.

main
main.cpp

Minetestが起動すると、まずmain.cpp内のmain関数が実行されます. これは全てのコマンドライン引数(サーバーとクライアント)、起動、メインメニュー(クライアント)の結果を処理します.

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).

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

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}

Script Engine
script/*

The script engine contains "core to script"- as well as "script to core"-interface implementation.

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.{h,cpp}