njin
Engine 2D gọn nhẹ để tự tay làm game theo ý mình. Vibe coding cũng ổn luôn
Loading...
Searching...
No Matches
njin_camera.h
1#pragma once
2#include "_comps.h"
3#include "_types.h"
4#include <entt/entity/entity.hpp>
5
6namespace njin {
7struct context;
8struct level_handle;
9
12
32 entt::entity target = entt::null;
39 f32 smoothing = 0.12f;
50 bool center = true;
53 bool pixel_snap = false;
54
59 bool started = false;
60};
61
68entt::entity camera_spawn(context &ctx, f32 zoom = 1.0f, vec2 pos = {});
69
74rect level_bounds(const context &ctx, level_handle level);
75
82vec2 camera_clamp(const context &ctx, vec2 pos, const camera_2d &cam, rect bounds);
83
91camera_view camera_active(const context &ctx);
92
97vec2 w2scr(const context &ctx, vec2 pos);
98
105vec2 scr2w(const context &ctx, vec2 pos);
106
113rect camera_bounds(const context &ctx);
114
123void camera_set_post_shader(context &ctx, shader_handle shader);
125} // namespace njin
camera_view camera_active(const context &ctx)
Trả về góc nhìn dùng cho frame này.
vec2 w2scr(const context &ctx, vec2 pos)
Đổi một điểm từ thế giới sang pixel màn hình, qua camera_active().
rect camera_bounds(const context &ctx)
Vùng thế giới đang hiện trên màn hình.
rect level_bounds(const context &ctx, level_handle level)
Khung của một level trong thế giới, dùng cho camera_follow::bounds.
vec2 scr2w(const context &ctx, vec2 pos)
Đổi một điểm từ pixel màn hình sang thế giới, qua camera_active().
entt::entity camera_spawn(context &ctx, f32 zoom=1.0f, vec2 pos={})
Tạo một entity camera đang dùng (transform, njin::camera_2d, njin::camera_on) nhìn vào pos,...
vec2 camera_clamp(const context &ctx, vec2 pos, const camera_2d &cam, rect bounds)
Giới hạn một vị trí camera để khung nhìn nằm trong bounds.
void camera_set_post_shader(context &ctx, shader_handle shader)
Áp một shader hậu kỳ lên toàn bộ thế giới đi qua camera.
float f32
Số thực 32 bit.
Definition _types.h:28
2D camera.
Definition _comps.h:25
Cho camera bám theo một entity: mượt, có vùng chết, nhìn trước theo hướng chạy, và không bao giờ lộ r...
Definition njin_camera.h:31
rect bounds
Vùng thế giới mà khung nhìn không được vượt ra.
Definition njin_camera.h:47
f32 lookahead_smoothing
Độ trễ của phần nhìn trước, giây. Lớn hơn smoothing để quay đầu không giật.
Definition njin_camera.h:44
bool started
Đã đặt vị trí lần đầu.
Definition njin_camera.h:59
f32 smoothing
Độ trễ, giây: mất khoảng chừng này để đi được 63% quãng đến vị trí mới.
Definition njin_camera.h:39
vec2 deadzone
Kích thước hình chữ nhật quanh tâm màn hình mà mục tiêu đi trong đó thì camera đứng yên.
Definition njin_camera.h:36
vec2 lookahead
Nhìn trước theo hướng mục tiêu đang đi, từng trục: {48, 0} cho platformer (chỉ ngang),...
Definition njin_camera.h:42
bool center
Giữ camera_2d::offset ở giữa màn hình (cả khi đổi cỡ cửa sổ hay độ phân giải ảo).
Definition njin_camera.h:50
bool pixel_snap
Làm tròn vị trí camera theo pixel màn hình.
Definition njin_camera.h:53
vec2 look
Phần nhìn trước hiện tại, engine ghi.
Definition njin_camera.h:55
vec2 offset
Cộng vào vị trí mục tiêu: {0, -16} để nhìn cao hơn đầu nhân vật.
Definition njin_camera.h:33
vec2 last_target
Vị trí mục tiêu ở frame trước, engine ghi.
Definition njin_camera.h:56
entt::entity target
Entity cần bám (có transform). null là đứng yên.
Definition njin_camera.h:32
Góc nhìn 2D đang được dùng để vẽ, lấy từ camera_active().
Definition _types.h:74
Định danh của một level đã nạp, trả về từ level_load().
Definition njin_level.h:20
Hình chữ nhật thẳng trục: pos là góc trên trái, size là rộng và cao.
Definition _math.h:13
Định danh của một shader, tạo bởi shader_load().
Definition _types.h:101
Vector 2 chiều. Dùng cho vị trí, kích thước, độ dời.
Definition _types.h:39