void WorldObjRenderer::process_object_with_surface(const FileReader& reader) { Vector3f pos; ResDescriptor desc; if (!(reader.read_vector("position", pos) && reader.read_desc("surface", desc))) { log_error("object (%1%) does not have 'position' and 'surface'", reader.get_name()); } else { if (reader.get_name() == "exit" || reader.get_name() == "hotspots") { render_sprite(desc, pos); } else if (reader.get_name() == "groundpiece") { std::string type; reader.read_string("type", type); if (type == "remove") { // FIXME: don't have blit_remove() render_surface(desc, pos); } else { render_surface(desc, pos); } } else { int repeat = 1; reader.read_int("repeat", repeat); render_surface(desc, pos, repeat); } } }
void render() { glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); //Configurando el frustrum glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluPerspective(camera->aperture,(GLfloat)screen_width/(GLfloat)screen_height,1.0f,1000.0f); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); gluLookAt(camera->position.x, camera->position.y, camera->position.z, camera->center.x, camera->center.y, camera->center.z, camera->up.x, camera->up.y, camera->up.z); /* //Rendering light point glPushMatrix(); glDisable(GL_LIGHTING); glColor3f(0, 0.7, 0); glTranslatef(light_point->position[0], light_point->position[1], light_point->position[2]); glutSolidSphere(0.1, 10, 10); glEnable(GL_LIGHTING); glPopMatrix(); */ glPushMatrix(); glRotatef(surface->alphax,1.0,0.0,0.0); glRotatef(surface->alphaz,0.0,0.0,1.0); render_surface(surface); render_control_points(surface); render_ball(ball, surface); glPopMatrix(); render_level(); render_text(); glFlush(); glutSwapBuffers(); }
void WorldObjRenderer::process(const FileReader& reader) { // FIXME: does not handle sprite alignment // FIXME: does not handle remove groundpieces // FIXME: does not handle liquid if (reader.get_name() == "surface-background" || reader.get_name() == "starfield-background" || reader.get_name() == "solidcolor-background" || reader.get_name() == "snow-generator" || reader.get_name() == "rain-generator") { // ignore } else if (reader.get_name() == "groundpiece" || reader.get_name() == "liquid" || reader.get_name() == "exit" || reader.get_name() == "hotspot") { process_object_with_surface(reader); } else if (reader.get_name() == "entrance") { Vector3f pos; reader.read_vector("position", pos); render_sprite(ResDescriptor("entrances/generic"), pos); } else if (reader.get_name() == "spike") { Vector3f pos; reader.read_vector("position", pos); render_surface(ResDescriptor("traps/spike_editor"), pos); } else if (reader.get_name() == "switchdoor-switch") { Vector3f pos; reader.read_vector("position", pos); render_surface(ResDescriptor("worldobjs/switchdoor_switch"), pos); } else if (reader.get_name() == "switchdoor-door") { Vector3f pos; reader.read_vector("position", pos); render_surface(ResDescriptor("worldobjs/switchdoor_box"), pos); } else if (reader.get_name() == "group") { FileReader objects = reader.read_section("objects"); process(objects.get_sections()); } else if (reader.get_name() == "prefab") { std::string name; if (!reader.read_string("name", name)) { log_error("'name' tag missing for prefab"); } else { PrefabFile prefab = PrefabFile::from_resource(name); Vector3f position; reader.read_vector("position", position); push_translate(static_cast<int>(position.x), static_cast<int>(position.y)); process(prefab.get_objects()); pop_translate(); } } else { log_error("unknown object type: %1%", reader.get_name()); } }