| 409 | } |
| 410 | |
| 411 | vec4 Camera::get_position() const { |
| 412 | const auto stage = game_object_ref().get_stage(); |
| 413 | if (!stage.has_value()) { |
| 414 | return vec4{0.0f, 0.0f, 0.0f, 1.0f}; |
| 415 | } |
| 416 | const auto buffer_obj = stage->get().get_game_object("buffer"); |
| 417 | if (!buffer_obj.has_value()) { |
| 418 | return vec4{0.0f, 0.0f, 0.0f, 1.0f}; |
| 419 | } |
| 420 | |
| 421 | const auto buff_opt = |
| 422 | buffer_obj->get().get_component<Buffer>("buffer_component"); |
| 423 | if (!buff_opt.has_value()) { |
| 424 | return vec4{0.0f, 0.0f, 0.0f, 1.0f}; |
| 425 | } |
| 426 | const auto& buff = buff_opt->get(); |
| 427 | const auto buf_dim = |
| 428 | vec4(buff.buffer_width_f, buff.buffer_height_f, 0.0f, 1.0f); |
| 429 | const auto pos_vec = vec4{camera_pos_x_, camera_pos_y_, 0.0f, 1.0f}; |
| 430 | |
| 431 | return buf_dim * 0.5f - |
| 432 | buffer_obj->get().get_pose().inv() * scale_ * pos_vec; |
| 433 | } |
| 434 | |
| 435 | void Camera::recenter_camera() { |
| 436 | camera_pos_x_ = camera_pos_y_ = 0.0f; |
no test coverage detected