void templateAppInit(int width, int height) { screen_size = height; GFX_start(); glViewport(0.0f, 0.0f, width, height); GFX_set_matrix_mode(PROJECTION_MATRIX); GFX_load_identity(); GFX_set_perspective(80.0f, (float)width / (float)height, 0.1f, 100.0f, -90.0f); obj = OBJ_load(OBJ_FILE, 1); unsigned int i = 0; while (i != obj->n_objmesh) { OBJ_optimize_mesh(obj, i, 128); OBJ_build_mesh(obj, i); OBJ_free_mesh_vertex_data(obj, i); ++i; } init_physic_world(); load_physic_world(); player = OBJ_get_mesh(obj, "player", 0); player->btrigidbody->setFriction(10.0f); memcpy(&eye, &player->location, sizeof(vec3)); i = 0; while (i != obj->n_texture) { OBJ_build_texture(obj, i, obj->texture_path, TEXTURE_MIPMAP | TEXTURE_16_BITS, TEXTURE_FILTER_2X, 0.0f); ++i; } i = 0; while (i != obj->n_objmaterial) { OBJ_build_material(obj, i, NULL); ++i; } program = PROGRAM_create((char *)"default", VERTEX_SHADER, FRAGMENT_SHADER, 1, 0, program_bind_attrib_location, NULL); PROGRAM_draw(program); glUniform1i(PROGRAM_get_uniform_location(program, (char *)"DIFFUSE"), 1); }
void load_physic_world( void ) { btBulletWorldImporter *btbulletworldimporter = new btBulletWorldImporter( dynamicsworld ); MEMORY *memory = mopen( PHYSIC_FILE, 1 ); btbulletworldimporter->loadFileFromMemory( ( char * )memory->buffer, memory->size ); mclose( memory ); unsigned int i = 0; while( i != btbulletworldimporter->getNumRigidBodies() ) { OBJMESH *objmesh = OBJ_get_mesh( obj, btbulletworldimporter->getNameForPointer( btbulletworldimporter->getRigidBodyByIndex( i ) ), 0 ); if( objmesh ) { objmesh->btrigidbody = ( btRigidBody * )btbulletworldimporter->getRigidBodyByIndex( i ); objmesh->btrigidbody->setUserPointer( objmesh ); } ++i; } delete btbulletworldimporter; }
void templateAppInit(int width, int height) { GFX_start(); glViewport(0.0f, 0.0f, width, height); GFX_set_matrix_mode(PROJECTION_MATRIX); GFX_load_identity(); GFX_set_perspective(80.0f, (float)width / (float)height, 1.0f, 100.0f, -90.0f); obj = OBJ_load(OBJ_FILE, 1); unsigned int i = 0; while (i != obj->n_objmesh) { if (strstr(obj->objmesh[i].name, "maze")) { navigation = NAVIGATION_init((char *)"maze"); navigation->navigationconfiguration.agent_height = 2.0f; navigation->navigationconfiguration.agent_radius = 0.4f; if (NAVIGATION_build(navigation, obj, i)) { console_print("Navigation generated.\n"); } else { console_print("Unable to create the navigation mesh."); } } OBJ_optimize_mesh(obj, i, 128); OBJ_build_mesh2(obj, i); OBJ_free_mesh_vertex_data(obj, i); ++i; } init_physic_world(); load_physic_world(); player = OBJ_get_mesh(obj, "player", 0); player->btrigidbody->setAngularFactor(0.0f); maze = OBJ_get_mesh(obj, "maze", 0); distance = maze->radius * 2.0f; i = 0; while (i != obj->n_texture) { OBJ_build_texture(obj, i, obj->texture_path, TEXTURE_MIPMAP | TEXTURE_16_BITS, TEXTURE_FILTER_2X, 0.0f); ++i; } i = 0; while (i != obj->n_objmaterial) { OBJ_build_material(obj, i, NULL); ++i; } program = PROGRAM_create((char *)"default", VERTEX_SHADER, FRAGMENT_SHADER, 1, 0, program_bind_attrib_location, NULL); }
void templateAppInit(int width, int height) { glViewport(0.0f, 0.0f, width, height); glGetIntegerv(GL_VIEWPORT, viewport_matrix); GFX_start(); obj = OBJ_load(OBJ_FILE, 1); unsigned int i = 0; while (i != obj->n_objmesh) { OBJ_optimize_mesh(obj, i, 128); OBJ_build_mesh2(obj, i); OBJ_free_mesh_vertex_data(obj, i); ++i; } i = 0; while (i != obj->n_texture) { OBJ_build_texture(obj, i, obj->texture_path, TEXTURE_MIPMAP | TEXTURE_16_BITS, TEXTURE_FILTER_2X, 0.0f); ++i; } i = 0; while (i != obj->n_program) { OBJ_build_program(obj, i, program_bind_attrib_location, program_draw, 1, obj->program_path); ++i; } i = 0; while (i != obj->n_objmaterial) { OBJ_build_material(obj, i, NULL); ++i; } vec4 color = { 1.0f, 1.0f, 1.0f, 1.0f }; vec3 position = { 7.5f, 0.0f, 6.0f }; light = LIGHT_create_spot((char *)"spot", &color, &position, 0.0f, 0.0f, 0.0f, 75.0f, 0.05f); OBJ_get_mesh(obj, (char *)"projector", 0)->visible = 0; glGetIntegerv(GL_FRAMEBUFFER_BINDING, &main_buffer); if (main_buffer == -1) main_buffer = 0; glGenFramebuffers(1, &shadowmap_buffer); glBindFramebuffer(GL_FRAMEBUFFER, shadowmap_buffer); glGenTextures(1, &depth_texture); glBindTexture(GL_TEXTURE_2D, depth_texture); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); glTexImage2D(GL_TEXTURE_2D, 0, GL_DEPTH_COMPONENT, shadowmap_width, shadowmap_height, 0, GL_DEPTH_COMPONENT, GL_UNSIGNED_SHORT, NULL); glBindTexture(GL_TEXTURE_2D, 0); glFramebufferTexture2D(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_TEXTURE_2D, depth_texture, 0); }
void load_level( void ) { obj = OBJ_load( OBJ_FILE, 1 ); unsigned int i = 0; while( i != obj->n_objmesh ) { OBJ_optimize_mesh( obj, i, 128 ); OBJ_build_mesh( obj, i ); OBJ_free_mesh_vertex_data( obj, i ); ++i; } init_physic_world(); load_physic_world(); gContactAddedCallback = contact_added_callback; /* Get the mesh object name level_clear, which is the cylinder located * in the middle of the level end target. */ OBJMESH *level_clear = OBJ_get_mesh( obj, "level_clear", 0 ); /* On top of the usual CF_CUSTOM_MATERIAL_CALLBACK collision flag, add CF_NO_CONTACT_RESPONSE. This collision flag makes your rigid body object act like a ghost, meaning that it will not respond to collision. This can be used to turn off the collision response of any rigid body, which is great for this typical scenario, where you only want the object to trigger the callback. */ level_clear->btrigidbody->setCollisionFlags( level_clear->btrigidbody->getCollisionFlags() | btCollisionObject::CF_CUSTOM_MATERIAL_CALLBACK | btCollisionObject::CF_NO_CONTACT_RESPONSE ); /* Make the level_clear mesh invisible for rendering. */ level_clear->visible = 0; i = 0; while( i != obj->n_objmesh ) { OBJMESH *objmesh = &obj->objmesh[ i ]; if( strstr( objmesh->name, "gem" ) ) { objmesh->rotation.z = ( float )( random() % 360 ); objmesh->btrigidbody->setCollisionFlags( objmesh->btrigidbody->getCollisionFlags() | btCollisionObject::CF_CUSTOM_MATERIAL_CALLBACK ); } ++i; } player = OBJ_get_mesh( obj, "player", 0 ); player->btrigidbody->setFriction( 10.0f ); memcpy( &eye, &player->location, sizeof( vec3 ) ); i = 0; while( i != obj->n_texture ) { OBJ_build_texture( obj, i, obj->texture_path, TEXTURE_MIPMAP | TEXTURE_16_BITS, TEXTURE_FILTER_2X, 0.0f ); ++i; } i = 0; while( i != obj->n_program ) { OBJ_build_program( obj, i, program_bind_attrib_location, program_draw, 1, obj->program_path ); ++i; } i = 0; while( i != obj->n_objmaterial ) { OBJ_build_material( obj, i, NULL ); ++i; } font_small = FONT_init( ( char * )"foo.ttf" ); FONT_load( font_small, font_small->name, 1, 24.0f, 512, 512, 32, 96 ); font_big = FONT_init( ( char * )"foo.ttf" ); FONT_load( font_big, font_big->name, 1, 48.0f, 512, 512, 32, 96 ); /* Declare a memory structure that you will use (and reuse) to load each sound buffer. */ MEMORY *memory = NULL; /* Reset the counter. */ i = 0; while( i != 4 ) { switch( i ) { case 0: { /* Load the red.ogg file. */ memory = mopen( ( char * )"red.ogg", 1 ); break; } case 1: { /* Load the green.ogg file. */ memory = mopen( ( char * )"green.ogg", 1 ); break; } case 2: { /* Load the blue.ogg file. */ memory = mopen( ( char * )"blue.ogg", 1 ); break; } case 3: { /* Load the yellow.ogg file. */ memory = mopen( ( char * )"yellow.ogg", 1 ); break; } } /* For the current gem buffer index, create a sound buffer using the content * of the memory structure that we have loaded. */ gems_soundbuffer[ i ] = SOUNDBUFFER_load( ( char * )"gem", memory ); mclose( memory ); /* Create a new sound source for the current index and link the current sound buffer. */ gems_sound[ i ] = SOUND_add( ( char * )"gem", gems_soundbuffer[ i ] ); SOUND_set_volume( gems_sound[ i ], 1.0f ); ++i; } /* Temporary variable to contain the mesh pointer of the object that will be emitting the sound. */ OBJMESH *objmesh = NULL; /* Load the water.ogg file in memory. */ memory = mopen( ( char * )"water.ogg", 1 ); water_soundbuffer = SOUNDBUFFER_load( ( char * )"water", memory ); /* Free the memory , because the sound buffer is loaded as a static sound and the raw audio buffer has been transferred to the audio memory by the previous function call. */ mclose( memory ); /* Create the water sound source. */ water_sound = SOUND_add( ( char * )"water", water_soundbuffer ); /* Here comes the part of code where we are going to associate the sound source to the object. First, get the objmesh pointer for the water object. */ objmesh = OBJ_get_mesh( obj, "water", 0 ); /* Assign to the sound source the location of the mesh in 3D space and use the radius as the reference distance (how far the sound can be heard). */ SOUND_set_location( water_sound, &objmesh->location, objmesh->radius ); /* Set the volume of the water at 50%. */ SOUND_set_volume( water_sound, 0.5f ); SOUND_play( water_sound, 1 ); //the same as above for the lava sound memory = mopen( ( char * )"lava.ogg", 1 ); lava_soundbuffer = SOUNDBUFFER_load( ( char * )"lava", memory ); mclose( memory ); lava_sound = SOUND_add( ( char * )"lava", lava_soundbuffer ); objmesh = OBJ_get_mesh( obj, "lava", 0 ); SOUND_set_location( lava_sound, &objmesh->location, objmesh->radius ); SOUND_set_volume( lava_sound, 0.5f ); SOUND_play( lava_sound, 1 ); //finally for the toxic waste sound memory = mopen( ( char * )"toxic.ogg", 1 ); toxic_soundbuffer = SOUNDBUFFER_load( ( char * )"toxic", memory ); mclose( memory ); toxic_sound = SOUND_add( ( char * )"toxic", toxic_soundbuffer ); objmesh = OBJ_get_mesh( obj, "toxic", 0 ); SOUND_set_location( toxic_sound, &objmesh->location, objmesh->radius ); SOUND_set_volume( toxic_sound, 0.5f ); SOUND_play( toxic_sound, 1 ); /* Load the background sound as a streamed buffer. */ memory = mopen( ( char * )"background.ogg", 1 ); background_soundbuffer = SOUNDBUFFER_load_stream( ( char * )"background", memory ); background_sound = SOUND_add( ( char * )"background", background_soundbuffer ); SOUND_set_volume( background_sound, 0.5f ); /* Play the background sound in a loop. */ SOUND_play( background_sound, 1 ); //Start the decompression thread THREAD_play( thread ); }
void load_game( void ) { obj = OBJ_load( OBJ_FILE, 1 ); unsigned int i = 0; while( i != obj->n_objmesh ) { if( strstr( obj->objmesh[ i ].name, "maze" ) ) { navigation = NAVIGATION_init( ( char * )"maze" ); navigation->navigationconfiguration.agent_height = 2.0f; navigation->navigationconfiguration.agent_radius = 0.4f; if( NAVIGATION_build( navigation, obj, i ) ) { console_print( "Navigation generated.\n"); } else { console_print( "Unable to create the navigation mesh." ); } } OBJ_optimize_mesh( obj, i, 128 ); OBJ_build_mesh2( obj, i ); OBJ_free_mesh_vertex_data( obj, i ); ++i; } init_physic_world(); load_physic_world(); dispatcher->setNearCallback( near_callback ); enemy = OBJ_get_mesh( obj, "enemy", 0 ); enemy->btrigidbody->setAngularFactor( 0.0f ); navigationpathdata_player.path_point_count = navigationpathdata_enemy.path_point_count = 0; player_next_point = enemy_next_point = -1; player = OBJ_get_mesh( obj, "player", 0 ); player->btrigidbody->setAngularFactor( 0.0f ); maze = OBJ_get_mesh( obj, "maze", 0 ); distance = maze->radius * 2.0f; i = 0; while( i != obj->n_texture ) { OBJ_build_texture( obj, i, obj->texture_path, TEXTURE_MIPMAP | TEXTURE_16_BITS, TEXTURE_FILTER_2X, 0.0f ); ++i; } i = 0; while( i != obj->n_objmaterial ) { OBJ_build_material( obj, i, NULL ); ++i; } program = PROGRAM_create( ( char * )"default", VERTEX_SHADER, FRAGMENT_SHADER, 1, 0, program_bind_attrib_location, NULL ); }
void load_level( void ) { obj = OBJ_load( OBJ_FILE, 1 ); unsigned int i = 0; while( i != obj->n_objmesh ) { OBJ_optimize_mesh( obj, i, 128 ); OBJ_build_mesh( obj, i ); OBJ_free_mesh_vertex_data( obj, i ); ++i; } init_physic_world(); load_physic_world(); gContactAddedCallback = contact_added_callback; OBJMESH *level_clear = OBJ_get_mesh( obj, "level_clear", 0 ); level_clear->btrigidbody->setCollisionFlags( level_clear->btrigidbody->getCollisionFlags() | btCollisionObject::CF_CUSTOM_MATERIAL_CALLBACK | btCollisionObject::CF_NO_CONTACT_RESPONSE ); level_clear->visible = 0; i = 0; while( i != obj->n_objmesh ) { OBJMESH *objmesh = &obj->objmesh[ i ]; if( strstr( objmesh->name, "gem" ) ) { objmesh->rotation.z = ( float )( random() % 360 ); objmesh->btrigidbody->setCollisionFlags( objmesh->btrigidbody->getCollisionFlags() | btCollisionObject::CF_CUSTOM_MATERIAL_CALLBACK ); } ++i; } player = OBJ_get_mesh( obj, "player", 0 ); player->btrigidbody->setFriction( 6.7f ); memcpy( &eye, &player->location, sizeof( vec3 ) ); i = 0; while( i != obj->n_texture ) { OBJ_build_texture( obj, i, obj->texture_path, TEXTURE_MIPMAP , TEXTURE_FILTER_2X, 0.0f ); ++i; } i = 0; while( i != obj->n_program ) { OBJ_build_program( obj, i, program_bind_attrib_location, program_draw, 1, obj->program_path ); ++i; } i = 0; while( i != obj->n_objmaterial ) { OBJ_build_material( obj, i, NULL ); ++i; } font_small = FONT_init( ( char * )"foo.ttf" ); FONT_load( font_small, font_small->name, 1, 24.0f, 512, 512, 32, 96 ); font_big = FONT_init( ( char * )"foo.ttf" ); FONT_load( font_big, font_big->name, 1, 48.0f, 512, 512, 32, 96 ); MEMORY *memory = NULL; i = 0; while( i != 4 ) { switch( i ) { case 0: { memory = mopen( ( char * )"red.ogg", 1 ); break; } case 1: { memory = mopen( ( char * )"green.ogg", 1 ); break; } case 2: { memory = mopen( ( char * )"blue.ogg", 1 ); break; } case 3: { memory = mopen( ( char * )"yellow.ogg", 1 ); break; } } gems_soundbuffer[ i ] = SOUNDBUFFER_load( ( char * )"gem", memory ); mclose( memory ); gems_sound[ i ] = SOUND_add( ( char * )"gem", gems_soundbuffer[ i ] ); SOUND_set_volume( gems_sound[ i ], 1.0f ); ++i; } OBJMESH *objmesh = NULL; memory = mopen( ( char * )"water.ogg", 1 ); water_soundbuffer = SOUNDBUFFER_load( ( char * )"water", memory ); mclose( memory ); water_sound = SOUND_add( ( char * )"water", water_soundbuffer ); objmesh = OBJ_get_mesh( obj, "water", 0 ); SOUND_set_location( water_sound, &objmesh->location, objmesh->radius ); SOUND_set_volume( water_sound, 0.5f ); SOUND_play( water_sound, 1 ); memory = mopen( ( char * )"lava.ogg", 1 ); lava_soundbuffer = SOUNDBUFFER_load( ( char * )"lava", memory ); mclose( memory ); lava_sound = SOUND_add( ( char * )"lava", lava_soundbuffer ); objmesh = OBJ_get_mesh( obj, "lava", 0 ); SOUND_set_location( lava_sound, &objmesh->location, objmesh->radius ); SOUND_set_volume( lava_sound, 0.5f ); SOUND_play( lava_sound, 1 ); memory = mopen( ( char * )"toxic.ogg", 1 ); toxic_soundbuffer = SOUNDBUFFER_load( ( char * )"toxic", memory ); mclose( memory ); toxic_sound = SOUND_add( ( char * )"toxic", toxic_soundbuffer ); objmesh = OBJ_get_mesh( obj, "toxic", 0 ); SOUND_set_location( toxic_sound, &objmesh->location, objmesh->radius ); SOUND_set_volume( toxic_sound, 0.5f ); SOUND_play( toxic_sound, 1 ); memory = mopen( ( char * )"background.ogg", 1 ); background_soundbuffer = SOUNDBUFFER_load_stream( ( char * )"background", memory ); background_sound = SOUND_add( ( char * )"background", background_soundbuffer ); SOUND_set_volume( background_sound, 0.5f ); SOUND_play( background_sound, 1 ); THREAD_play( thread ); }
void templateAppInit( int width, int height ) { atexit( templateAppExit ); glViewport( 0.0f, 0.0f, width, height ); glGetIntegerv( GL_VIEWPORT, viewport_matrix ); GFX_start(); obj = OBJ_load( OBJ_FILE, 1 ); unsigned int i = 0; while( i != obj->n_objmesh ) { OBJ_optimize_mesh( obj, i, 128 ); OBJ_build_mesh( obj, i ); OBJ_free_mesh_vertex_data( obj, i ); ++i; } i = 0; while( i != obj->n_texture ) { OBJ_build_texture( obj, i, obj->texture_path, TEXTURE_MIPMAP | TEXTURE_16_BITS, TEXTURE_FILTER_2X, 0.0f ); ++i; } i = 0; while( i != obj->n_program ) { OBJ_build_program( obj, i, program_bind_attrib_location, program_draw, 1, obj->program_path ); ++i; } i = 0; while( i != obj->n_objmaterial ) { OBJ_build_material( obj, i, NULL ); ++i; } vec4 color = { 1.0f, 1.0f, 1.0f, 1.0f }; vec3 position = { 7.5f, 0.0f, 6.0f }; light = LIGHT_create_spot( ( char * )"spot", &color, &position, 0.0f, 0.0f, 0.0f, 75.0f, 0.05f ); OBJ_get_mesh( obj, ( char * )"projector", 0 )->visible = 0; texture = OBJ_get_texture( obj, ( char * )"projector", 0 ); glBindTexture( GL_TEXTURE_2D, texture->tid ); glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE ); glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE ); }