particles.c 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136
  1. #include "corange.h"
  2. int main(int argc, char *argv[])
  3. {
  4. corange_init("../../assets_core");
  5. asset_hndl opt_graphics = asset_hndl_new_load(P("./graphics.cfg"));
  6. renderer * dr = renderer_new(opt_graphics);
  7. entity_new("cam",camera);
  8. entity_get_as("cam",camera)->position.z +=20;
  9. entity_new("fire",particles);
  10. entity_get_as("fire",particles)->position.y +=30;
  11. folder_load_recursive(P("./assets"));
  12. landscape* world = entity_new("world", landscape);
  13. world->scale = 0.2;
  14. world->size_x = 256;
  15. world->size_y = 256;
  16. world->heightmap = asset_hndl_new_load(P("./assets/map/map.raw"));
  17. world->attribmap = asset_hndl_new_load(P("./assets/map/att.tga"));
  18. world->ground0 = asset_hndl_new_load(P("./assets/map/diffuse.tga"));
  19. world->ground3 = asset_hndl_new_load(P("./assets/map/diffuse.tga"));
  20. world->ground2 = asset_hndl_new_load(P("./assets/map/diffuse.tga"));
  21. world->ground1 = asset_hndl_new_load(P("./assets/map/diffuse.tga"));
  22. world->ground0_nm = asset_hndl_new_load(P("./assets/map/normal.tga"));
  23. world->ground3_nm = asset_hndl_new_load(P("./assets/map/normal.tga"));
  24. world->ground2_nm = asset_hndl_new_load(P("./assets/map/normal.tga"));
  25. world->ground1_nm = asset_hndl_new_load(P("./assets/map/normal.tga"));
  26. landscape_blobtree_generate(world);
  27. particles_set_effect(entity_get("fire"),asset_hndl_new(P("./assets/fire/fire.effect")));
  28. for (int i = 0; i < 12; i++)
  29. {
  30. entity_new("snow%i",particles,i);
  31. particles_set_effect(entity_get("snow%i",i),asset_hndl_new_load(P("./assets/snow/snow.effect")));
  32. };
  33. renderer_set_camera(dr,entity_get("cam"));
  34. renderer_set_sea_enabled(dr,true);
  35. renderer_set_skydome_enabled(dr,true);
  36. renderer_set_tod(dr,0.15,1);
  37. audio_music_play(asset_get(P("./assets/sound/font/font.mp3")));
  38. audio_sound_play(asset_get(P("./assets/sound/steps/1.wav")),100);
  39. audio_sound_play(asset_get(P("./assets/sound/steps/2.wav")),100);
  40. audio_sound_play(asset_get(P("./assets/sound/steps/3.wav")),100);
  41. audio_sound_play(asset_get(P("./assets/sound/wall/wall.wav")),100);
  42. audio_sound_play(asset_get(P("./assets/sound/fire/fire.wav")),100);
  43. audio_sound_pause(0);
  44. audio_sound_pause(1);
  45. audio_sound_pause(2);
  46. sound * s = asset_get(P("./assets/sound/wall/wall.wav"));
  47. s->sample->volume=15;
  48. s = asset_get(P("./assets/sound/steps/1.wav"));
  49. s->sample->volume=80;
  50. s = asset_get(P("./assets/sound/steps/2.wav"));
  51. s->sample->volume=80;
  52. s = asset_get(P("./assets/sound/steps/3.wav"));
  53. s->sample->volume=80;
  54. s = asset_get(P("./assets/sound/fire/fire.wav"));
  55. s->sample->volume=50;
  56. audio_music_set_volume(0.4);
  57. bool running = true;
  58. while(running)
  59. {
  60. frame_begin();
  61. frame_end_at_rate(60);
  62. SDL_Event e = {0};
  63. while(SDL_PollEvent(&e))
  64. {
  65. switch(e.type) {
  66. case SDL_KEYDOWN:{
  67. if(e.key.keysym.sym == SDLK_a) audio_sound_resume(2);
  68. if(e.key.keysym.sym == SDLK_w) audio_sound_resume(0);
  69. if(e.key.keysym.sym == SDLK_s) audio_sound_resume(1);
  70. if(e.key.keysym.sym == SDLK_d) audio_sound_resume(2);
  71. }break;
  72. case SDL_KEYUP:
  73. {
  74. if(e.key.keysym.sym == SDLK_a) audio_sound_pause(2);
  75. if(e.key.keysym.sym == SDLK_w) audio_sound_pause(0);
  76. if(e.key.keysym.sym == SDLK_s) audio_sound_pause(1);
  77. if(e.key.keysym.sym == SDLK_d) audio_sound_pause(2);
  78. };
  79. if (e.key.keysym.sym == SDLK_ESCAPE) { running = false; }
  80. if (e.key.keysym.sym == SDLK_p) { graphics_viewport_screenshot(); }
  81. if (e.key.keysym.sym == SDLK_r) {
  82. asset_reload_all();
  83. };
  84. break;
  85. case SDL_QUIT:
  86. running = 0;
  87. break;
  88. }
  89. };
  90. camera_control_freecam(entity_get("cam"),frame_time());
  91. camera* cam = entity_get("cam");
  92. landscape* world = entity_get("world");
  93. vec3 cam_dir = vec3_normalize(vec3_sub(cam->target, cam->position));
  94. float height = landscape_height(world, vec2_new(cam->position.x, cam->position.z));
  95. cam->position.y = height + 15;
  96. cam->target = vec3_add(cam->position, cam_dir);
  97. particles_update(entity_get("fire"),frame_time()*2.1,entity_get("cam"));
  98. renderer_add(dr,render_object_particles(entity_get("fire")));
  99. renderer_add(dr,render_object_landscape(entity_get("world")));
  100. for (int i = 0; i < 12; i++)
  101. {
  102. particles_update(entity_get("snow%i",i),frame_time(),entity_get("cam"));
  103. renderer_add(dr,render_object_particles(entity_get("snow%i",i)));
  104. }
  105. for (int i = 0; i < 12; i++)
  106. {
  107. particles * par = entity_get("snow%i",i);
  108. par->position = entity_get_as("cam",camera)->position;
  109. par->position.y += 25;
  110. par->position.z += (-15 + i*3+0.5);
  111. }
  112. renderer_render(dr);
  113. graphics_swap();
  114. frame_end();
  115. };
  116. corange_finish();
  117. return 0;
  118. }