Compare commits
3 Commits
65cf4cb9bc
...
39ec8e54c9
Author | SHA1 | Date |
---|---|---|
Sara | 39ec8e54c9 | |
Sara | 78c3b0f6cc | |
Sara | 1f742c0a58 |
|
@ -18,6 +18,8 @@ sky_material = SubResource("PhysicalSkyMaterial_2kikw")
|
|||
[sub_resource type="Environment" id="Environment_po184"]
|
||||
background_mode = 2
|
||||
sky = SubResource("Sky_g8k5h")
|
||||
ssil_enabled = true
|
||||
volumetric_fog_enabled = true
|
||||
|
||||
[node name="Level" type="Level"]
|
||||
|
||||
|
|
|
@ -399,17 +399,17 @@ shape = SubResource("CapsuleShape3D_hqeid")
|
|||
|
||||
[node name="GeneralSkeleton" parent="Model/RootNode" index="0"]
|
||||
bones/0/rotation = Quaternion(-2.98023e-08, 5.55112e-17, 5.55112e-17, 1)
|
||||
bones/1/position = Vector3(0.0088738, 0.823063, -0.0171585)
|
||||
bones/1/rotation = Quaternion(-0.0172656, -0.0722843, 0.00632022, 0.997215)
|
||||
bones/2/rotation = Quaternion(0.00906533, 0.00637064, 0.000263158, 0.999939)
|
||||
bones/3/rotation = Quaternion(0.00894442, 0.00637058, 0.000265375, 0.99994)
|
||||
bones/4/rotation = Quaternion(0.00916765, 0.0063708, 0.00026108, 0.999938)
|
||||
bones/5/rotation = Quaternion(-0.0122992, 0.0265571, -0.00409385, 0.999563)
|
||||
bones/6/rotation = Quaternion(-0.0123002, 0.0265571, -0.00409374, 0.999563)
|
||||
bones/1/position = Vector3(0.00799814, 0.822939, -0.0170919)
|
||||
bones/1/rotation = Quaternion(-0.0173024, -0.0769098, 0.00854839, 0.996851)
|
||||
bones/2/rotation = Quaternion(0.00896411, 0.00637054, 0.000265095, 0.99994)
|
||||
bones/3/rotation = Quaternion(0.00882963, 0.00637047, 0.000267564, 0.999941)
|
||||
bones/4/rotation = Quaternion(0.00907812, 0.00637071, 0.000262791, 0.999939)
|
||||
bones/5/rotation = Quaternion(-0.0130848, 0.0288738, -0.00513406, 0.999484)
|
||||
bones/6/rotation = Quaternion(-0.0130942, 0.0288758, -0.00513693, 0.999484)
|
||||
bones/10/rotation = Quaternion(0.519859, 0.470118, 0.477057, -0.530238)
|
||||
bones/11/rotation = Quaternion(0.238677, 0.843867, -0.452169, -0.162682)
|
||||
bones/12/rotation = Quaternion(-0.0217123, -0.701667, -0.0218952, 0.711837)
|
||||
bones/13/rotation = Quaternion(-0.0456982, 0.569854, -0.146863, 0.807224)
|
||||
bones/11/rotation = Quaternion(0.24205, 0.842133, -0.4545, -0.160169)
|
||||
bones/12/rotation = Quaternion(-0.0282314, -0.699896, -0.0284688, 0.713119)
|
||||
bones/13/rotation = Quaternion(-0.0439467, 0.565119, -0.143898, 0.811174)
|
||||
bones/14/rotation = Quaternion(-0.256269, 0.776338, 0.203807, 0.538599)
|
||||
bones/15/rotation = Quaternion(0.14485, 0.51961, 0.145065, 0.829446)
|
||||
bones/16/rotation = Quaternion(0.159353, 0.516644, 0.140377, 0.829446)
|
||||
|
@ -420,9 +420,9 @@ bones/21/rotation = Quaternion(0.494946, 0.0399225, 0.106743, 0.861418)
|
|||
bones/22/rotation = Quaternion(0.554517, 0.0271624, 0.0237916, 0.831389)
|
||||
bones/23/rotation = Quaternion(0.554045, 0.0389721, 0.0175394, 0.831389)
|
||||
bones/27/rotation = Quaternion(0.5168, -0.475173, -0.481158, -0.52499)
|
||||
bones/28/rotation = Quaternion(-0.132163, 0.858452, -0.457619, 0.190205)
|
||||
bones/29/rotation = Quaternion(0.00506691, 0.708274, -0.00510919, 0.705901)
|
||||
bones/30/rotation = Quaternion(0.0116492, -0.584682, 0.0637451, 0.808671)
|
||||
bones/28/rotation = Quaternion(-0.125884, 0.859315, -0.455472, 0.195646)
|
||||
bones/29/rotation = Quaternion(0.0109876, 0.709589, -0.0110795, 0.704443)
|
||||
bones/30/rotation = Quaternion(0.0112271, -0.589384, 0.0652025, 0.805139)
|
||||
bones/31/rotation = Quaternion(-0.256268, -0.776338, -0.203807, 0.538599)
|
||||
bones/32/rotation = Quaternion(0.14485, -0.51961, -0.145065, 0.829446)
|
||||
bones/33/rotation = Quaternion(0.159352, -0.516644, -0.140377, 0.829446)
|
||||
|
@ -432,19 +432,19 @@ bones/36/rotation = Quaternion(0.49701, -0.238709, -0.0692157, 0.831389)
|
|||
bones/38/rotation = Quaternion(0.494946, -0.0399222, -0.106743, 0.861418)
|
||||
bones/39/rotation = Quaternion(0.554517, -0.0271621, -0.0237913, 0.831389)
|
||||
bones/40/rotation = Quaternion(0.554045, -0.0389717, -0.0175393, 0.831389)
|
||||
bones/50/rotation = Quaternion(-0.0963603, 0.0440981, 0.990983, 0.0819873)
|
||||
bones/50/rotation = Quaternion(-0.0911938, 0.0463263, 0.991272, 0.0831711)
|
||||
bones/50/scale = Vector3(1.00002, 0.999999, 1)
|
||||
bones/51/rotation = Quaternion(0.00959858, 0.960804, -0.277045, -0.00295932)
|
||||
bones/51/rotation = Quaternion(0.00970492, 0.959913, -0.280113, -0.0029922)
|
||||
bones/51/scale = Vector3(1.00002, 0.999999, 1.00002)
|
||||
bones/52/rotation = Quaternion(0.0800893, 0.537878, -0.839045, -0.0166244)
|
||||
bones/52/rotation = Quaternion(0.0792991, 0.536526, -0.839989, -0.0164049)
|
||||
bones/52/scale = Vector3(0.999948, 0.999973, 1.00001)
|
||||
bones/54/rotation = Quaternion(9.7728e-07, 1, -1.50204e-05, 3.50609e-06)
|
||||
bones/54/scale = Vector3(0.999999, 0.999986, 1.00002)
|
||||
bones/56/rotation = Quaternion(0.174308, 0.140952, 0.971107, -0.081863)
|
||||
bones/56/rotation = Quaternion(0.179453, 0.139217, 0.970475, -0.0811989)
|
||||
bones/56/scale = Vector3(1.00002, 0.999999, 1)
|
||||
bones/57/rotation = Quaternion(-0.0102774, 0.954933, -0.296628, 0.00316872)
|
||||
bones/57/rotation = Quaternion(-0.0102556, 0.955128, -0.295999, 0.00316205)
|
||||
bones/57/scale = Vector3(1.00001, 0.999999, 1.00001)
|
||||
bones/58/rotation = Quaternion(-0.0667033, 0.607529, -0.79119, 0.0218499)
|
||||
bones/58/rotation = Quaternion(-0.0675913, 0.607901, -0.790822, 0.0220936)
|
||||
bones/58/scale = Vector3(0.999956, 0.999987, 1.00001)
|
||||
bones/60/rotation = Quaternion(-6.79618e-07, 1, -9.98378e-06, -2.30227e-06)
|
||||
bones/60/scale = Vector3(0.999999, 0.999991, 1.00001)
|
||||
|
|
|
@ -10,7 +10,37 @@ config_version=5
|
|||
|
||||
[application]
|
||||
|
||||
config/name="godot cpp template"
|
||||
config/name="Slash-n-Bash"
|
||||
run/main_scene="res://boot.tscn"
|
||||
config/features=PackedStringArray("4.2", "Forward Plus")
|
||||
config/icon="res://icon.svg"
|
||||
|
||||
[display]
|
||||
|
||||
window/size/viewport_width=1920
|
||||
window/size/viewport_height=1080
|
||||
window/size/mode=3
|
||||
window/stretch/mode="viewport"
|
||||
|
||||
[input]
|
||||
|
||||
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_back={
|
||||
"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)
|
||||
]
|
||||
}
|
||||
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)
|
||||
]
|
||||
}
|
||||
|
|
|
@ -2,6 +2,8 @@
|
|||
#include <optional>
|
||||
#include "godot_cpp/variant/utility_functions.hpp"
|
||||
#include "godot_cpp/classes/viewport.hpp"
|
||||
#include "godot_cpp/classes/scene_tree.hpp"
|
||||
#include "godot_cpp/classes/window.hpp"
|
||||
#include "godot_macros.h"
|
||||
#include "level.hpp"
|
||||
#include "player.hpp"
|
||||
|
@ -27,6 +29,7 @@ void GameMode::_enter_tree() {
|
|||
} else {
|
||||
GameMode::static_instance = this;
|
||||
}
|
||||
this->get_tree()->get_root()->set_content_scale_size({1920, 1080});
|
||||
}
|
||||
|
||||
void GameMode::_exit_tree() {
|
||||
|
|
|
@ -2,9 +2,13 @@
|
|||
#include <utility>
|
||||
#include "game_mode.hpp"
|
||||
#include "godot_cpp/classes/animation_tree.hpp"
|
||||
#include "godot_cpp/classes/engine.hpp"
|
||||
#include "godot_cpp/classes/node3d.hpp"
|
||||
#include "godot_cpp/classes/skeleton3d.hpp"
|
||||
#include "godot_cpp/variant/transform3d.hpp"
|
||||
#include "godot_cpp/variant/utility_functions.hpp"
|
||||
#include "godot_cpp/classes/viewport.hpp"
|
||||
#include "godot_cpp/classes/camera3d.hpp"
|
||||
#include "godot_macros.h"
|
||||
|
||||
namespace godot {
|
||||
|
@ -16,6 +20,7 @@ void Player::_bind_methods() {
|
|||
GDFUNCTION_ARGS(on_horizontal, "event", "value");
|
||||
GDFUNCTION_ARGS(on_vertical, "event", "value");
|
||||
}
|
||||
|
||||
void Player::_enter_tree() {
|
||||
this->model = this->get_node<Node3D>("Model");
|
||||
this->animTree = this->get_node<AnimationTree>("AnimationTree");
|
||||
|
@ -26,12 +31,28 @@ void Player::_enter_tree() {
|
|||
void Player::_ready() {
|
||||
this->customization_init();
|
||||
GDGAMEONLY();
|
||||
this->flat_view_init();
|
||||
this->input->listen_to(PlayerInput::Listener("move_left", "move_right", this, "on_horizontal"));
|
||||
this->input->listen_to(PlayerInput::Listener("move_forward", "move_back", this, "on_vertical"));
|
||||
}
|
||||
|
||||
void Player::_process(double deltaTime) {}
|
||||
void Player::_physics_process(double deltaTime) {}
|
||||
void Player::_process(double deltaTime) {
|
||||
GDGAMEONLY();
|
||||
Vector3 const worldInput = this->get_world_move_input() * this->walkSpeed;
|
||||
Vector3 const velocity = this->get_velocity();
|
||||
this->set_velocity({worldInput.x, velocity.y, worldInput.z});
|
||||
this->rotate_to_movement();
|
||||
}
|
||||
|
||||
void Player::_physics_process(double deltaTime) {
|
||||
GDGAMEONLY();
|
||||
if(!this->is_on_floor()) {
|
||||
Vector3 const velocity = this->get_velocity();
|
||||
this->set_velocity({velocity.x, velocity.y - 9.10f * float(deltaTime), velocity.z});
|
||||
}
|
||||
|
||||
this->move_and_slide();
|
||||
}
|
||||
|
||||
void Player::set_customization_active(Node3D *node, bool active) {
|
||||
node->set_visible(active);
|
||||
|
@ -39,10 +60,12 @@ void Player::set_customization_active(Node3D *node, bool active) {
|
|||
}
|
||||
|
||||
void Player::on_horizontal(Ref<InputEvent> event, float value) {
|
||||
UtilityFunctions::print("horizontal ", value);
|
||||
this->moveInput.x = value;
|
||||
}
|
||||
|
||||
void Player::on_vertical(Ref<InputEvent> event, float value) {
|
||||
UtilityFunctions::print("vertical ", value);
|
||||
this->moveInput.y = value;
|
||||
}
|
||||
|
||||
|
@ -54,7 +77,7 @@ void Player::select_customization(String category,
|
|||
// invalid keys are stored as the size of the array
|
||||
if (index.has_value() && index.value() > pair.options.size())
|
||||
index = std::nullopt;
|
||||
// nothing changes
|
||||
// nothing changesw
|
||||
if (index == pair.currentSelected)
|
||||
return;
|
||||
// disable previous chosen option, if any
|
||||
|
@ -92,11 +115,38 @@ void Player::set_active_customization(Dictionary value) {
|
|||
else if (!exists)
|
||||
return;
|
||||
else
|
||||
this->select_customization(
|
||||
key, selection >= 0 ? std::optional{selection} : std::nullopt);
|
||||
this->select_customization(key, selection >= 0
|
||||
? std::optional{selection}
|
||||
: std::nullopt);
|
||||
}
|
||||
}
|
||||
|
||||
Vector3 Player::get_world_move_input() const {
|
||||
Vector2 n = this->moveInput.normalized();
|
||||
return flatViewBasis.get_column(0) * n.x
|
||||
+ flatViewBasis.get_column(2) * n.y;
|
||||
}
|
||||
|
||||
void Player::rotate_to_movement() {
|
||||
Vector3 const forward = this->get_world_move_input();
|
||||
if(forward.is_zero_approx())
|
||||
return;
|
||||
Vector3 const up = {0, 1, 0};
|
||||
Vector3 const right = forward.cross(up);
|
||||
Transform3D trans = this->get_global_transform();
|
||||
trans.basis = Basis(right, up, forward);
|
||||
this->set_global_transform(trans);
|
||||
}
|
||||
|
||||
void Player::flat_view_init() {
|
||||
Basis basis = this->get_viewport()->get_camera_3d()->get_global_transform().get_basis();
|
||||
Vector3 right = basis.get_column(0);
|
||||
right = Vector3{-right.x, 0, -right.z}.normalized();
|
||||
Vector3 forward = basis.get_column(2);
|
||||
forward = Vector3{-forward.x, 0, -forward.y}.normalized();
|
||||
this->flatViewBasis = Basis{right, right.cross(forward), forward};
|
||||
}
|
||||
|
||||
void Player::customization_init() {
|
||||
this->customizationParent =
|
||||
this->get_node<Skeleton3D>("Model/RootNode/GeneralSkeleton");
|
||||
|
|
|
@ -29,8 +29,9 @@ protected:
|
|||
// the skeleton of the customizable character model
|
||||
Skeleton3D *customizationParent{nullptr};
|
||||
PlayerInput *input{nullptr};
|
||||
Basis flatViewBasis{};
|
||||
|
||||
float walkSpeed{10.f};
|
||||
float walkSpeed{4.f};
|
||||
|
||||
Vector2 moveInput{0.f, 0.f};
|
||||
|
||||
|
@ -55,8 +56,12 @@ public:
|
|||
// every element in a [String, int] dictionary, where key is the category
|
||||
// to assign to and the value is the index of the element to show.
|
||||
void set_active_customization(Dictionary value);
|
||||
// returns moveInput transformed to world space
|
||||
Vector3 get_world_move_input() const;
|
||||
|
||||
private:
|
||||
void rotate_to_movement();
|
||||
void flat_view_init();
|
||||
void customization_init();
|
||||
};
|
||||
} // namespace godot
|
||||
|
|
Loading…
Reference in New Issue