vd::Time init(const vd::Time&)
    {
        createWall(0, 0, 0, 40);
        createWall(0, 40, 100, 40);
        createWall(100, 0, 100, 40);
        createWall(0, 0, 100, 0);
        createBall(1, 1,-1.0,-1.0, 0.25); //runtime error (corner problem)
        createBall(30, 30, 0, 0.5, 1);
        createBall(5, 5, -0.5, -0.5, 0.5);
        createBall(66,35, 0.5, -0.5, 1);
        createBall(20, 1, 0.5, 0.5, 1);
        createBall(3, 3, 0.5, 0.5, 1);
        createBall(24, 24, 0, 0.5, 1);
        createBall(30, 5, -1, -1, 0.5);
        createBall(10, 2, 0.5, -0.5, 1);
        createBall(15, 9, 0.5, 1, 1);
        createBall(90, 24, 0, 0.5, 2);
        createBall(38, 5, -0.5, -0.5, 0.5);
        createBall(75, 2, 0.5, -0.5, 2);
        createBall(60, 9, 0.5, 0.5, 3);

        //~ createBall(10, 10, -1, -1, sqrt(2)/2.0);
        //~ createBall(8, 10, 1, -1, sqrt(2)/2.0);
        //~ createBall(9, 9, 0, 1, sqrt(2)/2.0);
        return vd::infinity;
    }
Esempio n. 2
0
void NativeGameLogic::load(WorldModel::WorldAccess *worldAccess)
{
    worldAccess->clear();

    createWall(worldAccess,
        geom::Point(.0, .0, -20.0),
        20.0, 20.0, geom::Angle(M_PI),
        render::Color(1.0, .0, .0));

    createWall(worldAccess,
        geom::Point(.0, .0, 20.0),
        20.0, 20.0, geom::Angle(.0),
        render::Color(.0, 1.0, .0));

    createWall(worldAccess,
        geom::Point(10.0, .0, .0),
        40.0, 20.0, geom::Angle(M_PI_2),
        render::Color(.0, .0, 1.0));

    createWall(worldAccess,
        geom::Point(-10.0, .0, .0),
        40.0, 20.0, geom::Angle(-M_PI_2),
        render::Color(1.0, 1.0, .0));

    createLight(worldAccess,
        geom::Point(5.0, 5.0, -10.0));
}
Esempio n. 3
0
void	BenchmarkDemo::createTest2()
{
	setCameraDistance(btScalar(50.));
	const float cubeSize = 1.0f;

	createPyramid(btVector3(-20.0f,0.0f,0.0f),12,btVector3(cubeSize,cubeSize,cubeSize));
	createWall(btVector3(-2.0f,0.0f,0.0f),12,btVector3(cubeSize,cubeSize,cubeSize));
	createWall(btVector3(4.0f,0.0f,0.0f),12,btVector3(cubeSize,cubeSize,cubeSize));
	createWall(btVector3(10.0f,0.0f,0.0f),12,btVector3(cubeSize,cubeSize,cubeSize));
	createTowerCircle(btVector3(25.0f,0.0f,0.0f),8,24,btVector3(cubeSize,cubeSize,cubeSize));
	
}
int createWorld(double wide_x, double wide_y, double wide_z){
	int rez[5] = {0,0,0,0,0};
	rez[0] = createWall("Wall_N", wide_x + WALL_WIDTH*2, WALL_WIDTH, wide_z, +wide_y/2 + WALL_WIDTH/2, 0, wide_z/2); // North Wall  
	rez[1] = createWall("Wall_S", wide_x + WALL_WIDTH*2, WALL_WIDTH, wide_z, -wide_y/2 - WALL_WIDTH/2, 0, wide_z/2); // South Wall
	rez[2] = createWall("Wall_E", WALL_WIDTH, 			     wide_y, wide_z, 0, +wide_x/2 + WALL_WIDTH/2, wide_z/2); // East Wall
	rez[3] = createWall("Wall_W", WALL_WIDTH, 			     wide_y, wide_z, 0, -wide_x/2 - WALL_WIDTH/2, wide_z/2); // West Wall
	rez[4] = createWall("Roof",   wide_x + WALL_WIDTH*2, wide_y + WALL_WIDTH*2, WALL_WIDTH,     0, 0, wide_z + WALL_WIDTH/2); // Roof

	for (int i = 0; i < 5; ++i)
	{
		if (rez[i]) {return 1;}
	}
	return 0;
};
Esempio n. 5
0
void GameObjectLoader::loadLevel(string path)
{
	vector<glm::fvec2> wallsPos;
	glm::fvec2 playerPos;
	glm::fvec2 whiteHolePos;
	GLuint fieldSize;
	ifstream levelFile;
	levelFile.open(path);
	string buffer;
	getline(levelFile, buffer);
	try {
		fieldSize = stoi(buffer);
	}
	catch (invalid_argument e)
	{
		cerr << "Error on reading level";
		return;
	}
	GLint radius = fieldSize / 2;
	// Read and parse file
	for (unsigned int i = 0; i < fieldSize; i++)
	{
		getline(levelFile, buffer);
		const char * line = buffer.c_str();
		for (unsigned int j = 0; j < fieldSize; j++)
		{
			glm::fvec2 curPos = glm::fvec2(- radius + (int)j, - radius + (int)i);
			switch (line[j])
			{
				case '0':
					break;
				case '1':
				{
					wallsPos.push_back(curPos);
				}break;
				case '2':
				{
					whiteHolePos = curPos;
				}break;
				case '3':
				{
					playerPos = curPos;
				}break;
				default:
				{
					throw invalid_argument("Incorrect file format");
				}
			}
		}
	}
	
	generateField(glm::fvec2(0.0f, 0.0f), fieldSize);
	for (glm::fvec2 curPos : wallsPos)
		createWall(curPos);
	createPlayer(playerPos);
	creatWhiteHole(whiteHolePos);
	EnergyBar * bar = new EnergyBar(glm::fvec2(-1.0f + 0.255 + 0.01f, 1.0f - 0.128 - 0.01f), loader, font);
	this->manager->addObject(bar);
	this->manager->swapWalls();
}
Esempio n. 6
0
File: main.c Progetto: nfaralli/SPH
void tmpAddWalls_1(System *sys){
  float v1[3],v2[3],v3[3],v4[3];
  v1[0]=-0.5;  v1[1]=1;   v1[2]=-0.5;
  v2[0]=-0.5;  v2[1]=-1;  v2[2]=-0.5;
  v3[0]=1;     v3[1]=-1;  v3[2]=0.5;
  v4[0]=1;     v4[1]=1;   v4[2]=0.5;
  addWall(sys,createWall(v1,v2,v3));
  addWall(sys,createWall(v1,v3,v4));

  v1[0]=-0.5;  v1[1]=1;   v1[2]=-0.51;
  v2[0]=-0.5;  v2[1]=-1;  v2[2]=-0.51;
  v3[0]=1;     v3[1]=-1;  v3[2]=0.49;
  v4[0]=1;     v4[1]=1;   v4[2]=0.49;
  addWall(sys,createWall(v1,v3,v2));
  addWall(sys,createWall(v1,v4,v3));
}
Esempio n. 7
0
//-----------------------------------------------
// ---  動作  ---
// ウインドウ作成
// ---  引数  ---
// 無し
// --- 戻り値 ---
//
//-----------------------------------------------
void Main::init(LPVOID hWnd)
{
	//画像読み込みパスの設定
	//D3DDevice::setTexturePath(L"images\\");
	GLDevice::setTexturePath("Breakout3D\\");
	//ワールド設定
	m_world.setCamera(&m_camera);

	m_screen.createScreen(m_screenWidth, m_screenHeight,hWnd);
	m_world.setScreen(&m_screen);
	m_world.getCamera()->resetPoint();
	m_world.setDrawLimit(10000);

	m_world.addUnit(&m_unit);
	m_unit.add(&m_fps);
	m_fps.setPosW(1000);

	Unit unitModel;
	unitModel.openFile("Breakout3D/BaseBox.MDO");
	createWall(&unitModel, 1, 10-10, 1, 10, 1, 10);
	createWall(&unitModel, 0,  0-10, 1, 1, 10, 10);
	createWall(&unitModel,11,  0-10, 1, 1, 10, 10);
	createWall(&unitModel, 1, 0-10,  0, 10, 10, 1);
	createWall(&unitModel, 1, 0-10, 11, 10, 10, 1);
	m_walls.setRelativityX(-32.0f*  5.5);
	m_walls.setRelativityY( 32.0f * 5.5);
	m_walls.setRelativityZ(-32.0f * 5.5);
	m_walls.setPosW(-1.0f);
	m_unit.add(&m_walls);
	m_world.setBackgroundColor(0.0f, 0.5f, 1.0f);
	m_camera.setY(-32.0f*15);
	//m_camera.setRotationZ(180.0f);
	//m_camera.setRotationY(180.0f);
	m_camera.setLeftHand(false);

	m_main.setShadow(true); 
	m_main.openFile("Breakout3D/Ball.MDO");
	m_main.setPosY(100.0f);
	m_main.setPosZ(-50.0f);
	m_main.setPosW(1.0f);
	m_unit.add(&m_main);

}
Esempio n. 8
0
void ColorWallLayer::createWall(int color)
{
	switch (color)
	{
	case -1:
		break;
	case RED:
		createWall("red.png")->color = color;
		break;

	case GREEN:
		createWall("green.png")->color = color;
		break;

	case BLUE:
		createWall("blue.png")->color = color;
		break;

	case YELLOW:
		createWall("yellow.png")->color = color;
		break;;

	case PINK:
		createWall("pink.png")->color = color;
		break;

	case CYAN:
		createWall("cyan.png")->color = color;
		break;
	}
}
Esempio n. 9
0
bool BrickBonus::init(Brick* brick, ID_BONUS id)
{
	if (!Brick::init(brick->getLevel(), brick->getPos().x, brick->getPos().y))
	{
		return false;
	}

	_id = id;
	_oldColor = _sprite->getColor();
	createWall();
	_canCreate = false;
	_isBlink = false;
	return true;
}
Esempio n. 10
0
bool GameLayer::init() {
  if (!BaseLayer::init()) {
    return false;
  }

  createWall();
  createBall();
  createPaddles();
  createGoals();
  createScores();

  start();

  return true;
}
Esempio n. 11
0
World::World() : world(b2Vec2(0.0f, 0.0f)) {
	ForestMapGenerator generator;

	map = generator.generate(*this);
	// tehdään seinät
	float tw = map->getTileWidth();
	float th = map->getTileHeight();
	float w = map->getWidth() * tw;
	float h = map->getHeight() * th;

	float desiredSize = 10.f;
	// center
	float c = desiredSize / 2.f;
	// koska origin
	float offset = -32.f;
	// ylä
	createWall(w / 2.f, offset - c, w, desiredSize, world);
	// vasen
	createWall(offset - c, h / 2.f,  desiredSize, h, world);
	// ala
	createWall(w / 2.f, h + offset + c, w, desiredSize, world);
	// oikea
	createWall(w + offset + c, h / 2.f, desiredSize, h, world);
}
Esempio n. 12
0
	void PlaypenApp::createTower(unsigned int width, unsigned int depth, 
		unsigned height, const opal::Vec3r& boxDim, 
		const opal::Matrix44r& baseTransform, const std::string& material)
	{
		for (unsigned int wall=0; wall<4; ++wall)
		{
			opal::Matrix44r wallBaseTransform = baseTransform;
			unsigned int length = 0;

			switch(wall)
			{
				case 0:
					length = width;
					wallBaseTransform.translate(
						-(opal::real)0.25 * boxDim[0], 0, 
						-(opal::real)0.5 * depth * boxDim[0]);
					break;
				case 1:
					length = width;
					wallBaseTransform.translate(
						(opal::real)0.25 * boxDim[0], 0, 
						(opal::real)0.5 * depth * boxDim[0]);
					wallBaseTransform.rotate(180, 0, 1, 0);
					break;
				case 2:
					length = depth;
					wallBaseTransform.translate(
						-(opal::real)0.5 * width * boxDim[0], 0, 0);
					wallBaseTransform.rotate(90, 0, 1, 0);
					wallBaseTransform.translate(
						-(opal::real)0.25 * boxDim[0], 0, 0);
					break;
				case 3:
					length = depth;
					wallBaseTransform.translate(
						(opal::real)0.5 * width * boxDim[0], 0, 0);
					wallBaseTransform.rotate(-90, 0, 1, 0);
					wallBaseTransform.translate(
						-(opal::real)0.25 * boxDim[0], 0, 0);
					break;
				default:
					assert(false);
					break;
			}

			createWall(length, height, boxDim, wallBaseTransform, material);
		}
	}
