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; }
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)); }
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; };
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(); }
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)); }
//----------------------------------------------- // --- 動作 --- // ウインドウ作成 // --- 引数 --- // 無し // --- 戻り値 --- // //----------------------------------------------- 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); }
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; } }
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; }
bool GameLayer::init() { if (!BaseLayer::init()) { return false; } createWall(); createBall(); createPaddles(); createGoals(); createScores(); start(); return true; }
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); }
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); } }
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); }
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(); }
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)); }
/* 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; }
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; }
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])); }
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; } }
/** 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; }
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; }
Prop* PropFactory::createWall(){ return createWall(100); }
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); }