You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

118 regels
3.5 KiB

  1. //
  2. // Lol Engine — Bullet physics test
  3. //
  4. // Copyright © 2012—2020 Sam Hocevar <sam@hocevar.net>
  5. // © 2009—2013 Benjamin “Touky” Huet <huet.benjamin@gmail.com>
  6. //
  7. // Lol Engine is free software. It comes without any warranty, to
  8. // the extent permitted by applicable law. You can redistribute it
  9. // and/or modify it under the terms of the Do What the Fuck You Want
  10. // to Public License, Version 2, as published by the WTFPL Task Force.
  11. // See http://www.wtfpl.net/ for more details.
  12. //
  13. #pragma once
  14. #include <memory>
  15. #include <string>
  16. #include <vector>
  17. #include <map>
  18. class CatShaderData : public GpuShaderData
  19. {
  20. friend class CRenderer;
  21. public:
  22. //---
  23. CatShaderData(uint32_t vert_decl_flags, std::shared_ptr<Shader> shader);
  24. //---
  25. void SetupDefaultData();
  26. virtual void SetupShaderDatas(mat4 const &model);
  27. //--
  28. virtual std::string GetInVertexName() { return "in_vertex"; }
  29. virtual std::string GetInNormalName() { return "in_normal"; }
  30. virtual std::string GetInColorName() { return "in_color"; }
  31. virtual std::string GetInTexCoordName() { return "in_texcoord"; }
  32. TextureUniform m_tex_uniform;
  33. float m_sprite_orientation;
  34. float m_sprite_flip;
  35. };
  36. class BtPhysTest : public WorldEntity
  37. {
  38. public:
  39. BtPhysTest(bool editor = false);
  40. virtual ~BtPhysTest();
  41. std::string GetName() const { return "<BtPhysTest>"; }
  42. protected:
  43. virtual void tick_game(float seconds);
  44. virtual void tick_draw(float seconds, Scene &scene);
  45. void InitApp();
  46. private:
  47. //MeshViewerInput ---------------------------------------------------------
  48. struct BtPhysTestKeyInputBase : public StructSafeEnum
  49. {
  50. enum Type
  51. {
  52. KEY_START = 0,
  53. KEY_MOVE_FORWARD = KEY_START,
  54. KEY_MOVE_BACK,
  55. KEY_MOVE_LEFT,
  56. KEY_MOVE_RIGHT,
  57. KEY_MOVE_UP,
  58. KEY_MOVE_DOWN,
  59. KEY_MOVE_JUMP,
  60. KEY_QUIT,
  61. KEY_MAX
  62. };
  63. protected:
  64. virtual bool BuildEnumMap(std::map<int64_t, std::string>& enum_map)
  65. {
  66. enum_map[KEY_MOVE_FORWARD] = input::key_to_name(input::key::SC_Up);
  67. enum_map[KEY_MOVE_BACK] = input::key_to_name(input::key::SC_Down);
  68. enum_map[KEY_MOVE_LEFT] = input::key_to_name(input::key::SC_Left);
  69. enum_map[KEY_MOVE_RIGHT] = input::key_to_name(input::key::SC_Right);
  70. enum_map[KEY_MOVE_UP] = input::key_to_name(input::key::SC_PageUp);
  71. enum_map[KEY_MOVE_DOWN] = input::key_to_name(input::key::SC_PageDown);
  72. enum_map[KEY_MOVE_JUMP] = input::key_to_name(input::key::SC_Space);
  73. enum_map[KEY_QUIT] = input::key_to_name(input::key::SC_Escape);
  74. return true;
  75. }
  76. };
  77. typedef SafeEnum<BtPhysTestKeyInputBase> BtPhysTestKeyInput;
  78. TileSet *m_cat_texture;
  79. std::shared_ptr<Shader> m_cat_shader;
  80. CatShaderData *m_cat_sdata;
  81. Camera *m_camera;
  82. Light *m_light1;
  83. Light *m_light2;
  84. int m_init_status;
  85. bool m_ready;
  86. lol::phys::Simulation *m_simulation;
  87. std::vector<EasyConstraint*> m_constraint_list;
  88. struct animated_object { PhysicsObject* obj; float anim; };
  89. std::vector<animated_object> m_physobj_list;
  90. std::vector<PhysicsObject*> m_ground_list;
  91. std::vector<PhysicsObject*> m_platform_list;
  92. std::vector<PhysicsObject*> m_character_list;
  93. std::vector<PhysicsObject*> m_stairs_list;
  94. float m_loop_value;
  95. float m_target_timer;
  96. int m_cam_target;
  97. float m_fov_dp;
  98. float m_loc_dp;
  99. };