Esempio n. 13
0
void RenderScene(GLenum mode)
{
	glMatrixMode(GL_MODELVIEW);
	if(flag_light == 1)
	{
		glEnable(GL_LIGHTING);
		glEnable(GL_LIGHT0);
	}
	else
	{
		glDisable(GL_LIGHTING);
		glDisable(GL_LIGHT0);
	}
	glLightf(GL_LIGHT0, GL_CONSTANT_ATTENUATION, 1.5);
	glLightf(GL_LIGHT0, GL_LINEAR_ATTENUATION, 0);
	glLightfv(GL_LIGHT0, GL_AMBIENT, light_ambient);
	glLightfv(GL_LIGHT0, GL_DIFFUSE, light_diffuse);
	glLightfv(GL_LIGHT0, GL_SPECULAR, light_specular);
	glTranslatef(0.0,  - 2 * height, 0.0);
	glFrontFace(GL_CW);
	glScalef(1.0f,  -1.0f, 1.0f);

	glTranslatef(2 * movex / wide_screen, 2 * movey / height_screen, 2 * movez / wide_screen);
	glLightfv(GL_LIGHT0, GL_POSITION, light_postion);
	glTranslatef( -2 * movex / wide_screen,  -2 * movey / height_screen,  -2 * movez / wide_screen);

	createWall();
	createCeiling();
	createFurnishings();

	glScalef(1.0f,  -1.0f, 1.0f);
	glTranslatef(0.0, 2 * height, 0.0);
	glFrontFace(GL_CCW);

	glDisable(GL_LIGHTING);
	glEnable(GL_BLEND);
	glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);

	createGround();

	glDisable(GL_BLEND);
	glEnable(GL_LIGHTING);

	draw(mode);

}
Esempio n. 14
0
void draw(GLenum mode)
{
	glMatrixMode(GL_MODELVIEW);
	if(flag_light == 1)
	{
		glEnable(GL_LIGHTING);
		glEnable(GL_LIGHT0);
	}
	else
	{
		glDisable(GL_LIGHTING);
		glDisable(GL_LIGHT0);
	}

	createLightAndProxy(mode);
	createWall();
	createGround();
	// createCeiling();
	createFurnishings();
}
Esempio n. 15
0
File: main.c Progetto: nfaralli/SPH
void tmpAddWalls_2(System *sys){
  float minx,maxx;
  float miny,maxy;
  float minz,maxz;
  float v1[3],v2[3],v3[3],v4[3];
  float v5[3],v6[3],v7[3],v8[3];
  float v9[3];

  minx=-1;
  maxx=1;
  miny=-1;
  maxy=1;
  minz=-1;
  maxz=0;

  v1[0]=(minx+maxx)/2;  v1[1]=miny;           v1[2]=(minz+maxz)/2;
  v2[0]=maxx;           v2[1]=(miny+maxy)/2;  v2[2]=(minz+maxz)/2;
  v3[0]=(minx+maxx)/2;  v3[1]=maxy;           v3[2]=(minz+maxz)/2;
  v4[0]=minx;           v4[1]=(miny+maxy)/2;  v4[2]=(minz+maxz)/2;

  v5[0]=minx;  v5[1]=miny;  v5[2]=maxz;
  v6[0]=maxx;  v6[1]=miny;  v6[2]=maxz;
  v7[0]=maxx;  v7[1]=maxy;  v7[2]=maxz;
  v8[0]=minx;  v8[1]=maxy;  v8[2]=maxz;

  v9[0]=(minx+maxx)/2;  v9[1]=(miny+maxy)/2;  v9[2]=minz;

  addWall(sys,createWall(v1,v2,v9));
  addWall(sys,createWall(v1,v6,v2));
  addWall(sys,createWall(v2,v3,v9));
  addWall(sys,createWall(v2,v7,v3));
  addWall(sys,createWall(v3,v4,v9));
  addWall(sys,createWall(v3,v8,v4));
  addWall(sys,createWall(v4,v1,v9));
  addWall(sys,createWall(v4,v5,v1));
}
Esempio n. 16
0
/* creates and returns a structure System containing nbParts particles
 * */
