feat: more work on checkpoints
This commit is contained in:
parent
69b1f267ea
commit
15b890ad55
|
@ -5,8 +5,7 @@
|
|||
|
||||
void Checkpoint::_bind_methods() {
|
||||
BIND_PROPERTY(Variant::VECTOR3, location);
|
||||
BIND_PROPERTY(Variant::BOOL, can_jump);
|
||||
BIND_PROPERTY(Variant::BOOL, can_bash);
|
||||
BIND_PROPERTY(Variant::VECTOR3, camera_location);
|
||||
}
|
||||
|
||||
void Checkpoint::set_location(Transform3D location) {
|
||||
|
@ -17,32 +16,22 @@ Transform3D Checkpoint::get_location() const {
|
|||
return this->location;
|
||||
}
|
||||
|
||||
void Checkpoint::set_can_jump(bool can_jump) {
|
||||
this->can_jump = can_jump;
|
||||
void Checkpoint::set_camera_location(Transform3D location) {
|
||||
this->camera_location = location;
|
||||
}
|
||||
|
||||
bool Checkpoint::get_can_jump() const {
|
||||
return this->can_jump;
|
||||
}
|
||||
|
||||
void Checkpoint::set_can_bash(bool can_bash) {
|
||||
this->can_bash = can_bash;
|
||||
}
|
||||
|
||||
bool Checkpoint::get_can_bash() const {
|
||||
return this->can_bash;
|
||||
Transform3D Checkpoint::get_camera_location() const {
|
||||
return this->camera_location;
|
||||
}
|
||||
|
||||
void Checkpoint::load(PlayerBody *body) const {
|
||||
body->set_global_transform(this->location);
|
||||
body->set_can_jump(this->can_jump);
|
||||
// body->set_can_bash(this->can_bash);
|
||||
body->get_camera()->set_global_transform(this->camera_location);
|
||||
}
|
||||
|
||||
void Checkpoint::save(PlayerBody *body) {
|
||||
this->set_location(body->get_global_transform_interpolated());
|
||||
this->set_can_jump(body->get_can_jump());
|
||||
// self->set_can_bash(body->get_can_bash());
|
||||
this->set_camera_location(body->get_camera()->get_global_transform_interpolated());
|
||||
}
|
||||
|
||||
Ref<Checkpoint> Checkpoint::save_new(PlayerBody *body) {
|
||||
|
|
|
@ -13,16 +13,15 @@ class Checkpoint : public Resource {
|
|||
public:
|
||||
void set_location(Transform3D location);
|
||||
Transform3D get_location() const;
|
||||
void set_can_jump(bool can_jump);
|
||||
bool get_can_jump() const;
|
||||
void set_can_bash(bool can_bash);
|
||||
bool get_can_bash() const;
|
||||
void set_camera_location(Transform3D camera_location);
|
||||
Transform3D get_camera_location() const;
|
||||
|
||||
void load(PlayerBody *body) const;
|
||||
void save(PlayerBody *body);
|
||||
static Ref<Checkpoint> save_new(PlayerBody *body);
|
||||
private:
|
||||
Transform3D location{};
|
||||
Transform3D camera_location{};
|
||||
bool can_jump{false}, can_bash{false};
|
||||
};
|
||||
|
||||
|
|
|
@ -46,6 +46,9 @@ void PlayerBody::_notification(int what) {
|
|||
case NOTIFICATION_ENTER_TREE:
|
||||
this->enter_tree();
|
||||
return;
|
||||
case NOTIFICATION_READY:
|
||||
this->ready();
|
||||
return;
|
||||
case NOTIFICATION_PROCESS:
|
||||
this->process(this->get_process_delta_time());
|
||||
return;
|
||||
|
@ -61,6 +64,10 @@ void PlayerBody::enter_tree() {
|
|||
this->model = Object::cast_to<Node3D>(this->get_node(NodePath("character")));
|
||||
this->anim = Object::cast_to<AnimationPlayer>(this->get_node(NodePath("character/AnimationPlayer")));
|
||||
this->camera = Object::cast_to<Camera3D>(this->get_node(NodePath("Camera3D")));
|
||||
this->state = Object::cast_to<PlayerStateMachine>(this->get_node(NodePath("%PlayerStateMachine")));
|
||||
}
|
||||
|
||||
void PlayerBody::ready() {
|
||||
this->camera->set_fov(this->min_fov);
|
||||
this->last_checkpoint = Checkpoint::save_new(this);
|
||||
}
|
||||
|
@ -85,6 +92,8 @@ void PlayerBody::save_checkpoint() {
|
|||
|
||||
void PlayerBody::load_checkpoint() {
|
||||
this->last_checkpoint->load(this);
|
||||
this->force_update_transform();
|
||||
this->set_velocity(Vector3{});
|
||||
this->state->force_state<FallingState>();
|
||||
}
|
||||
|
||||
|
|
|
@ -12,6 +12,7 @@ class PlayerBody : public CharacterBody3D {
|
|||
static void _bind_methods();
|
||||
void _notification(int what);
|
||||
void enter_tree();
|
||||
void ready();
|
||||
void process(double delta);
|
||||
void physics_process(double delta);
|
||||
|
||||
|
|
|
@ -36,6 +36,7 @@ target_speed = 25.0
|
|||
jump_impulse = Vector2(0.9, 5)
|
||||
|
||||
[node name="PlayerStateMachine" type="PlayerStateMachine" parent="."]
|
||||
unique_name_in_owner = true
|
||||
|
||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="."]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.05124, 0)
|
||||
|
|
Loading…
Reference in a new issue