← index
Old.Learning.Projects/mx12/mastermain.cpp
Source: Old.Learning.Projects/mx12/mastermain.cpp
// masterkong

// written by jared bruni

// www.lostsidedead.com


// Open Source Open Mind


#include "thehead.h"


Player player;

MasterXHWND mxhwnd;

Intro intro;
Start start;
Game  game;
Options opt;
GameOver gameover;
About about;
GIntro gintro;
LevelMap level;
SoundHandle soundhandle;
ParticleHandler hparticle;

int XSTD MasterMain(HINSTANCE hInst,LPSTR line)
{

	srand(time(NULL));

	if(mxhwnd.CreateMasterX("MasterKong",640,480,COLOR_DEFAULT,MasterProc,hInst,LoadIcon(hInst,MAKEINTRESOURCE(IDI_ICON1)),NULL))
	{

#ifndef WIN2K

		mxhwnd.InitTimer(1,1);
#else

		mxhwnd.InitTimer(1,50);
#endif


		mxhwnd.HideCursor();
		mxhwnd.SetScreen(ID_INTRO);
		intro.load();
		start.load();
		game.load();
		opt.load();
		about.load();
		gameover.load();
		gintro.load();
		soundhandle.load();
		hparticle.load();
		loadlevel("demo.mxk");
		soundhandle.Play(OPEN);
		return mxhwnd.InitLoop(update);
	}

	return 0;
}


long XSTD MasterProc(HWND hwnd,UINT msg,WPARAM wParam,LPARAM lParam)
{

	switch(msg)
	{
	case WM_DESTROY:
		PostQuitMessage(0);
		break;
	case WM_ACTIVATEAPP:
		mxhwnd.activeapp = wParam;
		break;
	case WM_KEYDOWN:
		{
			if(wParam == VK_ESCAPE)
			{
				mxhwnd.Kill();
			} else
			{
				switch(mxhwnd.GetScreen())
				{
				case ID_START:
					start.keypress(wParam);
					break;
				case ID_ABOUT:
					about.keypress(wParam);
					break;
				case ID_OPTIONS:
					opt.keypress(wParam);
					break;
				case ID_GINTRO:
					gintro.keypress(wParam);
					break;
				case ID_GAME:
					game.hero.keypress(wParam);
					break;
				case ID_GAMEOVER:
					gameover.keypress(wParam);
					break;
				}
			}
			
		}
		break;
	case WM_KEYUP:
		{
			switch(mxhwnd.GetScreen())
			{
			case ID_GAME:
				game.hero.keyrelease(wParam);
				break;
			}
		}
		break;
	case WM_TIMER:
		{
			mxhwnd.ChangeTime();
		}
		break;
	default: return DefWindowProc(hwnd,msg,wParam,lParam);
	}

	return 0;
}

void update(MASTERSCREEN screen)
{
	mxhwnd.SetTimeFlag();

	switch(screen)
	{
	case ID_INTRO:
		intro.update();
		break;
	case ID_START:
		start.update();
		break;
	case ID_GAME:
		game.update();
		break;
	case ID_GAMEOVER:
		gameover.update();
		break;
	case ID_OPTIONS:
		opt.update();
		break;
	case ID_ABOUT:
		about.update();
		break;
	case ID_GINTRO:
		gintro.update();
		break;
	}

}

// load the level

void loadlevel(char* levelstr)
{
	ifstream fin(levelstr,ios::binary);
	fin.read((char*)&level,sizeof(level));
	fin.close();

	game.hero.hero_pos = level.hsp;
	game.grandma.pos = level.gsp;
	game.grandma.spos = level.gsp;
	game.hero.start_pos = level.hsp;

	game.grandma.birth();

}

// how many rows over

int rows(int row)
{
	return (row*24);
}

Hero* GetHero()
{
	return (Hero*)&game.hero;
}

Grandma* GetGrandma()
{
	return (Grandma*)&game.grandma;
}

MasterJoyStick* getstick()
{
	return (MasterJoyStick*)&game.stick;
}

void thegameover(bool win)
{
	mxhwnd.SetScreen(ID_GAMEOVER);
	gameover.passgameover(win);
}

/*************************************************************************** lostsidedead.com */