feat: created tunnels gamemode and player objects

This commit is contained in:
Sara 2024-03-16 13:53:41 +01:00
parent beb1fe05f2
commit 168cba5d03
9 changed files with 181 additions and 7 deletions

6
godot/game_root.tscn Normal file
View file

@ -0,0 +1,6 @@
[gd_scene load_steps=2 format=3 uid="uid://cmdfv4g8iqs2p"]
[ext_resource type="PackedScene" uid="uid://m36guasmi3c1" path="res://test_level.tscn" id="1_4g2mr"]
[node name="GameRoot" type="GameRoot3D"]
first_boot_level = ExtResource("1_4g2mr")

6
godot/player.tscn Normal file
View file

@ -0,0 +1,6 @@
[gd_scene format=3 uid="uid://cqkbxe758jr7p"]
[node name="TunnelsPlayer" type="TunnelsPlayer"]
[node name="Camera3D" type="Camera3D" parent="."]
transform = Transform3D(1, 0, 0, 0, 0.971276, 0.237957, 0, -0.237957, 0.971276, 0, 1.20073, 1.85333)

View file

@ -11,5 +11,29 @@ config_version=5
[application] [application]
config/name="godot cpp template" config/name="godot cpp template"
run/main_scene="res://game_root.tscn"
config/features=PackedStringArray("4.2", "Forward Plus") config/features=PackedStringArray("4.2", "Forward Plus")
config/icon="res://icon.svg" config/icon="res://icon.svg"
[input]
move_left={
"deadzone": 0.5,
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":65,"key_label":0,"unicode":97,"echo":false,"script":null)
]
}
move_right={
"deadzone": 0.5,
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":68,"key_label":0,"unicode":100,"echo":false,"script":null)
]
}
move_forward={
"deadzone": 0.5,
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":87,"key_label":0,"unicode":119,"echo":false,"script":null)
]
}
move_backward={
"deadzone": 0.5,
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":83,"key_label":0,"unicode":115,"echo":false,"script":null)
]
}

26
godot/test_level.tscn Normal file
View file

@ -0,0 +1,26 @@
[gd_scene load_steps=6 format=3 uid="uid://m36guasmi3c1"]
[ext_resource type="PackedScene" uid="uid://cqkbxe758jr7p" path="res://player.tscn" id="1_hv5rj"]
[sub_resource type="GameState" id="GameState_k4j3x"]
[sub_resource type="TunnelsGameMode" id="TunnelsGameMode_itn7y"]
game_state = SubResource("GameState_k4j3x")
player_scene = ExtResource("1_hv5rj")
[sub_resource type="BoxMesh" id="BoxMesh_5glbk"]
size = Vector3(20, 0.25, 20)
[sub_resource type="BoxShape3D" id="BoxShape3D_kacqg"]
size = Vector3(20, 0.25, 20)
[node name="Level3D" type="Level3D"]
game_mode_prototype = SubResource("TunnelsGameMode_itn7y")
[node name="MeshInstance3D" type="MeshInstance3D" parent="."]
mesh = SubResource("BoxMesh_5glbk")
[node name="StaticBody3D" type="StaticBody3D" parent="."]
[node name="CollisionShape3D" type="CollisionShape3D" parent="StaticBody3D"]
shape = SubResource("BoxShape3D_kacqg")

View file

