Source: src/cl_univers.cc


Annotated List
Files
Globals
Hierarchy
Index

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