System* createSystem(int nbParts, float minMax[3][2]){
  System *sys;
  int i,j;
  float v1[3],v2[3],v3[3];

  if(nbParts<=0) return NULL;
  for(i=0;i<3;i++)
    if(minMax[i][0]>=minMax[i][1])
      return NULL;
  if((sys=(System*)calloc(1,sizeof(System)))==NULL)
    return NULL;
  sys->time=0;
  sys->nbWalls=12;
  sys->walls=(Wall*)calloc(sys->nbWalls,sizeof(Wall));
  for(i=0;i<3;i++){
    for(j=0;j<2;j++)
      sys->boundaries[i][j]=minMax[i][j];
    for(j=0;j<4;j++){
      v1[i]=      minMax[i][(j==0||j==3)?0:1];
      v1[(i+1)%3]=minMax[(i+1)%3][(j==0||j==3)?0:1];
      v1[(i+2)%3]=minMax[(i+2)%3][1-(j>>1)];
      v2[i]=      minMax[i][j&1];
      v2[(i+1)%3]=minMax[(i+1)%3][1-(j&1)];
      v2[(i+2)%3]=minMax[(i+2)%3][1-(j>>1)];
      v3[i]=      minMax[i][(j==0||j==3)?1:0];
      v3[(i+1)%3]=minMax[(i+1)%3][(j==0||j==3)?1:0];
      v3[(i+2)%3]=minMax[(i+2)%3][1-(j>>1)];
      sys->walls[4*i+j]=createWall(v1,v2,v3);
    }
  }
  sys->nbParts=nbParts;
  if((sys->parts=(Particle*)calloc(nbParts,sizeof(Particle)))==NULL)
      return NULL;
  sys->prevStepCollisionTable=(unsigned char*)calloc(nbParts*(nbParts-1)/2,sizeof(unsigned char));
  sys->h=0.4;
  return sys;
}
bool SceneLoader::init()
{
	// Create all walls based on the matrix
	Ogre::Vector3 vecPos;
	for(int i = 0; i < mMatrixSize.x; i++)
	{
		for (int j = 0; j < mMatrixSize.y; j++)
		{
			if(mSceneMatrix[i][j] == 1)
			{
				vecPos = matrixCoordToSceneCoord(Ogre::Vector2(i*1.0f,j*1.0f));
				createWall(vecPos, mWallCubeScale);
			}	
		}
	}

	createFloor(mMatrixSize.x*mWallCubeScale, mMatrixSize.y*mWallCubeScale);

	createWalkArray();

//	mSceneRootNode->roll(Ogre::Degree(-90));

	return true;
}
Esempio n. 18
0
osg::Node* createRoom(osg::Node* loadedModel)
{
    // default scale for this model.
    osg::BoundingSphere bs(osg::Vec3(0.0f,0.0f,0.0f),1.0f);

    osg::Group* root = new osg::Group;

    if (loadedModel)
    {
        const osg::BoundingSphere& loaded_bs = loadedModel->getBound();

        osg::PositionAttitudeTransform* pat = new osg::PositionAttitudeTransform();
        pat->setPivotPoint(loaded_bs.center());

        pat->setUpdateCallback(new ModelTransformCallback(loaded_bs));
        pat->addChild(loadedModel);

        bs = pat->getBound();

        root->addChild(pat);

    }

    bs.radius()*=1.5f;

    // create a bounding box, which we'll use to size the room.
    osg::BoundingBox bb;
    bb.expandBy(bs);


    // create statesets.
    osg::StateSet* rootStateSet = new osg::StateSet;
    root->setStateSet(rootStateSet);

    osg::StateSet* wall = new osg::StateSet;
    wall->setMode(GL_CULL_FACE,osg::StateAttribute::ON);

    osg::StateSet* floor = new osg::StateSet;
    floor->setMode(GL_CULL_FACE,osg::StateAttribute::ON);

    osg::StateSet* roof = new osg::StateSet;
    roof->setMode(GL_CULL_FACE,osg::StateAttribute::ON);

    osg::Geode* geode = new osg::Geode;

    // create front side.
    geode->addDrawable(createWall(bb.corner(0),
                                  bb.corner(4),
                                  bb.corner(1),
                                  wall));

    // right side
    geode->addDrawable(createWall(bb.corner(1),
                                  bb.corner(5),
                                  bb.corner(3),
                                  wall));

    // left side
    geode->addDrawable(createWall(bb.corner(2),
                                  bb.corner(6),
                                  bb.corner(0),
                                  wall));
    // back side
    geode->addDrawable(createWall(bb.corner(3),
                                  bb.corner(7),
                                  bb.corner(2),
                                  wall));

    // floor
    geode->addDrawable(createWall(bb.corner(0),
                                  bb.corner(1),
                                  bb.corner(2),
                                  floor));

    // roof
    geode->addDrawable(createWall(bb.corner(6),
                                  bb.corner(7),
                                  bb.corner(4),
                                  roof));

    root->addChild(geode);

    root->addChild(createLights(bb,rootStateSet));

    return root;

}
Esempio n. 19
0
File: main.c Progetto: nfaralli/SPH
void tmpAddWalls_3(System *sys){
  float xmin,xmax;
  float ymin,ymax;
  float zmin,zmax; //position of wall
  float holeDim; //hole centered on (xmax+xmin)/2 and (ymin+ymax)/2
  float xmin2,xmax2;
  float ymin2,ymax2;
  float v[24][3];

  xmin=-1;
  xmax=1;
  ymin=-1;
  ymax=1;
  zmin=-0.3;
  zmax=0.3;
  holeDim=0.2;

  xmin2=(xmin+xmax)/2-holeDim/2;
  xmax2=(xmin+xmax)/2+holeDim/2;
  ymin2=(ymin+ymax)/2-holeDim/2;
  ymax2=(ymin+ymax)/2+holeDim/2;

  v[0][0]=xmin;    v[0][1]=ymin;   v[0][2]=zmin;
  v[1][0]=xmin;    v[1][1]=ymax;   v[1][2]=zmin;
  v[2][0]=xmax;    v[2][1]=ymax;   v[2][2]=zmin;
  v[3][0]=xmax;    v[3][1]=ymin;   v[3][2]=zmin;
  v[4][0]=xmin2;   v[4][1]=ymin2;  v[4][2]=zmin;
  v[5][0]=xmin2;   v[5][1]=ymax2;  v[5][2]=zmin;
  v[6][0]=xmax2;   v[6][1]=ymax2;  v[6][2]=zmin;
  v[7][0]=xmax2;   v[7][1]=ymin2;  v[7][2]=zmin;
  v[8][0]=xmin2;   v[8][1]=ymin;   v[8][2]=zmin;
  v[9][0]=xmin2;   v[9][1]=ymax;   v[9][2]=zmin;
  v[10][0]=xmax2;  v[10][1]=ymax;  v[10][2]=zmin;
  v[11][0]=xmax2;  v[11][1]=ymin;  v[11][2]=zmin;
  v[12][0]=xmin;   v[12][1]=ymin;  v[12][2]=zmax;
  v[13][0]=xmin;   v[13][1]=ymax;  v[13][2]=zmax;
  v[14][0]=xmax;   v[14][1]=ymax;  v[14][2]=zmax;
  v[15][0]=xmax;   v[15][1]=ymin;  v[15][2]=zmax;
  v[16][0]=xmin2;  v[16][1]=ymin2; v[16][2]=zmax;
  v[17][0]=xmin2;  v[17][1]=ymax2; v[17][2]=zmax;
  v[18][0]=xmax2;  v[18][1]=ymax2; v[18][2]=zmax;
  v[19][0]=xmax2;  v[19][1]=ymin2; v[19][2]=zmax;
  v[20][0]=xmin2;  v[20][1]=ymin;  v[20][2]=zmax;
  v[21][0]=xmin2;  v[21][1]=ymax;  v[21][2]=zmax;
  v[22][0]=xmax2;  v[22][1]=ymax;  v[22][2]=zmax;
  v[23][0]=xmax2;  v[23][1]=ymin;  v[23][2]=zmax;

  addWall(sys,createWall(v[0],v[1],v[9]));
  addWall(sys,createWall(v[0],v[9],v[8]));
  addWall(sys,createWall(v[5],v[9],v[10]));
  addWall(sys,createWall(v[5],v[10],v[6]));
  addWall(sys,createWall(v[8],v[4],v[7]));
  addWall(sys,createWall(v[8],v[7],v[11]));
  addWall(sys,createWall(v[11],v[10],v[2]));
  addWall(sys,createWall(v[11],v[2],v[3]));

  addWall(sys,createWall(v[12],v[21],v[13]));
  addWall(sys,createWall(v[12],v[20],v[21]));
  addWall(sys,createWall(v[17],v[22],v[21]));
  addWall(sys,createWall(v[17],v[18],v[22]));
  addWall(sys,createWall(v[20],v[19],v[16]));
  addWall(sys,createWall(v[20],v[23],v[19]));
  addWall(sys,createWall(v[23],v[14],v[22]));
  addWall(sys,createWall(v[23],v[15],v[14]));

  addWall(sys,createWall(v[4],v[16],v[19]));
  addWall(sys,createWall(v[4],v[19],v[7]));
  addWall(sys,createWall(v[5],v[18],v[17]));
  addWall(sys,createWall(v[5],v[6],v[18]));
  addWall(sys,createWall(v[5],v[17],v[16]));
  addWall(sys,createWall(v[5],v[16],v[4]));
  addWall(sys,createWall(v[6],v[19],v[18]));
  addWall(sys,createWall(v[6],v[7],v[19]));
}
Esempio n. 20
0
	void PlaypenApp::createObject(const std::string& material, ObjectType type)
	{
		switch(type)
		{
			case OBJECT_TYPE_BOX:
			{
				Ogre::Vector3 boxDim(5, 5, 5);
				opal::Solid* s = mSimulator->createSolid();
				s->setPosition(mCreationPoint);
				opal::BoxShapeData data;
				data.dimensions.set(boxDim[0], boxDim[1], boxDim[2]);
				s->addShape(data);
				createPhysicalEntityBox("", material, boxDim, s);
				break;
			}
			case OBJECT_TYPE_SPHERE:
			{
				Ogre::Real radius = 3; // testing
				opal::Solid* s = mSimulator->createSolid();
				s->setPosition(mCreationPoint);
				opal::SphereShapeData data;
				data.radius = radius;
				data.material.density = 1; // testing
				s->addShape(data);
				createPhysicalEntitySphere("", material, radius, s);
				break;
			}
			case OBJECT_TYPE_WALL:
			{
				opal::Matrix44r m;
				m.rotate(45, 0, 1, 0);
				m.translate(0, 0, -23);
				createWall(6, 8, opal::Vec3r(3, 1.5, 1.5), m, material);
				break;
			}
			case OBJECT_TYPE_TOWER:
			{
				createTower(2, 2, 15, opal::Vec3r(3, 1.5, 1.5), 
					opal::Matrix44r(), material);
				break;
			}
			case OBJECT_TYPE_RAGDOLL:
			{
				opal::Blueprint ragdollBP;
				opal::loadFile(ragdollBP, "../../data/blueprints/ragdoll.xml");
				opal::Matrix44r transform;
				transform.translate(mCreationPoint[0], mCreationPoint[1] - 5, 
					mCreationPoint[2]);

				// Instantiate the Blueprint.
				opal::BlueprintInstance instance;
				mSimulator->instantiateBlueprint(instance, ragdollBP, transform, 16);

				unsigned int i=0;
				for (i=0; i<instance.getNumSolids(); ++i)
				{
					opal::Solid* s = instance.getSolid(i);
					const opal::SolidData& data = s->getData();
					unsigned int j=0;
					for (j=0; j<data.getNumShapes(); ++j)
					{
						opal::ShapeData* shapeData = data.getShapeData(j);

						switch(shapeData->getType())
						{
							case opal::BOX_SHAPE:
							{
								opal::Vec3r dim = 
									((opal::BoxShapeData*)shapeData)->dimensions;
								Ogre::Vector3 boxDim(dim[0], dim[1], dim[2]);
								createPhysicalEntityBox("", material, 
									boxDim, s);
								break;
							}
							case opal::SPHERE_SHAPE:
							{
								opal::real r = 
									((opal::SphereShapeData*)shapeData)->radius;
								createPhysicalEntitySphere("", 
									material, r, s);
								break;
							}
							case opal::CAPSULE_SHAPE:
							{
								opal::real r = 
									((opal::CapsuleShapeData*)shapeData)->radius;
								opal::real l = 
									((opal::CapsuleShapeData*)shapeData)->length;
								createPhysicalEntityCapsule("", 
									material, r, l, s);
								break;
							}
							default:
								assert(false);
						}
					}
				}
				break;
			}
			default:
				assert(false);
				break;
		}
	}
