IntroScene::IntroScene() { setWindow(); setRenderer(); setRunning(); initObjects(); setObjects(); }
Level::Level() { setWindow(); setRenderer(); setRunning(); initObjects(); setObjects(); }
void OBJScene::setScene(char *filename) { std::vector<tinyobj::shape_t> tinyshapes; std::string err = tinyobj::LoadObj(tinyshapes, filename, "Scenes/obj/"); printf("%s\n", err.c_str()); this->camera = Camera( Vector(15, 15, -10), Vector(-0.8,-0.8, 0.5), 0, Vector(0,1,0), M_PI/2 ); this->lights.push_back(Light( POINT, Vector(20, 5, 0), Vector(0,0,1), RTColor(1,1,1), 0, 0 )); //this->camera = Camera( // Vector(275,270,-260), // Vector(0,0,1), // 0, // Vector(0,1,0), // M_PI/2 //); // //this->lights.push_back(Light( // POINT, // Vector(270,500,270), // Vector(0,0,1), // RTColor(1,1,1), // 0, // 0 //)); setObjects(tinyshapes); Scene::setScene(); }
GameEngine::GameEngine(int width, int height) { _physicsEngine = NULL; _renderer = NULL; _paused = false; _scene = NULL; _timeBetweenUpdates = 1.0/300.0; if(!glfwInit()) { std::cerr << "Failed to initialize glfw" << std::endl; } std::cout << "GLFW initialized" << std::endl; _window = glfwCreateWindow(width, height, "Game", NULL, NULL); if(!_window) { std::cerr << "Failed to open GLFW window. If you have an Intel GPU, they are not 3.3 compatible. Try the 2.1 version of the tutorials." << std::endl; } _renderer = new Renderer(_window); Control::setGameEngine(this); glfwSetInputMode(_window, GLFW_STICKY_KEYS, GLFW_KEY_ESCAPE); glfwSetWindowSizeCallback(_window, Control::windowResized); glfwSetKeyCallback(_window, Control::keyCallBack); glfwSetCursorPosCallback(_window, Control::mousePosCallback); glfwSetScrollCallback(_window, Control::mouseScrollCallback); glfwSetMouseButtonCallback(_window, Control::mouseClickCallback); glfwSwapInterval(0); this->_physicsEngine = new PhysicsEngine(); std::cout << "Loading scene->.." << std::endl; _scene = XmlLoader::loadScene("scenes/cornellBoxTarea2c.xml"); _scene->setShaderId(_renderer->getProgramId()); _scene->initModelData(); _scene->setMaterials(); _scene->generateIds(); //_scene->generateLineIds(); _renderer->setRenderingParams(); setObjects(_scene->_models); _numUpdates = 0; _lastUpdate = glfwGetTime(); _lastCheck = _lastUpdate; }
TSceneTree::TSceneTree (TScene* ptSCENE) { Gtk::Tree* ptSubtree; Gtk::TreeItem* ptItem; bool gSubtree = false; ptScene = ptSCENE; if ( ptScene ) { ptSubtree = new Gtk::Tree; gSubtree |= setCamera (ptSubtree); gSubtree |= setLights (ptSubtree); gSubtree |= setObjects (ptSubtree); ptItem = new Gtk::TreeItem ("Scene"); ptItem->show(); ptItem->button_press_event.connect(bind(slot(this, &TSceneTree::manageButtonPress), (TProcedural*) ptScene)); append (*ptItem); if ( gSubtree ) { ptSubtree->show(); ptItem->set_subtree (*ptSubtree); } else { delete ptSubtree; } } } /* TSceneTree() */
MutableDictionary & setObjects(InputIterT && first, InputIterT && last) { return setObjects(std::forward<InputIterT>(first), std::forward<InputIterT>(last), CopyNone); }
void shMapLevel::moveWalls (int action) { shFeature *f; int north = (1 == action or -1 == action) ? 1 : 0; int squares[20]; int n = 0; int x, y; int i, j; int seen = 0; int interrupt = 0; int heard = 0; // move the wall y = -1; for (i = 0; i < mFeatures.count (); i++) { f = mFeatures.get (i); if (shFeature::kMovingHWall != f->mType) { continue; } if (action > 0) { /* close in */ if (north and f->mMovingHWall.mBeginY < f->mMovingHWall.mEndY and f->mY < f->mMovingHWall.mEndY) { //if (Hero.canSee (f->mX, f->mY)) // setMemory (f->mX, f->mY, ' '); mVisibility[f->mX][f->mY] = 0; y = f->mY + 1; squares[n++] = f->mX; f->mY++; addMachinery (f->mX, f->mY-1); } else if (!north and f->mMovingHWall.mBeginY > f->mMovingHWall.mEndY and f->mY > f->mMovingHWall.mEndY) { //if (Hero.canSee (f->mX, f->mY)) // setMemory (f->mX, f->mY, ' '); mVisibility[f->mX][f->mY] = 0; y = f->mY - 1; squares[n++] = f->mX; f->mY--; addMachinery (f->mX, f->mY+1); } else { continue; } if (Hero.canSee (f->mX, f->mY)) { interrupt++; seen++; } else if (distance (&Hero, f->mX, f->mY) < 100) { heard++; } } else if (action < 0) { /* reset */ int oldy = f->mY; if (north and f->mMovingHWall.mBeginY < f->mMovingHWall.mEndY and f->mY > f->mMovingHWall.mBeginY) { y = f->mY - 1; shFeature *machinery = getFeature (f->mX, y); if (machinery) removeFeature (machinery); f->mY--; } else if (!north and f->mMovingHWall.mBeginY > f->mMovingHWall.mEndY and f->mY < f->mMovingHWall.mBeginY) { y = f->mY + 1; shFeature *machinery = getFeature (f->mX, y); if (machinery) removeFeature (machinery); f->mY++; } else { continue; } if (Hero.canSee (f->mX, oldy)) interrupt++; } } if (!Hero.getStoryFlag ("walls moving")) { if (seen) { I->p ("The walls are moving!"); Hero.setStoryFlag ("walls moving", 1); } else if (heard and !Hero.getStoryFlag ("walls heard")) { I->p ("You hear a loud rumbling!"); Hero.setStoryFlag ("walls heard", 1); } } // displace objects and creatures if (n) { shuffle (squares, n, sizeof(int)); for (i = 0; i < n; i++) { x = squares[i]; shObjectVector *v = getObjects (x, y); if (v) { int y2 = north ? y + 1 : y - 1; int safe = !isObstacle (x, y2); for (j = 0; j < v->count (); j++) { shObject *obj = v->get (j); if (safe) { putObject (obj, x, y2); } else { delete obj; } } if (Hero.mX == x and Hero.mY == y2) { I->p ("%s pushed into your vicinity.", v->count () > 1 ? "Some objects are" : "An object is"); } delete v; setObjects (x, y, NULL); } shCreature *c = getCreature (x, y); if (c) { if (c->mZ < 0) { if (c->isHero ()) { I->p ("You are sealed below the moving wall!"); I->p ("That's not supposed to be possible!"); I->p ("Please send me a bug report! -cyrus"); } } else { pushCreature (c, north ? kSouth : kNorth); } } } } if (interrupt) Hero.interrupt (); }