// -*- C++ -*- #ifndef MBOSTOCK_ROOM_H #define MBOSTOCK_ROOM_H #include #include "model.h" namespace mbostock { class Lighting; class ParticleSimulator; class Portal; class Room; class RoomForce; class RoomObject; class RoomOrigin; class Shape; class Sound; class Trail; class Transform; class UnaryForce; class RoomModel : public Model { public: RoomModel(const Room& room); virtual ~RoomModel(); virtual void initialize(); virtual void display(); private: const Room& room_; std::vector dynamicObjects_; Model* staticModel_; }; class Room { public: Room(); ~Room(); inline void addForce(RoomForce* o) { forces_.push_back(o); } inline void addOrigin(RoomOrigin* o) { origins_.push_back(o); } inline void addObject(RoomObject* o) { objects_.push_back(o); } inline void addPortal(Portal* p) { portals_.push_back(p); } inline void addTransform(Transform* r) { transforms_.push_back(r); } inline const std::vector& forces() const { return forces_; } inline const std::vector& origins() const { return origins_; } inline const std::vector& objects() const { return objects_; } inline const std::vector& portals() const { return portals_; } inline const std::vector& trails() const { return trails_; } inline Model& model() { return model_; } inline Trail& trail() { return *trail_; } inline const Lighting& lighting() const { return *lighting_; } inline const AxisAlignedBox& cameraBounds() const { return cameraBounds_; } inline const Sound* music() const { return music_; } void setMusic(const Sound& music); void setLighting(const Lighting& lighting); void setCameraBounds(const Vector& min, const Vector& max); void resetForces(); void applyForce(UnaryForce& force); void step(const ParticleSimulator& s); void reset(); void nextTrail(const Vector& origin); private: std::vector forces_; std::vector origins_; std::vector objects_; std::vector portals_; std::vector trails_; std::vector transforms_; const Lighting* lighting_; const Sound* music_; AxisAlignedBox cameraBounds_; RoomModel model_; Trail* trail_; }; class RoomOrigin { public: RoomOrigin(const Vector& position, const Vector& velocity); inline const Vector& position() const { return position_; } inline const Vector& velocity() const { return velocity_; } private: Vector position_; Vector velocity_; }; } #endif