feat: initialized template and wrote first gameplay code
This commit is contained in:
parent
82f2cae0f6
commit
46a958f801
47 changed files with 1093 additions and 33 deletions
89
modules/wave_survival/player_body.cpp
Normal file
89
modules/wave_survival/player_body.cpp
Normal file
|
|
@ -0,0 +1,89 @@
|
|||
#include "player_body.h"
|
||||
#include "macros.h"
|
||||
#include "player_input.h"
|
||||
|
||||
PlayerBody *PlayerBody::singleton_instance{ nullptr };
|
||||
|
||||
void PlayerBody::_bind_methods() {
|
||||
}
|
||||
|
||||
void PlayerBody::ready() {
|
||||
PlayerInput *input{ cast_to<PlayerInput>(get_node(NodePath("%PlayerInput"))) };
|
||||
input->connect(PlayerInput::sig_movement_input, callable_mp(this, &self_type::set_movement_input));
|
||||
input->connect(PlayerInput::sig_look_input, callable_mp(this, &self_type::on_look_input));
|
||||
input->connect(PlayerInput::sig_jump, callable_mp(this, &self_type::on_jump_input));
|
||||
input->connect(PlayerInput::sig_run, callable_mp(this, &self_type::on_run_input));
|
||||
}
|
||||
|
||||
void PlayerBody::process(double delta) {
|
||||
}
|
||||
|
||||
void PlayerBody::physics_process(double delta) {
|
||||
GETSET(velocity, {
|
||||
Vector2 input{ this->movement_input.normalized() };
|
||||
if (get_is_running()) {
|
||||
input.y *= this->run_speed;
|
||||
input.x *= this->walk_speed;
|
||||
} else {
|
||||
input *= this->walk_speed;
|
||||
}
|
||||
velocity = velocity.move_toward(Vector3{ input.y * get_global_basis().get_column(2) + input.x * get_global_basis().get_column(0) } + Vector3{ 0.f, velocity.y, 0.f }, delta * this->acceleration);
|
||||
velocity += get_gravity() * delta;
|
||||
});
|
||||
move_and_slide();
|
||||
}
|
||||
|
||||
void PlayerBody::set_movement_input(Vector2 state) {
|
||||
this->movement_input = state;
|
||||
}
|
||||
|
||||
void PlayerBody::on_look_input(Vector2 look) {
|
||||
rotate_y(look.x);
|
||||
}
|
||||
|
||||
void PlayerBody::on_jump_input() {
|
||||
if (this->is_on_floor()) {
|
||||
GETSET(velocity, {
|
||||
velocity.y = this->jump_strength;
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
void PlayerBody::on_run_input(bool run) {
|
||||
this->try_running = run;
|
||||
}
|
||||
|
||||
void PlayerBody::_notification(int what) {
|
||||
if (Engine::get_singleton()->is_editor_hint()) {
|
||||
return; // don't run in editor
|
||||
}
|
||||
switch (what) {
|
||||
default:
|
||||
return;
|
||||
case NOTIFICATION_ENTER_TREE:
|
||||
singleton_instance = this;
|
||||
return;
|
||||
case NOTIFICATION_EXIT_TREE:
|
||||
singleton_instance = nullptr;
|
||||
return;
|
||||
case NOTIFICATION_READY:
|
||||
set_process(true);
|
||||
set_physics_process(true);
|
||||
ready();
|
||||
return;
|
||||
case NOTIFICATION_PROCESS:
|
||||
process(get_process_delta_time());
|
||||
return;
|
||||
case NOTIFICATION_PHYSICS_PROCESS:
|
||||
physics_process(get_physics_process_delta_time());
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
PlayerBody *PlayerBody::get_singleton() {
|
||||
return singleton_instance;
|
||||
}
|
||||
|
||||
bool PlayerBody::get_is_running() const {
|
||||
return this->try_running && this->movement_input.y > 0.f;
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue