Source: src/cl_univers.cc
|
|
|
|
#include "cl_univers.h"
void UNIVERS::init()
{
scr = NULL;
config = NULL;
}
void UNIVERS::bigbang()
{
create_console();
con->set_bitmap(screen);
#ifdef HARD_DEBUG
message("Big-bang - univers exists");
#endif
terminal_init();
expander.init();
deus.init();
script.init();
script.connect_engine(&deus);
event.init();
script.connect_event(&event);
#ifdef HARD_DEBUG
message("Time for deus exist");
#endif
lua.init();
script.connect_luawrapper(&lua);
script.register_functions();
deus.canvas(scr);
script.mode(UNIVERS_CONSOLE);
message("Siriel4 console (HOME for quit).\n\n");
redraw_screen = 0;
if (DRS_init(100, scr, 0)) {
error("Unable to init Dirty Rectangles System!");
}
}
void UNIVERS::cast_datasrc()
{
string fname;
deus.data.create("default");
// message("Default datasource ... done");
// deus.level.create("default");
// deus.level.implicit("default");
// message("Default level ... done");
sel_datasrc = NULL;
script.import("*.dat");
message("Created all data sources");
script.load_data();
// engine->stage.connect_data();
message("Datadisc loading ... done");
}
void UNIVERS::cast_config()
{
deus.data.create("main",config->get(PARAM_DATAFILE));
message("Seeking for main.dat");
script.lua->do_alleg_file("main.dat#config");
message("Config ... done");
}
/*
void UNIVERS::cast_level()
{
string dl,file;
// dl = deus.level.implicit_fname(); FIXME
dl = "level1_lua";
file = deus.data.fname(dl);
message("Casting level: %s", file.c_str());
script.lua->do_alleg_file(file);
deus.object.set_avatar("avatar");
message("Level loaded ... ok");
}*/
void UNIVERS::cast_spell()
{
cast_config();
cast_datasrc();
script.mode(UNIVERS_REALITY);
// cast_level();
}
void UNIVERS::terminal_beat()
{
string cmd;
cmd = terminal();
if(cmd.length()>0) {
cmd = expander.expand(cmd);
script.lua->exec((char *)cmd.c_str());
}
}
void UNIVERS::process_event()
{
switch (event.pop_code()) {
case EC_NONE: { break; }
case EC_REDRAW: {
redraw_flag(1);
break;
}
case EC_EXPAND: {
expander.enable();
break;
}
case EC_NOEXPAND: {
expander.disable();
break;
}
}
}
void UNIVERS::univers_console()
{
con->draw_page();
if(con->read_keyboard(KEY_HOME)) {
script.mode(UNIVERS_REALITY);
console_visible = 0;
redraw_screen = 1;
clear_to_color(screen, 0);
wait_no_key();
}
}
void UNIVERS::univers_reality()
{
DRS_start_frame();
if(redraw_screen) {
DRS_add_rectangle(0,0,SCREEN_SIZE_X,SCREEN_SIZE_Y);
redraw_screen = 0;
}
// deus.level.draw();
deus.stage.draw();
deus.object.process_keyboard();
deus.object.collision_avatar();
deus.event.execute(&lua);
deus.object.process();
deus.object.draw();
deus.stage.draw_foreground();
DRS_update_screen();
if(tst_key(KEY_HOME)) {
script.mode(UNIVERS_CONSOLE);
console_visible = 1;
con->set_bitmap(screen);
wait_no_key();
}
if(tst_key(KEY_TAB)) {
deus.event.add(EVENT_KEY_TAB);
wait_no_key();
}
if(tst_key(KEY_ENTER)) {
deus.event.add(EVENT_KEY_ENTER);
wait_no_key();
}
clear_keybuf();
}
void UNIVERS::univers_dialog()
{
DRS_start_frame();
if(redraw_screen) {
DRS_add_rectangle(0,0,SCREEN_SIZE_X,SCREEN_SIZE_Y);
redraw_screen = 0;
}
// deus.level.draw();
deus.stage.draw();
deus.event.execute(&lua);
deus.object.draw();
deus.widget.draw_all();
DRS_update_screen();
if(key[KEY_HOME]) {
script.mode(UNIVERS_CONSOLE);
console_visible = 1;
con->set_bitmap(screen);
wait_no_key();
}
if(key[KEY_ENTER]) {
script.mode(UNIVERS_REALITY);
redraw_screen = 1;
deus.widget.hide_all();
wait_no_key();
}
clear_keybuf();
}
void UNIVERS::univers_heart_beat()
{
switch(script.mode()) {
case UNIVERS_CONSOLE: {
univers_console();
break;
}
case UNIVERS_REALITY: {
univers_reality();
break;
}
case UNIVERS_DIALOG: {
univers_dialog();
break;
}
}
terminal_beat();
deus.music.cont();
process_event();
}
void UNIVERS::bigcrunch()
{
destroy_bitmap_safe(scr,"scr");
#ifdef HARD_DEBUG
message("Big-crunch - reality colaps");
#endif
}
void UNIVERS::connect_screen(BITMAP* bmp)
{
scr = bmp;
}
void UNIVERS::connect_config(CONFIGURATION *c)
{
config = c;
}
void UNIVERS::redraw_flag(int i)
{
redraw_screen = i;
}
int UNIVERS::colaps()
{
if (script.mode() == UNIVERS_COLAPS) {
return 1;
} else {
return 0;
}
}
Generated by: georgik on armada on Sat Jul 24 07:07:15 2004, using kdoc 2.0a54. |