@ -3,6 +3,14 @@
#include <godot_cpp/core/class_db.hpp> #include <godot_cpp/core/class_db.hpp>
#include <godot_cpp/core/defs.hpp> #include <godot_cpp/core/defs.hpp>
#include <godot_cpp/godot.hpp> #include <godot_cpp/godot.hpp>
#include "utils/game_root.hpp"
#include "utils/game_mode.hpp"
#include "utils/game_state.hpp"
#include "utils/level.hpp"
#include "utils/spawn_point.hpp"
#include "utils/player_input.hpp"
#include "tunnels_game_mode.hpp"
#include "tunnels_player.hpp"
using namespace godot; using namespace godot;
@ -11,14 +19,17 @@ void initialize_gdextension_types(ModuleInitializationLevel p_level)
if (p_level != MODULE_INITIALIZATION_LEVEL_SCENE) { if (p_level != MODULE_INITIALIZATION_LEVEL_SCENE) {
return; return;
} }
ClassDB::register_class<GameRoot>();
ClassDB::register_class<GameRoot3D>();
ClassDB::register_class<SpawnPoint3D>();
ClassDB::register_class<PlayerInput>();
ClassDB::register_class<GameMode>();
ClassDB::register_class<GameState>();
ClassDB::register_class<Level3D>();
ClassDB::register_class<TunnelsGameMode>();
ClassDB::register_class<TunnelsPlayer>();
} }
//void uninitialize_gdextension_types(ModuleInitializationLevel p_level) {
// if (p_level != MODULE_INITIALIZATION_LEVEL_SCENE) {
// return;
// }
//}
extern "C" extern "C"
{ {
// Initialization // Initialization
@ -26,7 +37,6 @@ extern "C"
{ {
GDExtensionBinding::InitObject init_obj(p_get_proc_address, p_library, r_initialization); GDExtensionBinding::InitObject init_obj(p_get_proc_address, p_library, r_initialization);
init_obj.register_initializer(initialize_gdextension_types); init_obj.register_initializer(initialize_gdextension_types);
// init_obj.register_terminator(uninitialize_gdextension_types);
init_obj.set_minimum_library_initialization_level(MODULE_INITIALIZATION_LEVEL_SCENE); init_obj.set_minimum_library_initialization_level(MODULE_INITIALIZATION_LEVEL_SCENE);
return init_obj.init(); return init_obj.init();

View file

@ -0,0 +1,6 @@
#include "tunnels_game_mode.hpp"
namespace godot {
void TunnelsGameMode::_bind_methods() {
}
}

14
src/tunnels_game_mode.hpp Normal file
View file

@ -0,0 +1,14 @@
#ifndef TUNNELS_GAME_MODE_HPP
#define TUNNELS_GAME_MODE_HPP
#include "utils/game_mode.hpp"
namespace godot {
class TunnelsGameMode : public GameMode {
GDCLASS(TunnelsGameMode, GameMode)
static void _bind_methods();
public:
};
}
#endif // !TUNNELS_GAME_MODE_HPP

47
src/tunnels_player.cpp Normal file
View file

@ -0,0 +1,47 @@
#include "tunnels_player.hpp"
#include "utils/godot_macros.h"
#include "utils/player_input.hpp"
#include <godot_cpp/classes/input_event.hpp>
#include <godot_cpp/classes/viewport.hpp>
namespace godot {
float const TunnelsPlayer::MOVE_SPEED{0.f};
void TunnelsPlayer::_bind_methods() {
#define CLASSNAME TunnelsPlayer
GDFUNCTION_ARGS(horizontal_move_input, "event", "value");
GDFUNCTION_ARGS(vertical_move_input, "event", "value");
}
void TunnelsPlayer::_ready() { GDGAMEONLY();
this->camera = this->get_viewport()->get_camera_3d();
}
void TunnelsPlayer::_physics_process(double delta_time) { GDGAMEONLY();
this->set_velocity(this->get_world_move_input());
this->move_and_slide();
}
void TunnelsPlayer::setup_player_input(PlayerInput *input) {
input->listen_to(PlayerInput::Listener("move_right", "move_left", this, "horizontal_move_input"));
input->listen_to(PlayerInput::Listener("move_forward", "move_backward", this, "vertical_move_input"));
}
Node *TunnelsPlayer::to_node() {
return Object::cast_to<Node>(this);
}
void TunnelsPlayer::horizontal_move_input(Ref<InputEvent> event, float value) {
this->move_input.x = value;
}
void TunnelsPlayer::vertical_move_input(Ref<InputEvent> event, float value) {
this->move_input.y = value;
}
Vector3 TunnelsPlayer::get_world_move_input() const {
Basis const camera_basis = camera->get_global_transform().get_basis();
return this->move_input.x * camera_basis.get_column(0)
+ this->move_input.y * camera_basis.get_column(2);
}
}

35
src/tunnels_player.hpp Normal file
View file

@ -0,0 +1,35 @@
#ifndef TUNNELS_PLAYER_HPP
#define TUNNELS_PLAYER_HPP
#include "utils/player.hpp"
#include "utils/player_input.hpp"
#include <godot_cpp/classes/camera3d.hpp>
#include <godot_cpp/classes/character_body3d.hpp>
#include <godot_cpp/classes/input_event.hpp>
namespace godot {
class TunnelsPlayer : public CharacterBody3D, public IPlayer {
GDCLASS(TunnelsPlayer, CharacterBody3D);
static void _bind_methods();
public:
virtual void _ready() override;
virtual void _physics_process(double delta_time) override;
virtual void setup_player_input(PlayerInput *input) override;
virtual Node *to_node() override;
void horizontal_move_input(Ref<InputEvent> event, float value);
void vertical_move_input(Ref<InputEvent> event, float value);
Vector3 get_world_move_input() const;
private:
Vector2 move_input{0,0};
Camera3D *camera{nullptr};
public:
static float const MOVE_SPEED;
};
}
#endif // !TUNNELS_PLAYER_HPP