Esempio n. 21
0
/**   after we define and instantiate our programs components   **/
int WINAPI WinMain(HINSTANCE hThisInstance, HINSTANCE hPrevInstance,
                    LPSTR lpszArgument, int nCmdShow)
{
    UNREFERENCED(lpszArgument);
    UNREFERENCED(hPrevInstance);
    /**   here messages to the application are saved   **/
    MSG messages;

   /**********************************************
    *                                            *
    *   create the main window - width, height   *
    *                                            *
    **********************************************/
    HWND hwnd = createMainWin(hThisInstance, 400, 600);

    /**   if main window handle is invalid alert and quit  **/
    if(!hwnd){
        // using wide string for the Unicode crowd
        MessageBox(NULL, _T(" can not create main window "),
                         _T(" WinBreakoutC++ "), MB_OK);

        /**   this in itself will end the program   **/
        PostQuitMessage(0);
    }

    /**   make the window visible on the screen   **/
    ShowWindow(hwnd, nCmdShow);

/**   some debugging code   **/
/**   with the following statements a Debug build target
      allows us to use printf and cout/printf to display data     **/
#ifdef _DEBUG
    if(!AllocConsole()){
        MessageBox(NULL, _T(" can not create console window "),
                         _T(" WinBreakoutC++ "), MB_OK);
    }
    freopen("CONOUT$","wb",stdout);  // reopen stout handle as console window output
#endif

    /**   get our windows rectangle so we can size things   **/
    GetClientRect(hwnd, &mwinRect);

    createBall(20, mwinRect.right / 2, mwinRect.bottom / 2);

    // TODO:  this needs to be from top with a re-sizable window
    createPaddle(mwinRect.bottom - 60, 40, 10);

    createWall(50);

    /**   run the message loop                        **/
    /**   It will run until GetMessage() returns 0.   **/
    /**   argument two is null we are listening to    **/
    /**   the thread not the window.  we get all      **/
    /**   messages.  this loop is the heart of our    **/
    /**   program pumping messages not blood          **/

    /**   messages is MSG structure that windows passes       **/
    /**   messages to our program defined in top of WinMain   **/
    while(GetMessage(&messages, NULL, 0, 0))
    {
        /**   Translate virtual-key messages into character messages   **/
        TranslateMessage(&messages);

        /**   Send message to WindowProcedure   **/
        DispatchMessage(&messages);
    }

    /**   The program return-value is 0                   **/
    /**   - The value that PostQuitMessage() gave was 0   **/
    /**   that's all folks                                **/
    return messages.wParam;
}
Esempio n. 22
0
bool loadSceneObjects(int sceneName)
{
	if (sceneName == SceneOne) // Initialise scene 1
	{
		//Alex and Stephen collaborated to create the scene and place objects in it

		// Check if a scene is still loaded, if there is, then destroy it
		if (Scene::m_currentScene != NULL)
		{
			Scene::m_currentScene->destroy();
		}

		// Create the scene object to add these GameObjects to
		Scene * Scene1 = new Scene(SceneOne);
		Scene1->setSceneIsActive(true);
		Scene::m_currentScene = Scene1;

		// Create the GameObject which will hold the main camera
		Scene1->setMainCamera(new GameObject());
		Scene1->getMainCamera()->setName("MainCamera");

		// Create the transform for the main camera GameObject
		Transform *t = new Transform();
		t->setPosition(vec3(0.0f, 10.0f, 50.0f));
		Scene1->getMainCamera()->setTransform(t);

		// Create the camera for the main camera GameObject
		Camera *c = new Camera();
		c->setAspectRatio((float)GetSystemMetrics(SM_CXSCREEN) / GetSystemMetrics(SM_CYSCREEN));
		c->setFOV(45.0f);
		c->setNearClip(0.1f);
		c->setFarClip(1000.0f);

		Scene1->getMainCamera()->setCamera(c);
		Scene1->getDisplayList()->push_back(Scene1->getMainCamera());

		// Create the GameObject which will hold the main light
		Scene1->setMainLight(new GameObject());
		Scene1->getMainLight()->setName("MainLight");

		// Create the transform for the main camera GameObject
		t = new Transform();
		t->setPosition(vec3(0.0f, 15.0f, 0.0f));
		Scene1->getMainLight()->setTransform(t);

		// Create the light for the main light GameObject
		Light *l = new Light();
		Scene1->getMainLight()->setLight(l);
		Scene1->getDisplayList()->push_back(Scene1->getMainLight());

		// Initialise all objects in displayList vector
		for (auto iter = Scene1->getDisplayList()->begin(); iter != Scene1->getDisplayList()->end(); iter++)
		{
			(*iter)->init();
		}

		////how to create an object and name it.
		//createBasicObject("anvil", 
		//	"anvil1",
		//	"armoredrecon_diff.png",
		//	"armoredrecon_spec.png",
		//	"armoredrecon_N.png",
		//	"armoredrecon_Height.png");
		////createBasicObject("anvil", "anvil2");

		//example code to move an object that was initialised - may make another method, one for each scene that will position and create all the objects needed for that scene
		//Scene::m_currentScene->findObject("anvil2")->getTransform()->setPosition(vec3(10.0f, 10.0f, 10.0f));
		//createBasicObject("Lantern");

		//Tank1 
		createBasicObject("armoredrecon", "Tank1", "armoredrecon_diff.png", "armoredrecon_spec.png", "armoredrecon_N.png", "armoredrecon_Height.png", "directional");
		Scene::m_currentScene->findObject("Tank1")->getTransform()->setPosition(vec3(0.0f, 0.0f, 300.0f));
		Scene::m_currentScene->findObject("Tank1")->getTransform()->setRotation(vec3(180.0f, 90.0f, 180.0f));
		Scene::m_currentScene->findObject("Tank1")->getTransform()->setScale(vec3(10.0f, 10.0f, 10.0f));

		////Tank2 
		//createBasicObject("Tank1", "Tank2", "Tank1_D.png", "Tank1_S.png", "Tank1_N.png", "Tank1_H.png", "point");
		//Scene::m_currentScene->findObject("Tank2")->getTransform()->setPosition(vec3(20.0f, -1.0f, 0.0f));
		//Scene::m_currentScene->findObject("Tank2")->getTransform()->setRotation(vec3(180.0f, 90.0f, 180.0f));
		//Scene::m_currentScene->findObject("Tank2")->getTransform()->setScale(vec3(1.5f, 1.5f, 1.5f));

		////Tank3 
		//createBasicObject("Tank1", "Tank3", "Tank1_D.png", "Tank1_S.png", "Tank1_N.png", "Tank1_H.png", "point");
		//Scene::m_currentScene->findObject("Tank3")->getTransform()->setPosition(vec3(-20.0f, -1.0f, 0.0f));
		//Scene::m_currentScene->findObject("Tank3")->getTransform()->setRotation(vec3(180.0f, 90.0f, 180.0f));
		//Scene::m_currentScene->findObject("Tank3")->getTransform()->setScale(vec3(1.5f, 1.5f, 1.5f));

#pragma region Ammo_Box_Models
		//Front of street
		////Ammo1
		createBasicObject("Ammo_Box", "Ammo_Box1", "Ammo_BoxD.png", "Ammo_BoxS.png", "Ammo_BoxN.png", "", "bump");
		Scene::m_currentScene->findObject("Ammo_Box1")->getTransform()->setPosition(vec3(-23.0f, 8.0f, -225.0f));
		Scene::m_currentScene->findObject("Ammo_Box1")->getTransform()->setRotation(vec3(180.0f, 90.0f, 180.0f));
		Scene::m_currentScene->findObject("Ammo_Box1")->getTransform()->setScale(vec3(0.1f, 0.1f, 0.1f));

		////Ammo2
		createBasicObject("Ammo_Box", "Ammo_Box2", "Ammo_BoxD.png", "Ammo_BoxS.png", "Ammo_BoxN.png", "", "bump");
		Scene::m_currentScene->findObject("Ammo_Box2")->getTransform()->setPosition(vec3(27.0f, 8.0f, -225.0f));
		Scene::m_currentScene->findObject("Ammo_Box2")->getTransform()->setRotation(vec3(180.0f, 90.0f, 180.0f));
		Scene::m_currentScene->findObject("Ammo_Box2")->getTransform()->setScale(vec3(0.1f, 0.1f, 0.1f));

		////Ammo3
		createBasicObject("Ammo_Box", "Ammo_Box3", "Ammo_BoxD.png", "Ammo_BoxS.png", "Ammo_BoxN.png", "", "bump");
		Scene::m_currentScene->findObject("Ammo_Box3")->getTransform()->setPosition(vec3(75.0f, 8.0f, -25.0f));
		Scene::m_currentScene->findObject("Ammo_Box3")->getTransform()->setRotation(vec3(180.0f, 90.0f, 180.0f));
		Scene::m_currentScene->findObject("Ammo_Box3")->getTransform()->setScale(vec3(0.1f, 0.1f, 0.1f));

		////Ammo4
		createBasicObject("Ammo_Box", "Ammo_Box4", "Ammo_BoxD.png", "Ammo_BoxS.png", "Ammo_BoxN.png", "", "bump");
		Scene::m_currentScene->findObject("Ammo_Box4")->getTransform()->setPosition(vec3(-75.0f, 8.0f, -25.0f));
		Scene::m_currentScene->findObject("Ammo_Box4")->getTransform()->setRotation(vec3(180.0f, 90.0f, 180.0f));
		Scene::m_currentScene->findObject("Ammo_Box4")->getTransform()->setScale(vec3(0.1f, 0.1f, 0.1f));

		//Back of street
		////Ammo5
		createBasicObject("Ammo_Box", "Ammo_Box5", "Ammo_BoxD.png", "Ammo_BoxS.png", "Ammo_BoxN.png", "", "bump");
		Scene::m_currentScene->findObject("Ammo_Box5")->getTransform()->setPosition(vec3(-25.0f, 8.0f, 230.0f));
		Scene::m_currentScene->findObject("Ammo_Box5")->getTransform()->setRotation(vec3(180.0f, 90.0f, 180.0f));
		Scene::m_currentScene->findObject("Ammo_Box5")->getTransform()->setScale(vec3(0.1f, 0.1f, 0.1f));

		////Ammo6
		createBasicObject("Ammo_Box", "Ammo_Box6", "Ammo_BoxD.png", "Ammo_BoxS.png", "Ammo_BoxN.png", "", "bump");
		Scene::m_currentScene->findObject("Ammo_Box6")->getTransform()->setPosition(vec3(30.0f, 8.0f, 230.0f));
		Scene::m_currentScene->findObject("Ammo_Box6")->getTransform()->setRotation(vec3(180.0f, 90.0f, 180.0f));
		Scene::m_currentScene->findObject("Ammo_Box6")->getTransform()->setScale(vec3(0.1f, 0.1f, 0.1f));

		////Ammo7
		createBasicObject("Ammo_Box", "Ammo_Box7", "Ammo_BoxD.png", "Ammo_BoxS.png", "Ammo_BoxN.png", "", "bump");
		Scene::m_currentScene->findObject("Ammo_Box7")->getTransform()->setPosition(vec3(75.0f, 8.0f, 50.0f));
		Scene::m_currentScene->findObject("Ammo_Box7")->getTransform()->setRotation(vec3(180.0f, 90.0f, 180.0f));
		Scene::m_currentScene->findObject("Ammo_Box7")->getTransform()->setScale(vec3(0.1f, 0.1f, 0.1f));

		////Ammo8
		createBasicObject("Ammo_Box", "Ammo_Box8", "Ammo_BoxD.png", "Ammo_BoxS.png", "Ammo_BoxN.png", "", "bump");
		Scene::m_currentScene->findObject("Ammo_Box8")->getTransform()->setPosition(vec3(-75.0f, 8.0f, 50.0f));
		Scene::m_currentScene->findObject("Ammo_Box8")->getTransform()->setRotation(vec3(180.0f, 90.0f, 180.0f));
		Scene::m_currentScene->findObject("Ammo_Box8")->getTransform()->setScale(vec3(0.1f, 0.1f, 0.1f));
#pragma endregion

#pragma region Barrel_Models
		//Front of street
		////Middle Barrel
		createBasicObject("barrel", "barrel1", "barrelD.png", "barrelS.png", "barrelN.png", "", "bump"); 
		Scene::m_currentScene->findObject("barrel1")->getTransform()->setPosition(vec3(-23.0f, -1.0f, -225.0f));
		Scene::m_currentScene->findObject("barrel1")->getTransform()->setRotation(vec3(180.0f, 90.0f, 180.0f));
		Scene::m_currentScene->findObject("barrel1")->getTransform()->setScale(vec3(0.1f, 0.1f, 0.1f));

		////Middle Barrel2
		createBasicObject("barrel", "barrel2", "barrelD.png", "barrelS.png", "barrelN.png", "", "bump");
		Scene::m_currentScene->findObject("barrel2")->getTransform()->setPosition(vec3(27.0f, -1.0f, -225.0f));
		Scene::m_currentScene->findObject("barrel2")->getTransform()->setRotation(vec3(180.0f, 90.0f, 180.0f));
		Scene::m_currentScene->findObject("barrel2")->getTransform()->setScale(vec3(0.1f, 0.1f, 0.1f));

		////Left Barrel3
		createBasicObject("barrel", "barrel3", "barrelD.png", "barrelS.png", "barrelN.png", "", "bump");
		Scene::m_currentScene->findObject("barrel3")->getTransform()->setPosition(vec3(75.0f, -1.0f, -25.0f));
		Scene::m_currentScene->findObject("barrel3")->getTransform()->setRotation(vec3(180.0f, 90.0f, 180.0f));
		Scene::m_currentScene->findObject("barrel3")->getTransform()->setScale(vec3(0.1f, 0.1f, 0.1f));

		////Right Barrel4
		createBasicObject("barrel", "barrel4", "barrelD.png", "barrelS.png", "barrelN.png", "", "bump");
		Scene::m_currentScene->findObject("barrel4")->getTransform()->setPosition(vec3(-75.0f, -1.0f, -25.0f));
		Scene::m_currentScene->findObject("barrel4")->getTransform()->setRotation(vec3(180.0f, 90.0f, 180.0f));
		Scene::m_currentScene->findObject("barrel4")->getTransform()->setScale(vec3(0.1f, 0.1f, 0.1f));

		//Back of street
		////Middle Barrel
		createBasicObject("barrel", "barrel5", "barrelD.png", "barrelS.png", "barrelN.png", "", "bump");
		Scene::m_currentScene->findObject("barrel5")->getTransform()->setPosition(vec3(-25.0f, -1.0f, 230.0f));
		Scene::m_currentScene->findObject("barrel5")->getTransform()->setRotation(vec3(180.0f, 90.0f, 180.0f));
		Scene::m_currentScene->findObject("barrel5")->getTransform()->setScale(vec3(0.1f, 0.1f, 0.1f));

		////Middle Barrel2
		createBasicObject("barrel", "barrel6", "barrelD.png", "barrelS.png", "barrelN.png", "", "bump");
		Scene::m_currentScene->findObject("barrel6")->getTransform()->setPosition(vec3(30.0f, -1.0f, 230.0f));
		Scene::m_currentScene->findObject("barrel6")->getTransform()->setRotation(vec3(180.0f, 90.0f, 180.0f));
		Scene::m_currentScene->findObject("barrel6")->getTransform()->setScale(vec3(0.1f, 0.1f, 0.1f));

		////Left Barrel3
		createBasicObject("barrel", "barrel7", "barrelD.png", "barrelS.png", "barrelN.png", "", "bump");
		Scene::m_currentScene->findObject("barrel7")->getTransform()->setPosition(vec3(75.0f, -1.0f, 50.0f));
		Scene::m_currentScene->findObject("barrel7")->getTransform()->setRotation(vec3(180.0f, 90.0f, 180.0f));
		Scene::m_currentScene->findObject("barrel7")->getTransform()->setScale(vec3(0.1f, 0.1f, 0.1f));

		////Right Barrel4
		createBasicObject("barrel", "barrel8", "barrelD.png", "barrelS.png", "barrelN.png", "", "bump");
		Scene::m_currentScene->findObject("barrel8")->getTransform()->setPosition(vec3(-75.0f, -1.0f, 50.0f));
		Scene::m_currentScene->findObject("barrel8")->getTransform()->setRotation(vec3(180.0f, 90.0f, 180.0f));
		Scene::m_currentScene->findObject("barrel8")->getTransform()->setScale(vec3(0.1f, 0.1f, 0.1f));
#pragma endregion

#pragma region Extra_Models
		////Sword1
		createBasicObject("sword", "sword1", "sword_D.png", "sword_S.png", "sword_N.png", "sword_Height.png", "directional");
		Scene::m_currentScene->findObject("sword1")->getTransform()->setPosition(vec3(-32.5f, 20.0f, -219.5f));
		Scene::m_currentScene->findObject("sword1")->getTransform()->setRotation(vec3(90.0f, 180.0f, 90.0f));
		Scene::m_currentScene->findObject("sword1")->getTransform()->setScale(vec3(0.1f, 0.1f, 0.1f));

		////Sheild
		createBasicObject("shield", "shield1", "shield_D.png", "shield_S.png", "shield_N.png", "shield_Height.png", "directional");
		Scene::m_currentScene->findObject("shield1")->getTransform()->setPosition(vec3(36.5f, 20.0f, -219.5f));
		Scene::m_currentScene->findObject("shield1")->getTransform()->setRotation(vec3(90.0f, 180.0f, 180.0f));
		Scene::m_currentScene->findObject("shield1")->getTransform()->setScale(vec3(0.1f, 0.1f, 0.1f));
#pragma endregion

#pragma region front_of_street

		 //the gate that blocks the front of the street
		createBasicObject("wall_gate_lod", "blacksmith_house1", "lod_gate.png", "lod_gate.png", "lod_gate.png", "lod_gate.png", "directional");
		Scene::m_currentScene->findObject("blacksmith_house1")->getTransform()->setPosition(vec3(0.0f, -1.0f, 250));
		Scene::m_currentScene->findObject("blacksmith_house1")->getTransform()->setRotation(vec3(90.0f, 180.0f, 180.0f));
		Scene::m_currentScene->findObject("blacksmith_house1")->getTransform()->setScale(vec3(50.0f, 50.0f, 50.0f));

#pragma endregion

#pragma region left_side_of_street

		////house 1
		createBasicObject("fachwerkhaus8_LOD", "lefthouse1", "LOD_f_8.png", "LOD_f_8.png", "LOD_f_8.png", "LOD_f_8.png", "directional");
		Scene::m_currentScene->findObject("lefthouse1")->getTransform()->setPosition(vec3(-105.0f, -1.0f, -262.0f));
		Scene::m_currentScene->findObject("lefthouse1")->getTransform()->setRotation(vec3(90.0f, 180.0f, 270.0f));
		Scene::m_currentScene->findObject("lefthouse1")->getTransform()->setScale(vec3(0.25f, 0.25f, 0.25f));

		////house 2
		createBasicObject("fachwerkhaus8_LOD", "lefthouse2", "LOD_f_8.png", "LOD_f_8.png", "LOD_f_8.png", "LOD_f_8.png", "directional");
		Scene::m_currentScene->findObject("lefthouse2")->getTransform()->setPosition(vec3(-105.0f, -1.0f, -195.0f));
		Scene::m_currentScene->findObject("lefthouse2")->getTransform()->setRotation(vec3(90.0f, 180.0f, 270.0f));
		Scene::m_currentScene->findObject("lefthouse2")->getTransform()->setScale(vec3(0.25f, 0.25f, 0.25f));

		//// House3
		createBasicObject("fachwerkhaus10_LOD", "lefthouse3", "LOD_f_10.png", "LOD_f_10.png", "LOD_f_10.png", "LOD_f_10.png", "directional");
		Scene::m_currentScene->findObject("lefthouse3")->getTransform()->setPosition(vec3(-105.0f, -1.0f, -150.0f));
		Scene::m_currentScene->findObject("lefthouse3")->getTransform()->setRotation(vec3(90.0f, 180.0f, 270.0f));
		Scene::m_currentScene->findObject("lefthouse3")->getTransform()->setScale(vec3(0.25f, 0.25f, 0.25f));

		//// House4
		createBasicObject("fachwerkhaus10_LOD", "lefthouse4", "LOD_f_10.png", "LOD_f_10.png", "LOD_f_10.png", "LOD_f_10.png", "directional");
		Scene::m_currentScene->findObject("lefthouse4")->getTransform()->setPosition(vec3(-105.0f, -1.0f, -75.0f));
		Scene::m_currentScene->findObject("lefthouse4")->getTransform()->setRotation(vec3(90.0f, 180.0f, 270.0f));
		Scene::m_currentScene->findObject("lefthouse4")->getTransform()->setScale(vec3(0.25f, 0.25f, 0.25f));

		//// House5
		createBasicObject("fachwerkhaus11_LOD", "lefthouse5", "LOD_f_11.png", "LOD_f_11.png", "LOD_f_11.png", "LOD_f_11.png", "directional");
		Scene::m_currentScene->findObject("lefthouse5")->getTransform()->setPosition(vec3(-120.0f, -1.0f, 0.0f));
		Scene::m_currentScene->findObject("lefthouse5")->getTransform()->setRotation(vec3(90.0f, 180.0f, 270.0f));
		Scene::m_currentScene->findObject("lefthouse5")->getTransform()->setScale(vec3(0.25f, 0.25f, 0.25f));

		////house 6
		createBasicObject("fachwerkhaus8_LOD", "lefthouse6", "LOD_f_8.png", "LOD_f_8.png", "LOD_f_8.png", "LOD_f_8.png", "directional");
		Scene::m_currentScene->findObject("lefthouse6")->getTransform()->setPosition(vec3(-105.0f, -1.0f, 60.0f));
		Scene::m_currentScene->findObject("lefthouse6")->getTransform()->setRotation(vec3(90.0f, 180.0f, 270.0f));
		Scene::m_currentScene->findObject("lefthouse6")->getTransform()->setScale(vec3(0.25f, 0.25f, 0.25f));

		//// House5
		createBasicObject("fachwerkhaus11_LOD", "lefthouse7", "LOD_f_11.png", "LOD_f_11.png", "LOD_f_11.png", "LOD_f_11.png", "directional");
		Scene::m_currentScene->findObject("lefthouse7")->getTransform()->setPosition(vec3(-120.0f, -1.0f, 100.0f));
		Scene::m_currentScene->findObject("lefthouse7")->getTransform()->setRotation(vec3(90.0f, 180.0f, 270.0f));
		Scene::m_currentScene->findObject("lefthouse7")->getTransform()->setScale(vec3(0.25f, 0.25f, 0.25f));

		//// House5
		createBasicObject("fachwerkhaus11_LOD", "lefthouse8", "LOD_f_11.png", "LOD_f_11.png", "LOD_f_11.png", "LOD_f_11.png", "directional");
		Scene::m_currentScene->findObject("lefthouse8")->getTransform()->setPosition(vec3(-120.0f, -1.0f, 142.0f));
		Scene::m_currentScene->findObject("lefthouse8")->getTransform()->setRotation(vec3(90.0f, 180.0f, 270.0f));
		Scene::m_currentScene->findObject("lefthouse8")->getTransform()->setScale(vec3(0.25f, 0.25f, 0.25f));

		//// House5
		createBasicObject("fachwerkhaus11_LOD", "lefthouse9", "LOD_f_11.png", "LOD_f_11.png", "LOD_f_11.png", "LOD_f_11.png", "directional");
		Scene::m_currentScene->findObject("lefthouse9")->getTransform()->setPosition(vec3(-120.0f, -1.0f, 184.0f));
		Scene::m_currentScene->findObject("lefthouse9")->getTransform()->setRotation(vec3(90.0f, 180.0f, 270.0f));
		Scene::m_currentScene->findObject("lefthouse9")->getTransform()->setScale(vec3(0.25f, 0.25f, 0.25f));

#pragma endregion

#pragma region right_side_of_street

		//wont render because the directional lighting if broken :(
		//my point lights light up tanks etc perfectly fine but do nothing to houses even when using correct shaders

		////house 1
		createBasicObject("fachwerkhaus8_LOD", "righthouse1", "LOD_f_8.png", "LOD_f_8.png", "LOD_f_8.png", "LOD_f_8.png", "directional");
		Scene::m_currentScene->findObject("righthouse1")->getTransform()->setPosition(vec3(100.0f, -1.0f, -262.0f));
		Scene::m_currentScene->findObject("righthouse1")->getTransform()->setRotation(vec3(90.0f, 180.0f, 270.0f));
		Scene::m_currentScene->findObject("righthouse1")->getTransform()->setScale(vec3(0.25f, 0.25f, 0.25f));

		////house 2
		createBasicObject("fachwerkhaus8_LOD", "righthouse2", "LOD_f_8.png", "LOD_f_8.png", "LOD_f_8.png", "LOD_f_8.png", "directional");
		Scene::m_currentScene->findObject("righthouse2")->getTransform()->setPosition(vec3(100.0f, -1.0f, -195.0f));
		Scene::m_currentScene->findObject("righthouse2")->getTransform()->setRotation(vec3(90.0f, 180.0f, 270.0f));
		Scene::m_currentScene->findObject("righthouse2")->getTransform()->setScale(vec3(0.25f, 0.25f, 0.25f));

		//// House3
		createBasicObject("fachwerkhaus10_LOD", "righthouse3", "LOD_f_10.png", "LOD_f_10.png", "LOD_f_10.png", "LOD_f_10.png", "directional");
		Scene::m_currentScene->findObject("righthouse3")->getTransform()->setPosition(vec3(200.0f, -1.0f, -150.0f));
		Scene::m_currentScene->findObject("righthouse3")->getTransform()->setRotation(vec3(90.0f, 180.0f, 270.0f));
		Scene::m_currentScene->findObject("righthouse3")->getTransform()->setScale(vec3(0.25f, 0.25f, 0.25f));

		//// House4
		createBasicObject("fachwerkhaus10_LOD", "righthouse4", "LOD_f_10.png", "LOD_f_10.png", "LOD_f_10.png", "LOD_f_10.png", "directional");
		Scene::m_currentScene->findObject("righthouse4")->getTransform()->setPosition(vec3(200.0f, -1.0f, -75.0f));
		Scene::m_currentScene->findObject("righthouse4")->getTransform()->setRotation(vec3(90.0f, 180.0f, 270.0f));
		Scene::m_currentScene->findObject("righthouse4")->getTransform()->setScale(vec3(0.25f, 0.25f, 0.25f));

		//// House5
		createBasicObject("fachwerkhaus11_LOD", "righthouse5", "LOD_f_11.png", "LOD_f_11.png", "LOD_f_11.png", "LOD_f_11.png", "directional");
		Scene::m_currentScene->findObject("righthouse5")->getTransform()->setPosition(vec3(115.0f, -1.0f, 0.0f));
		Scene::m_currentScene->findObject("righthouse5")->getTransform()->setRotation(vec3(90.0f, 180.0f, 270.0f));
		Scene::m_currentScene->findObject("righthouse5")->getTransform()->setScale(vec3(0.25f, 0.25f, 0.25f));

		////house 6
		createBasicObject("fachwerkhaus8_LOD", "righthouse6", "LOD_f_8.png", "LOD_f_8.png", "LOD_f_8.png", "LOD_f_8.png", "directional");
		Scene::m_currentScene->findObject("righthouse6")->getTransform()->setPosition(vec3(100.0f, -1.0f, 60.0f));
		Scene::m_currentScene->findObject("righthouse6")->getTransform()->setRotation(vec3(90.0f, 180.0f, 270.0f));
		Scene::m_currentScene->findObject("righthouse6")->getTransform()->setScale(vec3(0.25f, 0.25f, 0.25f));

		//// House5
		createBasicObject("fachwerkhaus11_LOD", "righthouse7", "LOD_f_11.png", "LOD_f_11.png", "LOD_f_11.png", "LOD_f_11.png", "directional");
		Scene::m_currentScene->findObject("righthouse7")->getTransform()->setPosition(vec3(125.0f, -1.0f, 100.0f));
		Scene::m_currentScene->findObject("righthouse7")->getTransform()->setRotation(vec3(90.0f, 180.0f, 270.0f));
		Scene::m_currentScene->findObject("righthouse7")->getTransform()->setScale(vec3(0.25f, 0.25f, 0.25f));

		//// House5
		createBasicObject("fachwerkhaus11_LOD", "righthouse8", "LOD_f_11.png", "LOD_f_11.png", "LOD_f_11.png", "LOD_f_11.png", "directional");
		Scene::m_currentScene->findObject("righthouse8")->getTransform()->setPosition(vec3(125.0f, -1.0f, 142.0f));
		Scene::m_currentScene->findObject("righthouse8")->getTransform()->setRotation(vec3(90.0f, 180.0f, 270.0f));
		Scene::m_currentScene->findObject("righthouse8")->getTransform()->setScale(vec3(0.25f, 0.25f, 0.25f));

		//// House5
		createBasicObject("fachwerkhaus11_LOD", "righthouse9", "LOD_f_11.png", "LOD_f_11.png", "LOD_f_11.png", "LOD_f_11.png", "directional");
		Scene::m_currentScene->findObject("righthouse9")->getTransform()->setPosition(vec3(125.0f, -1.0f, 184.0f));
		Scene::m_currentScene->findObject("righthouse9")->getTransform()->setRotation(vec3(90.0f, 180.0f, 270.0f));
		Scene::m_currentScene->findObject("righthouse9")->getTransform()->setScale(vec3(0.25f, 0.25f, 0.25f));

#pragma endregion

#pragma region back_of_street

		//// mosque
		createBasicObject("mosque_lod", "mosque", "lod_mos1.png", "lod_mos1.png", "lod_mos1.png", "lod_mos1.png", "directional");
		Scene::m_currentScene->findObject("mosque")->getTransform()->setPosition(vec3(0.0f, -2.0f, -400.0f));
		Scene::m_currentScene->findObject("mosque")->getTransform()->setRotation(vec3(90.0f, 180.0f, 180.0f));
		Scene::m_currentScene->findObject("mosque")->getTransform()->setScale(vec3(10.0f, 10.0f, 10.0f));

#pragma endregion

#pragma region floor objects
		// the massive ground plane
		createBasicObject("Ground", "floor", "s_3S.png", "s_3N.png", "s_3D.png", "s_3S.png", "directional");
		Scene::m_currentScene->findObject("floor")->getTransform()->setPosition(vec3(0.0f, -1.5f, 0.0f));
		Scene::m_currentScene->findObject("floor")->getTransform()->setRotation(vec3(90.0f, 180.0f, 180.0f));
		Scene::m_currentScene->findObject("floor")->getTransform()->setScale(vec3(1.0f, 1.0f, 1.0f));

		// the smaller ground plane
		createBasicObject("Ground", "floor2", "s_3S.png", "s_3N.png", "s_3D.png", "s_3S.png", "directional");
		Scene::m_currentScene->findObject("floor2")->getTransform()->setPosition(vec3(0.0f, 0.0f, 0.0f));
		Scene::m_currentScene->findObject("floor2")->getTransform()->setRotation(vec3(90.0f, 180.0f, 180.0f));
		Scene::m_currentScene->findObject("floor2")->getTransform()->setScale(vec3(0.1f, 0.1f, 0.1f));

		// the second smaller ground plane
		createBasicObject("Ground", "floor3", "s_3S.png", "s_3N.png", "s_3D.png", "s_3S.png", "directional");
		Scene::m_currentScene->findObject("floor3")->getTransform()->setPosition(vec3(0.0f, 0.0f, 197.0f));
		Scene::m_currentScene->findObject("floor3")->getTransform()->setRotation(vec3(90.0f, 180.0f, 180.0f));
		Scene::m_currentScene->findObject("floor3")->getTransform()->setScale(vec3(0.1f, 0.1f, 0.1f));

		// the third smaller ground plane
		createBasicObject("Ground", "floor4", "s_3S.png", "s_3N.png", "s_3D.png", "s_3S.png", "directional");
		Scene::m_currentScene->findObject("floor4")->getTransform()->setPosition(vec3(0.0f, -1.0f, -197.0f));
		Scene::m_currentScene->findObject("floor4")->getTransform()->setRotation(vec3(90.0f, 180.0f, 180.0f));
		Scene::m_currentScene->findObject("floor4")->getTransform()->setScale(vec3(0.1f, 0.1f, 0.1f));

		//a plane
		createWall("wall1", "simpleVS", "simpleFS");
		Scene::m_currentScene->findObject("wall1")->getTransform()->setPosition(vec3(0.0f, 100.0f, 50.0f));
		Scene::m_currentScene->findObject("wall1")->getTransform()->setScale(vec3(10.0f, 10.0f, 10.0f));
#pragma endregion

		return true;
	}

	else if (sceneName == SceneTwo) // Initialise scene 2
	{
		//scene 2 is there to show off the point light progress that was made, it also shows that we can switch between multiple scenes quite easily
		//Elliot implemented the scene managment and Alex implemented the scenes

		// Check if a scene is still loaded, if there is, then destroy it
		if (Scene::m_currentScene != NULL)
		{
			Scene::m_currentScene->destroy();
		}

		// Create the scene object to add these GameObjects to
		Scene * Scene2 = new Scene(SceneTwo);
		Scene2->setSceneIsActive(true);
		Scene::m_currentScene = Scene2;

		// Create the GameObject which will hold the main camera
		Scene2->setMainCamera(new GameObject());
		Scene2->getMainCamera()->setName("MainCamera");

		// Create the transform for the main camera GameObject
		Transform *t = new Transform();
		t->setPosition(vec3(0.0f, 10.0f, 50.0f));
		Scene2->getMainCamera()->setTransform(t);

		// Create the camera for the main camera GameObject
		Camera *c = new Camera();
		c->setAspectRatio((float)GetSystemMetrics(SM_CXSCREEN) / GetSystemMetrics(SM_CYSCREEN));
		c->setFOV(45.0f);
		c->setNearClip(0.1f);
		c->setFarClip(1000.0f);

		Scene2->getMainCamera()->setCamera(c);
		Scene2->getDisplayList()->push_back(Scene2->getMainCamera());

		// Create the GameObject which will hold the main light
		Scene2->setMainLight(new GameObject());
		Scene2->getMainLight()->setName("MainLight");

		// Create the transform for the main camera GameObject
		t = new Transform();
		t->setPosition(vec3(0.0f, 0.0f, 0.0f));
		Scene2->getMainLight()->setTransform(t);

		// Create the light for the main light GameObject
		Light *l = new Light();
		Scene2->getMainLight()->setLight(l);
		Scene2->getDisplayList()->push_back(Scene2->getMainLight());

		// Initialise all objects in displayList vector
		for (auto iter = Scene2->getDisplayList()->begin(); iter != Scene2->getDisplayList()->end(); iter++)
		{
			(*iter)->init();
		}

		//point light follows the camera, will light up and fade away the car depending on distance from it	
		createBasicObject("armoredrecon", "vehicle", "armoredrecon_diff.png", "armoredrecon_spec.png", "armoredrecon_N.png", "armoredrecon_Height.png", "point");
		Scene::m_currentScene->findObject("vehicle")->getTransform()->setScale(vec3(5, 5, 5));

		return true;
	}
	return false;
}
Esempio n. 23
0
Prop* PropFactory::createWall(){
	return createWall(100);
}
Esempio n. 24
0
	bool PlaypenApp::processUnbufferedKeyInput(Ogre::Real dt)
	{
		// Check if we should quit looping.
		if(mKeyboard->isKeyDown(OIS::KC_ESCAPE) 
			|| mKeyboard->isKeyDown(OIS::KC_Q))
		{
			return false;
		}

		// Check if we should pause physics.
		if(mKeyboard->isKeyDown(OIS::KC_P) && mTimeUntilNextToggle <= 0)
		{
			mPaused = !mPaused;

			// Reset the timer for toggle keys.
			mTimeUntilNextToggle = 0.5;
		}

		// Reset the scene.
		if(mKeyboard->isKeyDown(OIS::KC_R))
		{
			// Make sure the PhysicalCamera isn't grabbing anything.
			mPhysicalCamera->release();
			destroyAllPhysicalEntities();
			setupInitialPhysicalEntities();
		}

		// Create various types of objects when the number keys are 
		// pressed.

		// Create a box.
		if(mKeyboard->isKeyDown(OIS::KC_1) && mTimeUntilNextToggle <= 0)
		{
			Ogre::Vector3 boxDim(3, 3, 3);
			opal::Solid* s = mSimulator->createSolid();
			s->setPosition(mCreationPoint);
			opal::BoxShapeData data;
			data.dimensions.set(boxDim[0], boxDim[1], boxDim[2]);
			s->addShape(data);
			createPhysicalEntityBox("", "Plastic/Yellow", boxDim, s);

			// Reset the timer for toggle keys.
			mTimeUntilNextToggle = 0.3;
		}

		// Create a sphere.
		if(mKeyboard->isKeyDown(OIS::KC_2) && mTimeUntilNextToggle <= 0)
		{
			Ogre::Real radius = 2;
			opal::Solid* s = mSimulator->createSolid();
			s->setPosition(mCreationPoint);
			opal::SphereShapeData data;
			data.radius = radius;
			s->addShape(data);
			createPhysicalEntitySphere("", "Plastic/Purple", radius, s);

			// Reset the timer for toggle keys.
			mTimeUntilNextToggle = 0.3;
		}

		// Create a capsule.
		if(mKeyboard->isKeyDown(OIS::KC_3) && mTimeUntilNextToggle <= 0)
		{
			Ogre::Real radius = 2;
			Ogre::Real length = 5;
			opal::Solid* s = mSimulator->createSolid();
			s->setPosition(mCreationPoint);
			opal::CapsuleShapeData data;
			data.radius = radius;
			data.length = length;
			s->addShape(data);
			createPhysicalEntityCapsule("", "Plastic/Red", radius, length, s);

			// Reset the timer for toggle keys.
			mTimeUntilNextToggle = 0.3;
		}

		// Create a cylinder.
		if(mKeyboard->isKeyDown(OIS::KC_4) && mTimeUntilNextToggle <= 0)
		{
			Ogre::Real radius = 3;
			Ogre::Real length = 5;
			opal::Solid* s = mSimulator->createSolid();
			s->setPosition(mCreationPoint);
			opal::CylinderShapeData data;
			data.radius = radius;
			data.length = length;
			s->addShape(data);
			createPhysicalEntityCylinder("", "Plastic/Blue", radius, length, s);

			// Reset the timer for toggle keys.
			mTimeUntilNextToggle = 0.3;
		}

		// Create a long box.
		if(mKeyboard->isKeyDown(OIS::KC_5) && mTimeUntilNextToggle <= 0)
		{
			Ogre::Vector3 boxDim(2, 10, 3);
			opal::Solid* s = mSimulator->createSolid();
			s->setPosition(mCreationPoint);
			opal::BoxShapeData data;
			data.dimensions.set(boxDim[0], boxDim[1], boxDim[2]);
			data.material.density = 10;
			s->addShape(data);
			createPhysicalEntityBox("", "Plastic/Green", boxDim, s);

			// Reset the timer for toggle keys.
			mTimeUntilNextToggle = 0.3;
		}

		//// Create a log.
		//if(mKeyboard->isKeyDown(OIS::KC_6) && mTimeUntilNextToggle <= 0)
		//{
		//	Ogre::Real logScale = 9;
		//	Ogre::Vector3 boxDim(0.4243, 0.4243, 2);
		//	boxDim *= logScale;
		//	opal::Solid* s = mSimulator->createSolid();
		//	opal::Matrix44r m;
		//	m.rotate(90, 1, 0, 0);
		//	s->setTransform(m);
		//	s->setPosition(mCreationPoint);
		//	opal::BoxShapeData data;
		//	data.dimensions.set(boxDim[0], boxDim[1], boxDim[2]);
		//	s->addShape(data);

		//	std::string name = generateUniqueName();
		//	Ogre::SceneNode* sn = mSceneMgr->getRootSceneNode()->
		//		createChildSceneNode(name);
		//	sn->scale(logScale, logScale, logScale);
		//	Entity* e = mSceneMgr->createEntity(name, "log.mesh");
		//	e->setNormaliseNormals(true);
		//	e->setMaterialName("Textured/Wood");
		//	sn->attachObject(e);
		//	createPhysicalEntity(name, sn, s);

		//	// Reset the timer for toggle keys.
		//	mTimeUntilNextToggle = 0.3;
		//}

		// Create a knot.
		if(mKeyboard->isKeyDown(OIS::KC_6) && mTimeUntilNextToggle <= 0)
		{
			opalSamples::PhysicalEntity* pe = createPhysicalEntityMesh("", 
				"knot.mesh", "Textured/RustedMetal", false, 0.1);
			pe->getSolid()->setPosition(opal::Point3r(0, 40, 0));

			// Reset the timer for toggle keys.
			mTimeUntilNextToggle = 0.3;
		}

		// Create a wall.
		if(mKeyboard->isKeyDown(OIS::KC_7) && mTimeUntilNextToggle <= 0)
		{
			opal::Matrix44r m;
			m.rotate(45, 0, 1, 0);
			m.translate(0, 0, -23);
			createWall(6, 8, opal::Vec3r(3, 1.5, 1.5), m);

			// Reset the timer for toggle keys.
			mTimeUntilNextToggle = 0.3;
		}

		// Create a tower.
		if(mKeyboard->isKeyDown(OIS::KC_8) && mTimeUntilNextToggle <= 0)
		{
			createTower(2, 2, 15, opal::Vec3r(3, 1.5, 1.5));

			// Reset the timer for toggle keys.
			mTimeUntilNextToggle = 0.3;
		}

		// Create a ragdoll.
		if(mKeyboard->isKeyDown(OIS::KC_9) && mTimeUntilNextToggle <= 0)
		{
			opal::Blueprint ragdollBP;
			opal::loadFile(ragdollBP, "../data/blueprints/ragdoll.xml");
			opal::Matrix44r transform;
			transform.translate(mCreationPoint[0], mCreationPoint[1] - 5, 
				mCreationPoint[2]);

			// Instantiate the Blueprint.
			opal::BlueprintInstance instance;
			mSimulator->instantiateBlueprint(instance, ragdollBP, transform, 16);

			unsigned int i=0;
			for (i=0; i<instance.getNumSolids(); ++i)
			{
				opal::Solid* s = instance.getSolid(i);
				const opal::SolidData& data = s->getData();
				unsigned int j=0;
				for (j=0; j<data.getNumShapes(); ++j)
				{
					opal::ShapeData* shapeData = data.getShapeData(j);

					switch(shapeData->getType())
					{
						case opal::BOX_SHAPE:
						{
							opal::Vec3r dim = 
								((opal::BoxShapeData*)shapeData)->dimensions;
							Ogre::Vector3 boxDim(dim[0], dim[1], dim[2]);
							createPhysicalEntityBox("", "Plastic/LightBlue", 
								boxDim, s);
							break;
						}
						case opal::SPHERE_SHAPE:
						{
							opal::real r = 
								((opal::SphereShapeData*)shapeData)->radius;
							createPhysicalEntitySphere("", 
								"Plastic/LightBlue", r, s);
							break;
						}
						case opal::CAPSULE_SHAPE:
						{
							opal::real r = 
								((opal::CapsuleShapeData*)shapeData)->radius;
							opal::real l = 
								((opal::CapsuleShapeData*)shapeData)->length;
							createPhysicalEntityCapsule("", 
								"Plastic/LightBlue", r, l, s);
							break;
						}
						default:
							assert(false);
					}
				}
			}

			// Reset the timer for toggle keys.
			mTimeUntilNextToggle = 0.5;
		}

		// The following code updates the camera's position.
		opal::Vec3r cameraDir(0, 0, 0);
		bool cameraMoved = false;

		if (mKeyboard->isKeyDown(OIS::KC_LEFT) 
			|| mKeyboard->isKeyDown(OIS::KC_A))
		{
			// Move camera left.
			cameraDir[0] -= (dt * mMoveSpeed);
			cameraMoved = true;
		}

		if (mKeyboard->isKeyDown(OIS::KC_RIGHT) 
			|| mKeyboard->isKeyDown(OIS::KC_D))
		{
			// Move camera right.
			cameraDir[0] += (dt * mMoveSpeed);
			cameraMoved = true;
		}

		if (mKeyboard->isKeyDown(OIS::KC_UP) 
			|| mKeyboard->isKeyDown(OIS::KC_W))
		{
			// Move camera forward.
			cameraDir[2] -= (dt * mMoveSpeed);
			cameraMoved = true;
		}

		if (mKeyboard->isKeyDown(OIS::KC_DOWN) 
			|| mKeyboard->isKeyDown(OIS::KC_S))
		{
			// Move camera backward.
			cameraDir[2] += (dt * mMoveSpeed);
			cameraMoved = true;
		}

		if (!cameraMoved)
		{
			// Slow physical camera motion if necessary.
		}

		// Use the camera dir vector to translate the camera.
		mPhysicalCamera->moveRelative(cameraDir);

		// Toggle shadows.
		if(mKeyboard->isKeyDown(OIS::KC_H) && mTimeUntilNextToggle <= 0)
		{
			mUseShadows = !mUseShadows;

			if (mUseShadows)
			{
				mSceneMgr->setShadowTechnique(SHADOWTYPE_STENCIL_ADDITIVE);
			}
			else
			{
				mSceneMgr->setShadowTechnique(SHADOWTYPE_NONE);
			}

			// Reset the timer for toggle keys.
			mTimeUntilNextToggle = 0.5;
		}

		// Toggle second light source.
		if(mKeyboard->isKeyDown(OIS::KC_L) && mTimeUntilNextToggle <= 0)
		{
			Ogre::Light* light1 = mSceneMgr->getLight("light1");

			if (light1->isVisible())
			{
				light1->setVisible(false);
			}
			else
			{
				light1->setVisible(true);
			}

			// Reset the timer for toggle keys.
			mTimeUntilNextToggle = 0.5;
		}

		// Toggle GUI.
		if (mKeyboard->isKeyDown(OIS::KC_G) && mTimeUntilNextToggle <= 0)
		{
			mStatsOn = !mStatsOn;
			showDebugOverlay(mStatsOn);
			mTimeUntilNextToggle = 1;
		}

		// Handy screenshot saving procedure.
		if (mKeyboard->isKeyDown(OIS::KC_SYSRQ) 
			&& mTimeUntilNextToggle <= 0)
		{
			char tmp[20];
			sprintf(tmp, "screenshot_%d.png", ++mNumScreenShots);
			ExampleApplication::mWindow->writeContentsToFile(tmp);
			mDebugText = String("Wrote ") + tmp;

			// Reset the timer for toggle keys.
			mTimeUntilNextToggle = 0.5;
		}

		// Return true to continue looping.
		return true;
	}
