Beispiel #1
0
IntroScene::IntroScene() {
	setWindow();
	setRenderer();
	setRunning();
	initObjects();
	setObjects();
}
Beispiel #2
0
Level::Level() {
	setWindow();
	setRenderer();
	setRunning();
	initObjects();
	setObjects();
}
Beispiel #3
0
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;
}
Beispiel #5
0
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); }
Beispiel #7
0
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 ();
}