diff options
Diffstat (limited to 'src/game/example/example.cc')
-rw-r--r-- | src/game/example/example.cc | 125 |
1 files changed, 125 insertions, 0 deletions
diff --git a/src/game/example/example.cc b/src/game/example/example.cc new file mode 100644 index 0000000..d8e18ea --- /dev/null +++ b/src/game/example/example.cc @@ -0,0 +1,125 @@ +/* + intro/intro.cc + This file is part of the Osirion project and is distributed under + the terms of the GNU General Public License version 2 +*/ + +#include "core/gameserver.h" +#include "example/example.h" +#include "example/spectator.h" + +namespace example { + +Example::Example() : core::Module("example", "The Osirion Project Example", true) +{ +} + +Example::~Example() +{ +} + +void Example::init() +{ + /* + Initialize engine game variables + */ + Spectator::g_spectatorspeed = core::Cvar::get("g_spectatorspeed", "4", core::Cvar::Game | core::Cvar::Archive); + Spectator::g_spectatorspeed->set_info("[float] speed of the spectator"); + + Spectator::g_spectatorrotation = core::Cvar::get("g_spectatorrotation", "45", core::Cvar::Game | core::Cvar::Archive); + Spectator::g_spectatorrotation->set_info("[float] rotation speed of the spectator in degrees per second"); + + /* + The Osirion world consists of Zones. Zones are different + areas in the game. The example has only one zone. + */ + zone = new core::Zone("example"); // create a Zone object + zone->set_name("Example Zone"); // set the zone name + core::Zone::add(zone); // add the zone to the world + + /* + Every object in the Osirion world is derived from core::Entity. + We create a few basic entities + */ + + core::Entity *cube = new core::Entity(); // a new entity + cube->set_label("cube"); + cube->set_name("The Red Cube"); + cube->entity_shape = core::Entity::Cube; // set the shape to cube + cube->entity_location.assign(16, -8, 0); // set location + cube->entity_color.assign(1, 0, 0); // set RGB color red + cube->entity_radius = 0.25f; // set radius, in game units + cube->set_zone(zone); // add the entity to the zone + + core::Entity *sphere = new core::Entity(); // a new entity + sphere->set_label("sphere"); + sphere->set_name("The Green Sphere"); + sphere->entity_shape = core::Entity::Sphere; // set the shape to sphere + sphere->entity_location.assign(16, 0, 0); // set location + sphere->entity_color.assign(0, 1, 0); // set RGB color green + sphere->entity_radius = 0.25f; // set radius, in game units + sphere->set_zone(zone); // add the entity to the zone + + core::Entity *diamond = new core::Entity(); // a new entity + diamond->set_label("diamond"); + diamond->set_name("The Blue Diamond"); + diamond->entity_shape = core::Entity::Diamond; // set the shape to cube + diamond->entity_location.assign(16, 8, 0); // set location + diamond->entity_color.assign(0, 0, 1); // set RGB color blue + diamond->entity_radius = 0.25f; // set radius, in game units + diamond->set_zone(zone); // add the entity to the zone + + core::Entity *axis = new core::Entity(); // a new entity + axis->set_label("origin"); + axis->set_name("The Origin"); + axis->entity_shape = core::Entity::Axis; // set the shape to axis + axis->entity_location.assign(0, 0, 0); // set location + axis->entity_color.assign(1); // set greyscale color white + axis->entity_color_second.assign(0.5f, 0.0f, 0.5f); // set RGB secondary color + axis->entity_radius = 0.25f; // set radius, in game units + axis->set_zone(zone); // add the entity to the zone + +} + + +void Example::player_connect(core::Player *player) +{ + // add a spectator object for the new player + Spectator *spectator; + spectator = new Spectator(player); + spectator->set_zone(zone); + spectator->set_dirty(); + + // set the player's control to the spectator object + player->set_zone(zone); + player->set_control(spectator); + player->set_dirty(); + + // send a message to the player + core::server()->send(player, "Welcome to " + name()); + + // broadcast a message to all players + core::server()->broadcast("^B" + player->name() + " entered."); +} + +void Example::player_disconnect(core::Player *player) +{ + // broadcast a message to all players + core::server()->broadcast("^B" + player->name() + " has left."); +} + +void Example::frame(float elapsed) +{ + +} + +void Example::shutdown() +{ + /* + The world is automaticly deleted on shutdown, + but local variables have to be cleaned up + */ + zone = 0; +} + +} |