22 #include <unordered_set> 24 #include <boost/pool/pool_alloc.hpp> 25 #include <boost/functional/hash.hpp> 57 typedef std::pair<i_collidable_object*, i_collidable_object*>
collision_pair;
58 typedef std::unordered_set<collision_pair, boost::hash<collision_pair>, std::equal_to<collision_pair>, boost::fast_pool_allocator<collision_pair>>
collision_list;
60 typedef std::list<sprite, boost::fast_pool_allocator<sprite>> simple_sprite_list;
61 typedef std::list<physical_object, boost::fast_pool_allocator<physical_object>> simple_object_list;
82 void add_sprite(std::shared_ptr<i_sprite> aObject);
86 void add_shape(std::shared_ptr<i_shape> aObject);
100 const optional_step_time_interval&
physics_time()
const;
105 void reserve(std::size_t aCapacity);
106 const object_list&
objects()
const;
107 void add_object(std::shared_ptr<i_game_object> aObject);
118 void do_add_object(std::shared_ptr<i_game_object> aObject);
119 void sort_shapes()
const;
121 void update_objects();
125 bool iEnableDynamicUpdate;
126 bool iEnableZSorting;
130 optional_step_time_interval iPhysicsTime;
131 step_time_interval iStepInterval;
132 object_list iObjects;
133 object_list iNewObjects;
134 mutable shape_list iRenderBuffer;
135 simple_sprite_list iSimpleSprites;
136 simple_object_list iSimpleObjects;
137 object_list::iterator iLastCollidable;
138 mutable boost::optional<broad_phase_collision_tree_2d> iBroadPhaseCollisionTree2d;
139 mutable boost::optional<broad_phase_collision_tree_3d> iBroadPhaseCollisionTree3d;
141 std::atomic<bool> iUpdatedSinceLastSnapshot;
142 bool iTakingSnapshot;
143 mutable std::recursive_mutex iUpdateMutex;
144 std::unique_ptr<physics_thread> iPhysicsThread;
145 collision_list iCollisions;
boost::optional< time_interval > optional_time_interval
std::shared_ptr< i_game_object > object_pointer
void add_object(std::shared_ptr< i_game_object > aObject)
boost::optional< step_time_interval > optional_step_time_interval
virtual const i_widget & as_widget() const
event< graphics_context & > sprites_painted
virtual void paint(graphics_context &aGraphicsContext) const
virtual neogfx::logical_coordinate_system logical_coordinate_system() const
void set_physics_time(const optional_step_time_interval &aTime)
event< step_time_interval > applying_physics
boost::optional< vec3 > optional_vec3
i_physical_object::step_time_interval step_time_interval
const broad_phase_collision_tree_3d & collision_tree_3d() const
step_time_interval physics_step_interval() const
logical_coordinate_system
double update_time() const
std::vector< i_shape * > shape_list
event< i_game_object & > object_clicked
i_physical_object & create_physical_object()
virtual void mouse_button_pressed(mouse_button aButton, const point &aPosition, key_modifiers_e aKeyModifiers)
i_physical_object::time_interval time_interval
std::vector< object_pointer > object_list
const optional_step_time_interval & physics_time() const
void set_physics_step_interval(step_time_interval aStepInterval)
bool dynamic_update_enabled() const
std::unordered_set< collision_pair, boost::hash< collision_pair >, std::equal_to< collision_pair >, boost::fast_pool_allocator< collision_pair > > collision_list
void add_shape(i_shape &aObject)
event< step_time_interval > physics_applied
aabb_quadtree broad_phase_collision_tree_2d
void reserve(std::size_t aCapacity)
bool is_collision_tree_3d() const
bool is_collision_tree_2d() const
const broad_phase_collision_tree_2d & collision_tree_2d() const
i_physical_object & create_earth()
adds gravity by simulating the earth, groundlevel at y = 0;
void enable_z_sorting(bool aEnableZSorting)
const object_list & objects() const
void enable_dynamic_update(bool aEnableDynamicUpdate)
event< i_game_object &, i_game_object & > object_collision
void add_sprite(i_sprite &aObject)
event< graphics_context & > painting_sprites
std::chrono::duration< std::chrono::nanoseconds::rep, std::ratio< 1, 705600000 > > flicks
i_physical_object::optional_step_time_interval optional_step_time_interval
void set_gravitational_constant(scalar aG)
void set_uniform_gravity(const optional_vec3 &aUniformGravity=vec3{ 0.0, -9.80665, 0.0})
const optional_vec3 & uniform_gravity() const
aabb_octree broad_phase_collision_tree_3d
event< step_time_interval > taking_snapshot
void add_physical_object(i_physical_object &aObject)
std::pair< i_collidable_object *, i_collidable_object * > collision_pair
scalar gravitational_constant() const
int64_t step_time_interval
i_physical_object::optional_time_interval optional_time_interval
i_sprite & create_sprite()