Room::Room(int i, int j, RoomType type, RoomSpecial special)
	:ro_roomNumber(type)
	, ro_roomSpecial(special)
{
	m_x = i * 1280;
	m_y = j * 720;
	//could probably do this above but eh

	createTerrain(type);


	//topwall
	createWall(m_x + 0, m_y + 0, 570, 93, TOP, false, false);
	if (!ro_doorNorth){
		createWall(m_x + 570, m_y + 0, 130, 93, TOP, true, false);
	}
	else{
		createWall(m_x + 570, m_y + 0, 130, 93, TOP, true, true);
	}
		createWall(m_x + 710, m_y + 0, 570, 93, TOP, false, false);
	
	//rightwall
		createWall(m_x + 1129, m_y + 0, 151, 331, RIGHT, false, false);
	if (!ro_doorEast){
		createWall(m_x + 1129, m_y + 301, 151, 117, RIGHT, true, false);
	}
	else{
		createWall(m_x + 1129, m_y + 301, 151, 117, RIGHT, true, true);
	}
		createWall(m_x + 1129, m_y + 418, 151, 302, RIGHT, false, false);

	//bottomwall
		createWall(m_x + 0, m_y + 625, 570, 160, BOTTOM, false, false);
	if (!ro_doorSouth){
		createWall(m_x + 570, m_y + 625, 130, 160, BOTTOM, true, false);
	}
	else{
		createWall(m_x + 570, m_y + 625, 130, 160, BOTTOM, true, true);
	}
		createWall(m_x + 710, m_y + 625, 570, 160, BOTTOM, false, false);

	//leftwall
		createWall(m_x + 0, m_y + 0, 151, 331, LEFT, false, false);
	if (!ro_doorWest){
		createWall(m_x + 0, m_y + 301, 151, 117, LEFT, true, false);
	}
	else{
		createWall(m_x + 0, m_y + 301, 151, 117, LEFT, true, true);
	}
		createWall(m_x + 0, m_y + 418, 151, 302, LEFT, false, false);

}
/*------------------------------------------------------------------------------
 * Function: init
 *
 * Description: This function initializes a new game of asteroids. A window
 *  must be created before this function may be called.
 *----------------------------------------------------------------------------*/
