X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;ds=sidebyside;f=source%2Fgame%2Fcamera.h;h=f6df873c1120586c04e6ce6fb3cfb80d55e15159;hb=bfbcfa2678c70d661cb9104b2ef677d7d7b5a637;hp=1e8efdd5e85527b536e6d9d87bbcca1f8afedf59;hpb=a99b57a74252fd3de649d544d070b747f91fcf4d;p=libs%2Fgame.git diff --git a/source/game/camera.h b/source/game/camera.h index 1e8efdd..f6df873 100644 --- a/source/game/camera.h +++ b/source/game/camera.h @@ -25,31 +25,39 @@ struct CameraSetup std::string sequence_name; }; -class Camera: public Component +struct CameraData { -public: - using Setup = CameraSetup; - -private: - const Setup &setup; Geometry::Angle fov_y; LinAl::Vector size; float height; float near_clip; float far_clip; + bool is_orthographic() const { return fov_y==Geometry::Angle::zero(); } + Geometry::Angle get_fov_horizontal() const { return Geometry::atan(tan(fov_y/2.0f)*get_aspect())*2.0f; } + float get_aspect() const { return size.x/size.y; } +}; + +class Camera: public BufferedComponent +{ +public: + using Setup = CameraSetup; + +private: + const Setup &setup; + public: Camera(Handle, const Setup &); void set_field_of_view(Geometry::Angle, float); void set_size(const LinAl::Vector &); - bool is_orthographic() const { return fov_y==Geometry::Angle::zero(); } - Geometry::Angle get_fov_vertical() const { return fov_y; } - Geometry::Angle get_fov_horizontal() const { return Geometry::atan(tan(fov_y/2.0f)*get_aspect())*2.0f; } - const LinAl::Vector &get_size() const { return size; } - float get_aspect() const { return size.x/size.y; } - float get_near_clip() const { return near_clip; } - float get_far_clip() const { return far_clip; } + bool is_orthographic() const { return read().is_orthographic(); } + Geometry::Angle get_fov_vertical() const { return read().fov_y; } + Geometry::Angle get_fov_horizontal() const { return read().get_fov_horizontal(); } + const LinAl::Vector &get_size() const { return read().size; } + float get_aspect() const { return read().get_aspect(); } + float get_near_clip() const { return read().near_clip; } + float get_far_clip() const { return read().far_clip; } CameraScaling get_scaling() const { return setup.scaling; } const std::string &get_sequence_name() const { return setup.sequence_name; } };