void init(void) {
	bullets_ship1 = NULL;
   bullets_ship2 = NULL;
   shipGroup1 = ERROR_HANDLE;
   shipGroup2 = ERROR_HANDLE;
	
   // function to initialize program
   startup();
	background = xSpriteCreate("map.png", SCREEN_W>>1, SCREEN_H>>1, 0, SCREEN_W, SCREEN_H, 0);
	
	srand(TCNT0);
	
	wallGroup = xGroupCreate();
	shipGroup1 = xGroupCreate();
   shipGroup2 = xGroupCreate();

   // Ship1 create
	ship1.handle = xSpriteCreate(
      tank_images[p1_tank_num], 
      SCREEN_W >> 2,
      SCREEN_H >> 1, 
      270, 
      SHIP_SIZE, 
      SHIP_SIZE, 
      1);
   
	ship1.pos.x = SCREEN_W >> 2;
	ship1.pos.y = SCREEN_H >> 1;
	ship1.vel.x = 0;
	ship1.vel.y = 0;
	ship1.accel = 0;
	ship1.angle = 270;
	ship1.a_vel = 0;

   // Ship2 create
   ship2.handle = xSpriteCreate(
      tank_images[p2_tank_num],
      SCREEN_W - (SCREEN_W >> 2),
      SCREEN_H >> 1,
      90,
      SHIP_SIZE,
      SHIP_SIZE,
      1);
   
   ship2.pos.x = SCREEN_W - (SCREEN_W >> 2);
   ship2.pos.y = SCREEN_H >> 1;
   ship2.vel.x = 0;
   ship2.vel.y = 0;
   ship2.accel = 0;
   ship2.angle = 90;
   ship2.a_vel = 0;

   fire_button1 = 0;
   fire_button2 = 0;
   
   borders = createWall(
      "width_wall.bmp",
      SCREEN_W >> 1,
      0,
      0,
      borders,
      1,
      WALL_WIDTH);
      
   borders = createWall(
      "width_wall.bmp",
      SCREEN_W >> 1,
      SCREEN_H,
      0,
      borders,
      1,
      WALL_WIDTH);
   
   borders = createWall(
      "side_wall.bmp",
      0,
      SCREEN_H >> 1,
      0,
      borders,
      WALL_HEIGHT,
      1);
   
   borders = createWall(
      "side_wall.bmp",
      SCREEN_W,
      SCREEN_H >> 1,
      0,
      borders,
      WALL_HEIGHT,
      1);
      
   walls = createWall(
      "wall.bmp",
      SCREEN_W >> 1,
      SCREEN_H >> 1,
      0,
      walls,
      8,
      1);
      
   walls = createWall(
      "small_wall.bmp",
      SCREEN_W - 2.5 * WALL_SIZE,
      SCREEN_H >> 2,
      0,
      walls,
      1,
      4);
      
   walls = createWall(
      "small_wall.bmp",
      2.5 * WALL_SIZE,
      SCREEN_H - (SCREEN_H >> 2),
      0,
      walls,
      1,
      4);
      
   walls = createWall(
      "block_wall.bmp",
      SCREEN_W - 4.5 * WALL_SIZE,
      SCREEN_H - 1.5 * WALL_SIZE,
      0,
      walls,
      WALL_BLOCK,
      WALL_BLOCK);
      
   walls = createWall(
      "block_wall.bmp",
      4.5 * WALL_SIZE,
      1.5 * WALL_SIZE,
      0,
      walls,
      WALL_BLOCK,
      WALL_BLOCK);
   fire_button2 = 0;   

   vGroupAddSprite(shipGroup1, ship1.handle);
   vGroupAddSprite(shipGroup2, ship2.handle);
}