feat: TEST DAY TEST DAY TEST DAY
|
@ -157,10 +157,10 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"a": 1,
|
"a": 1,
|
||||||
"b": 0.293732,
|
"b": 0.317825,
|
||||||
"g": 0.558716,
|
"g": 0.449612,
|
||||||
"pos": 1,
|
"pos": 1,
|
||||||
"r": 0.683594
|
"r": 0.511719
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"type": "Gradient"
|
"type": "Gradient"
|
||||||
|
@ -188,10 +188,10 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"a": 1,
|
"a": 1,
|
||||||
"b": 0.238342,
|
"b": 0.194183,
|
||||||
"g": 0.431115,
|
"g": 0.320966,
|
||||||
"pos": 1,
|
"pos": 1,
|
||||||
"r": 0.554688
|
"r": 0.394531
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"type": "Gradient"
|
"type": "Gradient"
|
||||||
|
@ -209,9 +209,9 @@
|
||||||
"parameters": {
|
"parameters": {
|
||||||
"color": {
|
"color": {
|
||||||
"a": 1,
|
"a": 1,
|
||||||
"b": 0.148543,
|
"b": 0.098557,
|
||||||
"g": 0.40435,
|
"g": 0.200086,
|
||||||
"r": 0.513205,
|
"r": 0.243821,
|
||||||
"type": "Color"
|
"type": "Color"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
|
@ -246,8 +246,8 @@
|
||||||
"opacity": 0,
|
"opacity": 0,
|
||||||
"rotate": 33.6,
|
"rotate": 33.6,
|
||||||
"scale": 0,
|
"scale": 0,
|
||||||
"scale_x": 0.1,
|
"scale_x": 0.08,
|
||||||
"scale_y": 0.1,
|
"scale_y": 0.08,
|
||||||
"select_inputs": 0,
|
"select_inputs": 0,
|
||||||
"variations": false
|
"variations": false
|
||||||
},
|
},
|
||||||
|
@ -363,15 +363,15 @@
|
||||||
"longdesc": "",
|
"longdesc": "",
|
||||||
"name": "graph",
|
"name": "graph",
|
||||||
"node_position": {
|
"node_position": {
|
||||||
"x": -1656.337646,
|
"x": -1659.217529,
|
||||||
"y": 239.964798
|
"y": 234.204788
|
||||||
},
|
},
|
||||||
"nodes": [
|
"nodes": [
|
||||||
{
|
{
|
||||||
"name": "gradient",
|
"name": "gradient",
|
||||||
"node_position": {
|
"node_position": {
|
||||||
"x": -1348.702759,
|
"x": -975.742798,
|
||||||
"y": -153.089325
|
"y": -137.249329
|
||||||
},
|
},
|
||||||
"parameters": {
|
"parameters": {
|
||||||
"gradient": {
|
"gradient": {
|
||||||
|
@ -410,8 +410,8 @@
|
||||||
{
|
{
|
||||||
"name": "profile",
|
"name": "profile",
|
||||||
"node_position": {
|
"node_position": {
|
||||||
"x": -1083.223633,
|
"x": -1011.223633,
|
||||||
"y": -554.144897
|
"y": -529.664917
|
||||||
},
|
},
|
||||||
"parameters": {
|
"parameters": {
|
||||||
"gradient": {
|
"gradient": {
|
||||||
|
@ -466,8 +466,8 @@
|
||||||
"generic_size": 1,
|
"generic_size": 1,
|
||||||
"name": "transform2",
|
"name": "transform2",
|
||||||
"node_position": {
|
"node_position": {
|
||||||
"x": -840.445862,
|
"x": -755.48584,
|
||||||
"y": -606.117126
|
"y": -525.477112
|
||||||
},
|
},
|
||||||
"parameters": {
|
"parameters": {
|
||||||
"mode": 0,
|
"mode": 0,
|
||||||
|
@ -483,7 +483,7 @@
|
||||||
{
|
{
|
||||||
"name": "mirror_2",
|
"name": "mirror_2",
|
||||||
"node_position": {
|
"node_position": {
|
||||||
"x": -480.723633,
|
"x": -482.163635,
|
||||||
"y": -528.339417
|
"y": -528.339417
|
||||||
},
|
},
|
||||||
"parameters": {
|
"parameters": {
|
||||||
|
@ -527,8 +527,8 @@
|
||||||
{
|
{
|
||||||
"name": "gradient_2",
|
"name": "gradient_2",
|
||||||
"node_position": {
|
"node_position": {
|
||||||
"x": -1407.029297,
|
"x": -1034.069336,
|
||||||
"y": -349.533844
|
"y": -333.693848
|
||||||
},
|
},
|
||||||
"parameters": {
|
"parameters": {
|
||||||
"gradient": {
|
"gradient": {
|
||||||
|
@ -560,8 +560,8 @@
|
||||||
{
|
{
|
||||||
"name": "math_3",
|
"name": "math_3",
|
||||||
"node_position": {
|
"node_position": {
|
||||||
"x": -1096.695801,
|
"x": -723.735779,
|
||||||
"y": -304.339325
|
"y": -288.499329
|
||||||
},
|
},
|
||||||
"parameters": {
|
"parameters": {
|
||||||
"clamp": true,
|
"clamp": true,
|
||||||
|
@ -575,8 +575,8 @@
|
||||||
{
|
{
|
||||||
"name": "mirror",
|
"name": "mirror",
|
||||||
"node_position": {
|
"node_position": {
|
||||||
"x": -867.75824,
|
"x": -494.798187,
|
||||||
"y": -317.321564
|
"y": -301.481567
|
||||||
},
|
},
|
||||||
"parameters": {
|
"parameters": {
|
||||||
"direction": 0,
|
"direction": 0,
|
||||||
|
@ -652,8 +652,8 @@
|
||||||
{
|
{
|
||||||
"name": "colorize_2",
|
"name": "colorize_2",
|
||||||
"node_position": {
|
"node_position": {
|
||||||
"x": 768.980774,
|
"x": 760.782471,
|
||||||
"y": -574.599365
|
"y": -570.259094
|
||||||
},
|
},
|
||||||
"parameters": {
|
"parameters": {
|
||||||
"gradient": {
|
"gradient": {
|
||||||
|
@ -661,31 +661,24 @@
|
||||||
"points": [
|
"points": [
|
||||||
{
|
{
|
||||||
"a": 0,
|
"a": 0,
|
||||||
"b": 1,
|
"b": 0,
|
||||||
"g": 1,
|
"g": 0,
|
||||||
"pos": 0,
|
"pos": 0.016611,
|
||||||
"r": 1
|
"r": 0
|
||||||
},
|
|
||||||
{
|
|
||||||
"a": 1,
|
|
||||||
"b": 1,
|
|
||||||
"g": 1,
|
|
||||||
"pos": 0.000001,
|
|
||||||
"r": 1
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"a": 1,
|
"a": 1,
|
||||||
"b": 0.17453,
|
"b": 0.17453,
|
||||||
"g": 0.519531,
|
"g": 0.519531,
|
||||||
"pos": 0.028095,
|
"pos": 0.0299,
|
||||||
"r": 0.201483
|
"r": 0.201483
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"a": 1,
|
"a": 1,
|
||||||
"b": 0.109985,
|
"b": 0,
|
||||||
"g": 0.207031,
|
"g": 0,
|
||||||
"pos": 0.821499,
|
"pos": 0.851905,
|
||||||
"r": 0.163057
|
"r": 0
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"type": "Gradient"
|
"type": "Gradient"
|
||||||
|
@ -712,8 +705,8 @@
|
||||||
{
|
{
|
||||||
"name": "gen_outputs",
|
"name": "gen_outputs",
|
||||||
"node_position": {
|
"node_position": {
|
||||||
"x": 1041.897461,
|
"x": 1056.36499,
|
||||||
"y": -436.653137
|
"y": -564.450195
|
||||||
},
|
},
|
||||||
"parameters": {
|
"parameters": {
|
||||||
|
|
||||||
|
@ -749,8 +742,8 @@
|
||||||
{
|
{
|
||||||
"name": "math",
|
"name": "math",
|
||||||
"node_position": {
|
"node_position": {
|
||||||
"x": 721.161072,
|
"x": 755.883301,
|
||||||
"y": -414.326324
|
"y": -499.202881
|
||||||
},
|
},
|
||||||
"parameters": {
|
"parameters": {
|
||||||
"clamp": true,
|
"clamp": true,
|
||||||
|
|
BIN
materials/vignette.png
Normal file
After Width: | Height: | Size: 70 KiB |
77
materials/vignette.svg
Normal file
|
@ -0,0 +1,77 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||||
|
|
||||||
|
<svg
|
||||||
|
width="270.93332mm"
|
||||||
|
height="203.2mm"
|
||||||
|
viewBox="0 0 270.93332 203.2"
|
||||||
|
version="1.1"
|
||||||
|
id="svg1"
|
||||||
|
inkscape:version="1.4.2 (ebf0e940d0, 2025-05-08)"
|
||||||
|
sodipodi:docname="vignette.svg"
|
||||||
|
inkscape:export-filename="../project/ui/vignette.png"
|
||||||
|
inkscape:export-xdpi="96"
|
||||||
|
inkscape:export-ydpi="96"
|
||||||
|
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||||
|
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||||
|
xmlns:xlink="http://www.w3.org/1999/xlink"
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
xmlns:svg="http://www.w3.org/2000/svg">
|
||||||
|
<sodipodi:namedview
|
||||||
|
id="namedview1"
|
||||||
|
pagecolor="#ffffff"
|
||||||
|
bordercolor="#999999"
|
||||||
|
borderopacity="1"
|
||||||
|
inkscape:showpageshadow="2"
|
||||||
|
inkscape:pageopacity="0"
|
||||||
|
inkscape:pagecheckerboard="0"
|
||||||
|
inkscape:deskcolor="#d1d1d1"
|
||||||
|
inkscape:document-units="mm"
|
||||||
|
inkscape:zoom="0.82182644"
|
||||||
|
inkscape:cx="450.82511"
|
||||||
|
inkscape:cy="483.07037"
|
||||||
|
inkscape:window-width="2540"
|
||||||
|
inkscape:window-height="1394"
|
||||||
|
inkscape:window-x="0"
|
||||||
|
inkscape:window-y="0"
|
||||||
|
inkscape:window-maximized="0"
|
||||||
|
inkscape:current-layer="layer1" />
|
||||||
|
<defs
|
||||||
|
id="defs1">
|
||||||
|
<linearGradient
|
||||||
|
id="linearGradient1"
|
||||||
|
inkscape:collect="always">
|
||||||
|
<stop
|
||||||
|
style="stop-color:#000000;stop-opacity:0;"
|
||||||
|
offset="0"
|
||||||
|
id="stop2" />
|
||||||
|
<stop
|
||||||
|
style="stop-color:#000000;stop-opacity:1;"
|
||||||
|
offset="1"
|
||||||
|
id="stop1" />
|
||||||
|
</linearGradient>
|
||||||
|
<radialGradient
|
||||||
|
inkscape:collect="always"
|
||||||
|
xlink:href="#linearGradient1"
|
||||||
|
id="radialGradient2"
|
||||||
|
cx="135.05614"
|
||||||
|
cy="101.73478"
|
||||||
|
fx="135.05614"
|
||||||
|
fy="101.73478"
|
||||||
|
r="135.70003"
|
||||||
|
gradientTransform="matrix(0.83155397,0,0,0.74970345,22.74967,25.463864)"
|
||||||
|
gradientUnits="userSpaceOnUse" />
|
||||||
|
</defs>
|
||||||
|
<g
|
||||||
|
inkscape:label="Layer 1"
|
||||||
|
inkscape:groupmode="layer"
|
||||||
|
id="layer1">
|
||||||
|
<rect
|
||||||
|
style="fill:url(#radialGradient2);stroke:none;stroke-width:3.8;stroke-linecap:round;stroke-linejoin:round"
|
||||||
|
id="rect1"
|
||||||
|
width="271.40005"
|
||||||
|
height="203.46956"
|
||||||
|
x="-0.64389098"
|
||||||
|
y="0" />
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 2.2 KiB |
33
modules/going/game_ui.cpp
Normal file
|
@ -0,0 +1,33 @@
|
||||||
|
#include "game_ui.h"
|
||||||
|
|
||||||
|
GameUI *GameUI::singleton_instance{nullptr};
|
||||||
|
|
||||||
|
void GameUI::_bind_methods() {
|
||||||
|
ClassDB::bind_method(D_METHOD("display_message", "text"), &self_type::display_message);
|
||||||
|
ClassDB::bind_static_method("GameUI", D_METHOD("get_singleton"), &self_type::get_singleton);
|
||||||
|
}
|
||||||
|
|
||||||
|
void GameUI::_notification(int what) {
|
||||||
|
if(Engine::get_singleton()->is_editor_hint()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if(what == NOTIFICATION_ENTER_TREE) {
|
||||||
|
ERR_FAIL_COND_EDMSG(self_type::singleton_instance != nullptr, "GameUI instance already exists, deleting second instance");
|
||||||
|
self_type::singleton_instance = this;
|
||||||
|
} else if(what == NOTIFICATION_EXIT_TREE) {
|
||||||
|
self_type::singleton_instance = nullptr;
|
||||||
|
}
|
||||||
|
if(what == NOTIFICATION_READY) {
|
||||||
|
this->message = Object::cast_to<RichTextLabel>(this->get_node(NodePath("%MessageLabel")));
|
||||||
|
this->clear_message_timer = Object::cast_to<Timer>(this->get_node(NodePath("%ClearMessageTimer")));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
GameUI *GameUI::get_singleton() {
|
||||||
|
return self_type::singleton_instance;
|
||||||
|
}
|
||||||
|
|
||||||
|
void GameUI::display_message(String text) {
|
||||||
|
this->message->set_text(text);
|
||||||
|
this->clear_message_timer->start(0.0);
|
||||||
|
}
|
22
modules/going/game_ui.h
Normal file
|
@ -0,0 +1,22 @@
|
||||||
|
#ifndef GAME_UI_H
|
||||||
|
#define GAME_UI_H
|
||||||
|
|
||||||
|
#include "core/string/ustring.h"
|
||||||
|
#include "scene/main/canvas_layer.h"
|
||||||
|
#include "scene/gui/rich_text_label.h"
|
||||||
|
#include "scene/main/timer.h"
|
||||||
|
|
||||||
|
class GameUI : public CanvasLayer {
|
||||||
|
GDCLASS(GameUI, CanvasLayer);
|
||||||
|
static void _bind_methods();
|
||||||
|
void _notification(int what);
|
||||||
|
static GameUI *singleton_instance;
|
||||||
|
public:
|
||||||
|
static GameUI *get_singleton();
|
||||||
|
void display_message(String text);
|
||||||
|
private:
|
||||||
|
RichTextLabel *message{nullptr};
|
||||||
|
Timer *clear_message_timer{nullptr};
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // !GAME_UI_H
|
|
@ -28,6 +28,8 @@ void PlayerBody::_bind_methods() {
|
||||||
BIND_PROPERTY(Variant::VECTOR2, jump_impulse);
|
BIND_PROPERTY(Variant::VECTOR2, jump_impulse);
|
||||||
BIND_PROPERTY(Variant::FLOAT, model_lean);
|
BIND_PROPERTY(Variant::FLOAT, model_lean);
|
||||||
BIND_PROPERTY(Variant::FLOAT, model_lean_speed);
|
BIND_PROPERTY(Variant::FLOAT, model_lean_speed);
|
||||||
|
BIND_PROPERTY(Variant::FLOAT, game_over_speed);
|
||||||
|
BIND_PROPERTY(Variant::BOOL, can_jump);
|
||||||
}
|
}
|
||||||
|
|
||||||
void PlayerBody::_notification(int what) {
|
void PlayerBody::_notification(int what) {
|
||||||
|
@ -189,3 +191,19 @@ void PlayerBody::set_model_lean_speed(float value) {
|
||||||
float PlayerBody::get_model_lean_speed() const {
|
float PlayerBody::get_model_lean_speed() const {
|
||||||
return this->model_lean_speed;
|
return this->model_lean_speed;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void PlayerBody::set_game_over_speed(float value) {
|
||||||
|
this->game_over_speed = value;
|
||||||
|
}
|
||||||
|
|
||||||
|
float PlayerBody::get_game_over_speed() const {
|
||||||
|
return this->game_over_speed;
|
||||||
|
}
|
||||||
|
|
||||||
|
void PlayerBody::set_can_jump(bool value) {
|
||||||
|
this->can_jump = value;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool PlayerBody::get_can_jump() const {
|
||||||
|
return this->can_jump;
|
||||||
|
}
|
||||||
|
|
|
@ -44,6 +44,10 @@ public:
|
||||||
float get_model_lean() const;
|
float get_model_lean() const;
|
||||||
void set_model_lean_speed(float value);
|
void set_model_lean_speed(float value);
|
||||||
float get_model_lean_speed() const;
|
float get_model_lean_speed() const;
|
||||||
|
void set_game_over_speed(float value);
|
||||||
|
float get_game_over_speed() const;
|
||||||
|
void set_can_jump(bool value);
|
||||||
|
bool get_can_jump() const;
|
||||||
private:
|
private:
|
||||||
Vector2 movement{0.f, 0.f};
|
Vector2 movement{0.f, 0.f};
|
||||||
|
|
||||||
|
@ -65,6 +69,8 @@ private:
|
||||||
double max_delta_fov{100.f};
|
double max_delta_fov{100.f};
|
||||||
float model_lean{0.25f};
|
float model_lean{0.25f};
|
||||||
float model_lean_speed{0.25f};
|
float model_lean_speed{0.25f};
|
||||||
|
double game_over_speed{1.0/4.0};
|
||||||
|
bool can_jump{false};
|
||||||
public:
|
public:
|
||||||
static char *const split_step_action;
|
static char *const split_step_action;
|
||||||
static char *const move_left_action;
|
static char *const move_left_action;
|
||||||
|
|
|
@ -3,6 +3,8 @@
|
||||||
#include "core/math/math_funcs.h"
|
#include "core/math/math_funcs.h"
|
||||||
#include "core/typedefs.h"
|
#include "core/typedefs.h"
|
||||||
#include "going/player_body.h"
|
#include "going/player_body.h"
|
||||||
|
#include "scene/main/scene_tree.h"
|
||||||
|
#include "servers/rendering_server.h"
|
||||||
|
|
||||||
|
|
||||||
PlayerBody *PlayerState::get_body() const {
|
PlayerBody *PlayerState::get_body() const {
|
||||||
|
@ -21,6 +23,18 @@ PlayerState::StateID StandingState::get_next_state() const {
|
||||||
|
|
||||||
void StandingState::state_entered() {
|
void StandingState::state_entered() {
|
||||||
this->get_body()->get_anim()->play("RESET", 0.1);
|
this->get_body()->get_anim()->play("RESET", 0.1);
|
||||||
|
this->game_over_timer = 0.0;
|
||||||
|
}
|
||||||
|
|
||||||
|
void StandingState::process(double delta) {
|
||||||
|
this->game_over_timer += delta * this->get_body()->get_game_over_speed();
|
||||||
|
if(this->game_over_timer > 1.0) {
|
||||||
|
RenderingServer::get_singleton()->global_shader_parameter_set(this->game_over_param, 0.0);
|
||||||
|
SceneTree::get_singleton()->reload_current_scene();
|
||||||
|
} else {
|
||||||
|
RenderingServer::get_singleton()->global_shader_parameter_set(this->game_over_param, float(this->game_over_timer));
|
||||||
|
this->game_over_timer = MIN(this->game_over_timer, 1.f);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void StandingState::physics_process(double delta) {
|
void StandingState::physics_process(double delta) {
|
||||||
|
@ -29,6 +43,10 @@ void StandingState::physics_process(double delta) {
|
||||||
this->get_body()->set_velocity(current.move_toward(Vector3(), speed_delta));
|
this->get_body()->set_velocity(current.move_toward(Vector3(), speed_delta));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void StandingState::state_exited() {
|
||||||
|
RenderingServer::get_singleton()->global_shader_parameter_set(this->game_over_param, 0.0f);
|
||||||
|
}
|
||||||
|
|
||||||
PlayerState::StateID RunningState::get_next_state() const {
|
PlayerState::StateID RunningState::get_next_state() const {
|
||||||
Vector3 const velocity{this->get_body()->get_velocity()};
|
Vector3 const velocity{this->get_body()->get_velocity()};
|
||||||
Vector3 const desired{this->get_body()->get_desired_velocity()};
|
Vector3 const desired{this->get_body()->get_desired_velocity()};
|
||||||
|
@ -47,7 +65,7 @@ void RunningState::state_entered() {
|
||||||
this->get_body()->get_anim()->play("run", 0.1);
|
this->get_body()->get_anim()->play("run", 0.1);
|
||||||
}
|
}
|
||||||
|
|
||||||
void RunningState::process(double delta) {
|
void RunningState::process_lean(double delta) {
|
||||||
Vector3 const current{this->get_body()->get_velocity()};
|
Vector3 const current{this->get_body()->get_velocity()};
|
||||||
if(!current.is_zero_approx()) {
|
if(!current.is_zero_approx()) {
|
||||||
Vector3 const cross{Vector3{0.f, 1.f, 0.f}.cross(current).normalized()};
|
Vector3 const cross{Vector3{0.f, 1.f, 0.f}.cross(current).normalized()};
|
||||||
|
@ -77,6 +95,7 @@ void RunningState::physics_process(double delta) {
|
||||||
)
|
)
|
||||||
};
|
};
|
||||||
this->get_body()->set_velocity(current.move_toward(desired, speed_delta) + Vector3{0.f, -0.01f, 0.f});
|
this->get_body()->set_velocity(current.move_toward(desired, speed_delta) + Vector3{0.f, -0.01f, 0.f});
|
||||||
|
this->process_lean(delta);
|
||||||
}
|
}
|
||||||
|
|
||||||
void RunningState::state_exited() {
|
void RunningState::state_exited() {
|
||||||
|
@ -91,7 +110,7 @@ void RunningState::state_exited() {
|
||||||
PlayerState::StateID SplitStepState::get_next_state() const {
|
PlayerState::StateID SplitStepState::get_next_state() const {
|
||||||
if(!this->get_body()->is_on_floor()) {
|
if(!this->get_body()->is_on_floor()) {
|
||||||
return FallingState::get_class_static();
|
return FallingState::get_class_static();
|
||||||
} else if(this->timer <= 0.0 && Input::get_singleton()->is_action_pressed("jump")) {
|
} else if(this->get_body()->get_can_jump() && this->jump && this->timer <= 0.0) {
|
||||||
return JumpingState::get_class_static();
|
return JumpingState::get_class_static();
|
||||||
} else if(this->timer <= 0.0) {
|
} else if(this->timer <= 0.0) {
|
||||||
return RunningState::get_class_static();
|
return RunningState::get_class_static();
|
||||||
|
@ -101,6 +120,7 @@ PlayerState::StateID SplitStepState::get_next_state() const {
|
||||||
}
|
}
|
||||||
|
|
||||||
void SplitStepState::state_entered() {
|
void SplitStepState::state_entered() {
|
||||||
|
this->jump = false;
|
||||||
this->last_velocity = this->get_body()->get_velocity();
|
this->last_velocity = this->get_body()->get_velocity();
|
||||||
this->timer = this->get_body()->get_split_step_time();
|
this->timer = this->get_body()->get_split_step_time();
|
||||||
this->get_body()->set_velocity(last_velocity.normalized() * this->get_body()->get_target_speed() * 0.75f);
|
this->get_body()->set_velocity(last_velocity.normalized() * this->get_body()->get_target_speed() * 0.75f);
|
||||||
|
@ -111,17 +131,21 @@ void SplitStepState::process(double delta) {
|
||||||
this->timer -= delta;
|
this->timer -= delta;
|
||||||
this->get_body()->set_velocity(this->get_body()->get_velocity()
|
this->get_body()->set_velocity(this->get_body()->get_velocity()
|
||||||
.move_toward(Vector3(), this->get_body()->get_target_speed() / this->get_body()->get_split_step_stop_time() * delta));
|
.move_toward(Vector3(), this->get_body()->get_target_speed() / this->get_body()->get_split_step_stop_time() * delta));
|
||||||
|
this->jump |= Input::get_singleton()->is_action_pressed("jump");
|
||||||
}
|
}
|
||||||
|
|
||||||
void SplitStepState::state_exited() {
|
void SplitStepState::state_exited() {
|
||||||
if(this->get_body()->is_on_floor()) {
|
Vector3 desired_direction{0.f, 0.f, 0.f};
|
||||||
Vector3 const desired_direction{this->get_body()->get_desired_direction()};
|
if(this->jump) {
|
||||||
float const dot{this->last_velocity.normalized().dot(desired_direction)};
|
desired_direction = Vector3{last_velocity.x, 0.f, last_velocity.z}.normalized();
|
||||||
this->get_body()->set_velocity(dot > -0.8f
|
} else if(this->get_body()->is_on_floor()) {
|
||||||
? desired_direction * MAX(last_velocity.length(), this->get_body()->get_step_boost())
|
desired_direction = this->get_body()->get_desired_direction();
|
||||||
: Vector3()
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
float const dot{this->last_velocity.normalized().dot(desired_direction)};
|
||||||
|
this->get_body()->set_velocity(dot > -0.8f
|
||||||
|
? desired_direction * MAX(last_velocity.length(), this->get_body()->get_step_boost())
|
||||||
|
: Vector3()
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
PlayerState::StateID FallingState::get_next_state() const {
|
PlayerState::StateID FallingState::get_next_state() const {
|
||||||
|
@ -133,13 +157,29 @@ PlayerState::StateID FallingState::get_next_state() const {
|
||||||
}
|
}
|
||||||
|
|
||||||
void FallingState::state_entered() {
|
void FallingState::state_entered() {
|
||||||
|
this->game_over_timer = 0.0;
|
||||||
this->get_body()->get_anim()->play("falling", 0.1);
|
this->get_body()->get_anim()->play("falling", 0.1);
|
||||||
}
|
}
|
||||||
|
|
||||||
void FallingState::process(double delta) {
|
void FallingState::process(double delta) {
|
||||||
Vector3 const current{this->get_body()->get_velocity()};
|
Vector3 const current{this->get_body()->get_velocity()};
|
||||||
Vector3 const flattened{current.x, 0.f, current.z};
|
Vector3 const flattened{current.x, 0.f, current.z};
|
||||||
this->get_body()->set_velocity((flattened - (flattened * 0.025f)) + Vector3{0.f, current.y - float(9.8 * delta), 0.f});
|
this->get_body()->set_velocity((flattened - (flattened * 0.015f)) + Vector3{0.f, current.y - float(9.8 * delta), 0.f});
|
||||||
|
if(this->can_game_over_falling) {
|
||||||
|
this->game_over_timer += delta * this->get_body()->get_game_over_speed();
|
||||||
|
if(this->game_over_timer > 1.0) {
|
||||||
|
RenderingServer::get_singleton()->global_shader_parameter_set(this->game_over_param, 0.0);
|
||||||
|
SceneTree::get_singleton()->reload_current_scene();
|
||||||
|
} else {
|
||||||
|
RenderingServer::get_singleton()->global_shader_parameter_set(this->game_over_param, float(this->game_over_timer));
|
||||||
|
this->game_over_timer = MIN(this->game_over_timer, 1.f);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void FallingState::state_exited() {
|
||||||
|
RenderingServer::get_singleton()->global_shader_parameter_set(this->game_over_param, 0.0);
|
||||||
|
this->can_game_over_falling = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
PlayerState::StateID JumpingState::get_next_state() const {
|
PlayerState::StateID JumpingState::get_next_state() const {
|
||||||
|
@ -153,18 +193,17 @@ PlayerState::StateID JumpingState::get_next_state() const {
|
||||||
void JumpingState::state_entered() {
|
void JumpingState::state_entered() {
|
||||||
Vector3 const current{this->get_body()->get_velocity()};
|
Vector3 const current{this->get_body()->get_velocity()};
|
||||||
Vector2 const impulse{this->get_body()->get_jump_impulse()};
|
Vector2 const impulse{this->get_body()->get_jump_impulse()};
|
||||||
float const force{(Vector2{current.x, current.z}.length() / this->get_body()->get_target_speed())};
|
|
||||||
this->get_body()->set_velocity( (
|
this->get_body()->set_velocity( (
|
||||||
Vector3{current.x, impulse.y, current.z}
|
Vector3{current.x, impulse.y, current.z}
|
||||||
+ current.normalized() * impulse.x
|
+ current.normalized() * impulse.x
|
||||||
) * force);
|
));
|
||||||
this->get_body()->get_anim()->play("jump");
|
this->get_body()->get_anim()->play("jump");
|
||||||
}
|
}
|
||||||
|
|
||||||
void JumpingState::process(double delta) {
|
void JumpingState::process(double delta) {
|
||||||
Vector3 const current{this->get_body()->get_velocity()};
|
Vector3 const current{this->get_body()->get_velocity()};
|
||||||
Vector3 const flattened{current.x, 0.f, current.z};
|
Vector3 const flattened{current.x, 0.f, current.z};
|
||||||
this->get_body()->set_velocity((flattened - (flattened * 0.025f)) + Vector3{0.f, current.y - float(9.8 * delta), 0.f});
|
this->get_body()->set_velocity((flattened - (flattened * 0.015f)) + Vector3{0.f, current.y - float(9.8 * delta), 0.f});
|
||||||
}
|
}
|
||||||
|
|
||||||
void PlayerStateMachine::_bind_methods() {
|
void PlayerStateMachine::_bind_methods() {
|
||||||
|
@ -194,10 +233,10 @@ void PlayerStateMachine::ready() {
|
||||||
this->set_process(true);
|
this->set_process(true);
|
||||||
this->set_physics_process(true);
|
this->set_physics_process(true);
|
||||||
this->body = Object::cast_to<PlayerBody>(this->get_parent());
|
this->body = Object::cast_to<PlayerBody>(this->get_parent());
|
||||||
|
this->add_state<FallingState>();
|
||||||
this->add_state<StandingState>();
|
this->add_state<StandingState>();
|
||||||
this->add_state<RunningState>();
|
this->add_state<RunningState>();
|
||||||
this->add_state<SplitStepState>();
|
this->add_state<SplitStepState>();
|
||||||
this->add_state<FallingState>();
|
|
||||||
this->add_state<JumpingState>();
|
this->add_state<JumpingState>();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -30,7 +30,12 @@ class StandingState : public PlayerState {
|
||||||
public:
|
public:
|
||||||
virtual StateID get_next_state() const override;
|
virtual StateID get_next_state() const override;
|
||||||
virtual void state_entered() override;
|
virtual void state_entered() override;
|
||||||
|
virtual void process(double delta) override;
|
||||||
virtual void physics_process(double delta) override;
|
virtual void physics_process(double delta) override;
|
||||||
|
virtual void state_exited() override;
|
||||||
|
private:
|
||||||
|
double game_over_timer{0.0};
|
||||||
|
StringName game_over_param{"game_over_percentage"};
|
||||||
};
|
};
|
||||||
|
|
||||||
class RunningState : public PlayerState {
|
class RunningState : public PlayerState {
|
||||||
|
@ -38,7 +43,7 @@ class RunningState : public PlayerState {
|
||||||
public:
|
public:
|
||||||
virtual StateID get_next_state() const override;
|
virtual StateID get_next_state() const override;
|
||||||
virtual void state_entered() override;
|
virtual void state_entered() override;
|
||||||
virtual void process(double delta) override;
|
void process_lean(double delta);
|
||||||
virtual void physics_process(double delta) override;
|
virtual void physics_process(double delta) override;
|
||||||
virtual void state_exited() override;
|
virtual void state_exited() override;
|
||||||
private:
|
private:
|
||||||
|
@ -55,6 +60,7 @@ public:
|
||||||
private:
|
private:
|
||||||
Vector3 last_velocity{0.f, 0.f, 0.f};
|
Vector3 last_velocity{0.f, 0.f, 0.f};
|
||||||
double timer{0.0};
|
double timer{0.0};
|
||||||
|
bool jump{false};
|
||||||
};
|
};
|
||||||
|
|
||||||
class FallingState : public PlayerState {
|
class FallingState : public PlayerState {
|
||||||
|
@ -63,6 +69,11 @@ public:
|
||||||
virtual StateID get_next_state() const override;
|
virtual StateID get_next_state() const override;
|
||||||
virtual void state_entered() override;
|
virtual void state_entered() override;
|
||||||
virtual void process(double delta) override;
|
virtual void process(double delta) override;
|
||||||
|
virtual void state_exited() override;
|
||||||
|
private:
|
||||||
|
bool can_game_over_falling{false};
|
||||||
|
double game_over_timer{0.0};
|
||||||
|
StringName game_over_param{"game_over_percentage"};
|
||||||
};
|
};
|
||||||
|
|
||||||
class JumpingState : public PlayerState {
|
class JumpingState : public PlayerState {
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
#include "register_types.h"
|
#include "register_types.h"
|
||||||
|
|
||||||
#include "core/object/class_db.h"
|
#include "core/object/class_db.h"
|
||||||
|
#include "going/game_ui.h"
|
||||||
#include "going/player_body.h"
|
#include "going/player_body.h"
|
||||||
#include "going/player_states.h"
|
#include "going/player_states.h"
|
||||||
|
|
||||||
|
@ -16,6 +17,7 @@ void initialize_going_module(ModuleInitializationLevel p_level) {
|
||||||
ClassDB::register_class<FallingState>();
|
ClassDB::register_class<FallingState>();
|
||||||
ClassDB::register_class<JumpingState>();
|
ClassDB::register_class<JumpingState>();
|
||||||
ClassDB::register_class<PlayerStateMachine>();
|
ClassDB::register_class<PlayerStateMachine>();
|
||||||
|
ClassDB::register_class<GameUI>();
|
||||||
}
|
}
|
||||||
|
|
||||||
void uninitialize_going_module(ModuleInitializationLevel p_level) {
|
void uninitialize_going_module(ModuleInitializationLevel p_level) {
|
||||||
|
|
Before Width: | Height: | Size: 1.2 MiB After Width: | Height: | Size: 1.4 MiB |
Before Width: | Height: | Size: 1.6 MiB After Width: | Height: | Size: 1.5 MiB |
Before Width: | Height: | Size: 2.7 MiB After Width: | Height: | Size: 2.6 MiB |
BIN
project/models/pickups/twirly.blend
Normal file
53
project/models/pickups/twirly.blend.import
Normal file
|
@ -0,0 +1,53 @@
|
||||||
|
[remap]
|
||||||
|
|
||||||
|
importer="scene"
|
||||||
|
importer_version=1
|
||||||
|
type="PackedScene"
|
||||||
|
uid="uid://cdyr4yad84cp2"
|
||||||
|
path="res://.godot/imported/twirly.blend-fad795a9868d207b62ee28c2ea4b5e16.scn"
|
||||||
|
|
||||||
|
[deps]
|
||||||
|
|
||||||
|
source_file="res://models/pickups/twirly.blend"
|
||||||
|
dest_files=["res://.godot/imported/twirly.blend-fad795a9868d207b62ee28c2ea4b5e16.scn"]
|
||||||
|
|
||||||
|
[params]
|
||||||
|
|
||||||
|
nodes/root_type=""
|
||||||
|
nodes/root_name=""
|
||||||
|
nodes/apply_root_scale=true
|
||||||
|
nodes/root_scale=1.0
|
||||||
|
nodes/import_as_skeleton_bones=false
|
||||||
|
nodes/use_node_type_suffixes=true
|
||||||
|
meshes/ensure_tangents=true
|
||||||
|
meshes/generate_lods=true
|
||||||
|
meshes/create_shadow_meshes=true
|
||||||
|
meshes/light_baking=1
|
||||||
|
meshes/lightmap_texel_size=0.2
|
||||||
|
meshes/force_disable_compression=false
|
||||||
|
skins/use_named_skins=true
|
||||||
|
animation/import=true
|
||||||
|
animation/fps=30
|
||||||
|
animation/trimming=false
|
||||||
|
animation/remove_immutable_tracks=true
|
||||||
|
animation/import_rest_as_RESET=false
|
||||||
|
import_script/path=""
|
||||||
|
_subresources={}
|
||||||
|
blender/nodes/visible=0
|
||||||
|
blender/nodes/active_collection_only=false
|
||||||
|
blender/nodes/punctual_lights=true
|
||||||
|
blender/nodes/cameras=true
|
||||||
|
blender/nodes/custom_properties=true
|
||||||
|
blender/nodes/modifiers=1
|
||||||
|
blender/meshes/colors=false
|
||||||
|
blender/meshes/uvs=true
|
||||||
|
blender/meshes/normals=true
|
||||||
|
blender/meshes/export_geometry_nodes_instances=false
|
||||||
|
blender/meshes/tangents=true
|
||||||
|
blender/meshes/skins=2
|
||||||
|
blender/meshes/export_bones_deforming_mesh_only=false
|
||||||
|
blender/materials/unpack_enabled=true
|
||||||
|
blender/materials/export_materials=1
|
||||||
|
blender/animation/limit_playback=true
|
||||||
|
blender/animation/always_sample=true
|
||||||
|
blender/animation/group_tracks=true
|
BIN
project/models/pickups/twirly.blend1
Normal file
Before Width: | Height: | Size: 3.6 MiB After Width: | Height: | Size: 3.8 MiB |
|
@ -3,25 +3,26 @@
|
||||||
importer="texture"
|
importer="texture"
|
||||||
type="CompressedTexture2D"
|
type="CompressedTexture2D"
|
||||||
uid="uid://dg6wbdfd7t314"
|
uid="uid://dg6wbdfd7t314"
|
||||||
path="res://.godot/imported/evertree_cutout_texture.png-50f94b21ecb859ae84e27208edce57e7.ctex"
|
path.s3tc="res://.godot/imported/evertree_cutout_texture.png-50f94b21ecb859ae84e27208edce57e7.s3tc.ctex"
|
||||||
metadata={
|
metadata={
|
||||||
"vram_texture": false
|
"imported_formats": ["s3tc_bptc"],
|
||||||
|
"vram_texture": true
|
||||||
}
|
}
|
||||||
|
|
||||||
[deps]
|
[deps]
|
||||||
|
|
||||||
source_file="res://models/props/evertree_cutout_texture.png"
|
source_file="res://models/props/evertree_cutout_texture.png"
|
||||||
dest_files=["res://.godot/imported/evertree_cutout_texture.png-50f94b21ecb859ae84e27208edce57e7.ctex"]
|
dest_files=["res://.godot/imported/evertree_cutout_texture.png-50f94b21ecb859ae84e27208edce57e7.s3tc.ctex"]
|
||||||
|
|
||||||
[params]
|
[params]
|
||||||
|
|
||||||
compress/mode=0
|
compress/mode=2
|
||||||
compress/high_quality=false
|
compress/high_quality=false
|
||||||
compress/lossy_quality=0.7
|
compress/lossy_quality=0.7
|
||||||
compress/hdr_compression=1
|
compress/hdr_compression=1
|
||||||
compress/normal_map=0
|
compress/normal_map=0
|
||||||
compress/channel_pack=0
|
compress/channel_pack=0
|
||||||
mipmaps/generate=false
|
mipmaps/generate=true
|
||||||
mipmaps/limit=-1
|
mipmaps/limit=-1
|
||||||
roughness/mode=0
|
roughness/mode=0
|
||||||
roughness/src_normal=""
|
roughness/src_normal=""
|
||||||
|
@ -31,4 +32,4 @@ process/normal_map_invert_y=false
|
||||||
process/hdr_as_srgb=false
|
process/hdr_as_srgb=false
|
||||||
process/hdr_clamp_exposure=false
|
process/hdr_clamp_exposure=false
|
||||||
process/size_limit=0
|
process/size_limit=0
|
||||||
detect_3d/compress_to=1
|
detect_3d/compress_to=0
|
||||||
|
|
Before Width: | Height: | Size: 3.9 MiB After Width: | Height: | Size: 3.4 MiB |
|
@ -1,7 +1,40 @@
|
||||||
[gd_scene load_steps=2 format=3 uid="uid://dp48t6earfkm4"]
|
[gd_scene load_steps=6 format=3 uid="uid://dp48t6earfkm4"]
|
||||||
|
|
||||||
[ext_resource type="PackedScene" uid="uid://cvu7bq8hur8yy" path="res://models/props/evergreen.blend" id="1_xfn5b"]
|
[ext_resource type="PackedScene" uid="uid://cvu7bq8hur8yy" path="res://models/props/evergreen.blend" id="1_xfn5b"]
|
||||||
|
[ext_resource type="Texture2D" uid="uid://dg6wbdfd7t314" path="res://models/props/evertree_cutout_texture.png" id="2_1mi82"]
|
||||||
|
|
||||||
|
[sub_resource type="CylinderMesh" id="CylinderMesh_1mi82"]
|
||||||
|
top_radius = 0.0
|
||||||
|
bottom_radius = 10.626
|
||||||
|
height = 20.987
|
||||||
|
cap_top = false
|
||||||
|
|
||||||
|
[sub_resource type="QuadMesh" id="QuadMesh_plvfv"]
|
||||||
|
size = Vector2(34.74, 34.74)
|
||||||
|
|
||||||
|
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_bi1ef"]
|
||||||
|
transparency = 2
|
||||||
|
alpha_scissor_threshold = 0.709
|
||||||
|
alpha_antialiasing_mode = 0
|
||||||
|
shading_mode = 2
|
||||||
|
specular_mode = 1
|
||||||
|
albedo_texture = ExtResource("2_1mi82")
|
||||||
|
disable_receive_shadows = true
|
||||||
|
billboard_mode = 2
|
||||||
|
|
||||||
[node name="Evertre" type="Node3D"]
|
[node name="Evertre" type="Node3D"]
|
||||||
|
|
||||||
[node name="evergreen" parent="." instance=ExtResource("1_xfn5b")]
|
[node name="evergreen" parent="." instance=ExtResource("1_xfn5b")]
|
||||||
|
visibility_parent = NodePath("../cutout")
|
||||||
|
|
||||||
|
[node name="shadowmesh" type="MeshInstance3D" parent="."]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 23.702, 0)
|
||||||
|
cast_shadow = 3
|
||||||
|
visibility_range_begin = 99.0
|
||||||
|
mesh = SubResource("CylinderMesh_1mi82")
|
||||||
|
|
||||||
|
[node name="cutout" type="MeshInstance3D" parent="."]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 17.7955, 0)
|
||||||
|
visibility_range_begin = 100.0
|
||||||
|
mesh = SubResource("QuadMesh_plvfv")
|
||||||
|
surface_material_override/0 = SubResource("StandardMaterial3D_bi1ef")
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
[gd_scene load_steps=4 format=3 uid="uid://dcgsrdacswacl"]
|
[gd_scene load_steps=5 format=3 uid="uid://dcgsrdacswacl"]
|
||||||
|
|
||||||
[ext_resource type="PackedScene" uid="uid://cl7a4q5m73vlw" path="res://models/player/character.blend" id="1_eqqp1"]
|
[ext_resource type="PackedScene" uid="uid://cl7a4q5m73vlw" path="res://models/player/character.blend" id="1_eqqp1"]
|
||||||
|
[ext_resource type="PackedScene" uid="uid://dy4yl1paa8whs" path="res://ui/ui.tscn" id="2_ykyjo"]
|
||||||
|
|
||||||
[sub_resource type="CapsuleShape3D" id="CapsuleShape3D_bxedw"]
|
[sub_resource type="CapsuleShape3D" id="CapsuleShape3D_bxedw"]
|
||||||
radius = 0.339355
|
radius = 0.339355
|
||||||
|
@ -15,7 +16,7 @@ script/source = "extends Camera3D
|
||||||
func _ready():
|
func _ready():
|
||||||
self.top_level = true
|
self.top_level = true
|
||||||
|
|
||||||
func _process(_delta):
|
func _physics_process(_delta):
|
||||||
var target : Vector3 = get_parent().global_position + Vector3(0.0, pivot_height, 0.0)
|
var target : Vector3 = get_parent().global_position + Vector3(0.0, pivot_height, 0.0)
|
||||||
var diff := self.global_position - target
|
var diff := self.global_position - target
|
||||||
if abs(diff).x + abs(diff.z) > 0.1:
|
if abs(diff).x + abs(diff.z) > 0.1:
|
||||||
|
@ -50,4 +51,6 @@ look_target_height = 1.5
|
||||||
[node name="character" parent="." instance=ExtResource("1_eqqp1")]
|
[node name="character" parent="." instance=ExtResource("1_eqqp1")]
|
||||||
unique_name_in_owner = true
|
unique_name_in_owner = true
|
||||||
|
|
||||||
|
[node name="CanvasLayer" parent="." instance=ExtResource("2_ykyjo")]
|
||||||
|
|
||||||
[editable path="character"]
|
[editable path="character"]
|
||||||
|
|
|
@ -7,11 +7,13 @@
|
||||||
size = Vector2(34.7, 34.7)
|
size = Vector2(34.7, 34.7)
|
||||||
|
|
||||||
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_t4bw2"]
|
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_t4bw2"]
|
||||||
transparency = 1
|
transparency = 2
|
||||||
|
alpha_scissor_threshold = 0.724
|
||||||
|
alpha_antialiasing_mode = 0
|
||||||
shading_mode = 2
|
shading_mode = 2
|
||||||
diffuse_mode = 1
|
specular_mode = 1
|
||||||
specular_mode = 2
|
|
||||||
albedo_texture = ExtResource("2_t4bw2")
|
albedo_texture = ExtResource("2_t4bw2")
|
||||||
|
disable_receive_shadows = true
|
||||||
billboard_mode = 2
|
billboard_mode = 2
|
||||||
|
|
||||||
[sub_resource type="SphereMesh" id="SphereMesh_t4bw2"]
|
[sub_resource type="SphereMesh" id="SphereMesh_t4bw2"]
|
||||||
|
@ -21,15 +23,17 @@ height = 22.768
|
||||||
[node name="Tree" type="Node3D"]
|
[node name="Tree" type="Node3D"]
|
||||||
|
|
||||||
[node name="tree" parent="." instance=ExtResource("1_n3f34")]
|
[node name="tree" parent="." instance=ExtResource("1_n3f34")]
|
||||||
visibility_parent = NodePath("../MeshInstance3D")
|
visibility_parent = NodePath("../cutout")
|
||||||
|
|
||||||
[node name="MeshInstance3D" type="MeshInstance3D" parent="."]
|
[node name="cutout" type="MeshInstance3D" parent="."]
|
||||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 17.1601, 0)
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 17.1601, 0)
|
||||||
visibility_range_begin = 100.0
|
visibility_range_begin = 100.0
|
||||||
mesh = SubResource("QuadMesh_n3f34")
|
mesh = SubResource("QuadMesh_n3f34")
|
||||||
surface_material_override/0 = SubResource("StandardMaterial3D_t4bw2")
|
surface_material_override/0 = SubResource("StandardMaterial3D_t4bw2")
|
||||||
|
|
||||||
[node name="MeshInstance3D2" type="MeshInstance3D" parent="."]
|
[node name="shadowmesh" type="MeshInstance3D" parent="."]
|
||||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 22.6292, 0)
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 23.4137, 0)
|
||||||
cast_shadow = 3
|
cast_shadow = 3
|
||||||
|
visibility_range_begin = 99.0
|
||||||
mesh = SubResource("SphereMesh_t4bw2")
|
mesh = SubResource("SphereMesh_t4bw2")
|
||||||
|
skeleton = NodePath("../tree")
|
||||||
|
|
|
@ -36,10 +36,10 @@ func process_ahead():
|
||||||
var target : Vector3 = player.global_position + last_velocity
|
var target : Vector3 = player.global_position + last_velocity
|
||||||
target.y = self.global_position.y
|
target.y = self.global_position.y
|
||||||
var forward : Vector3 = player.velocity.normalized()
|
var forward : Vector3 = player.velocity.normalized()
|
||||||
if player.global_position.distance_squared_to(self.global_position) < target_distance * target_distance or abs((player.global_position - global_position).dot(forward.cross(Vector3.UP))) < 0.25:
|
if player.global_position.distance_squared_to(self.global_position) < target_distance * target_distance or abs((player.global_position - global_position).dot(forward.cross(Vector3.UP))) <= 0.1:
|
||||||
self.velocity = Vector3()
|
self.velocity = Vector3()
|
||||||
return
|
return
|
||||||
if !forward.is_zero_approx():
|
if !forward.is_zero_approx() and false:
|
||||||
last_velocity = player.velocity
|
last_velocity = player.velocity
|
||||||
forward.y = 0.0
|
forward.y = 0.0
|
||||||
forward = forward.normalized()
|
forward = forward.normalized()
|
||||||
|
@ -47,11 +47,12 @@ func process_ahead():
|
||||||
self.velocity = (target - self.global_position).normalized() * speed
|
self.velocity = (target - self.global_position).normalized() * speed
|
||||||
|
|
||||||
func process_behind():
|
func process_behind():
|
||||||
|
pass
|
||||||
var diff : Vector3 = player.global_position - global_position
|
var diff : Vector3 = player.global_position - global_position
|
||||||
var forward := diff.normalized()
|
var forward := diff.normalized()
|
||||||
var left := Vector3.UP.cross(forward)
|
var left := Vector3.UP.cross(forward)
|
||||||
self.velocity = forward + left * direction * min(10.0, diff.length())
|
self.velocity = forward + left * direction * min(10.0, diff.length())
|
||||||
self.look_at(Vector3(player.global_position.x, global_position.y, player.global_position.z))
|
# self.look_at(Vector3(player.global_position.x, global_position.y, player.global_position.z))
|
||||||
|
|
||||||
func _physics_process(_delta : float):
|
func _physics_process(_delta : float):
|
||||||
self.velocity += Vector3(0, -0.25, 0)
|
self.velocity += Vector3(0, -0.25, 0)
|
||||||
|
@ -59,17 +60,20 @@ func _physics_process(_delta : float):
|
||||||
"
|
"
|
||||||
|
|
||||||
[sub_resource type="SphereShape3D" id="SphereShape3D_j6w7d"]
|
[sub_resource type="SphereShape3D" id="SphereShape3D_j6w7d"]
|
||||||
radius = 1.83616
|
radius = 1.4143
|
||||||
|
|
||||||
[sub_resource type="BoxShape3D" id="BoxShape3D_j6w7d"]
|
[sub_resource type="BoxShape3D" id="BoxShape3D_j6w7d"]
|
||||||
size = Vector3(4.29688, 3.86325, 2.76758)
|
size = Vector3(5.79102, 3.86325, 2.76758)
|
||||||
|
|
||||||
[node name="WallEnemy" type="CharacterBody3D"]
|
[node name="WallEnemy" type="CharacterBody3D"]
|
||||||
collision_layer = 2
|
collision_layer = 2
|
||||||
|
floor_snap_length = 10.0
|
||||||
script = SubResource("GDScript_j6w7d")
|
script = SubResource("GDScript_j6w7d")
|
||||||
|
target_distance = 4.0
|
||||||
|
detect_distance = 20.0
|
||||||
|
|
||||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="."]
|
[node name="CollisionShape3D" type="CollisionShape3D" parent="."]
|
||||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.83717, 0)
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.37512, 0)
|
||||||
shape = SubResource("SphereShape3D_j6w7d")
|
shape = SubResource("SphereShape3D_j6w7d")
|
||||||
|
|
||||||
[node name="AnimatableBody3D" type="AnimatableBody3D" parent="."]
|
[node name="AnimatableBody3D" type="AnimatableBody3D" parent="."]
|
||||||
|
|
|
@ -11,7 +11,7 @@ config_version=5
|
||||||
[application]
|
[application]
|
||||||
|
|
||||||
config/name="going"
|
config/name="going"
|
||||||
run/main_scene="uid://sofv1apr4467"
|
run/main_scene="uid://cnau7sr4mu3gf"
|
||||||
config/features=PackedStringArray("4.4", "Forward Plus")
|
config/features=PackedStringArray("4.4", "Forward Plus")
|
||||||
config/icon="res://icon.svg"
|
config/icon="res://icon.svg"
|
||||||
|
|
||||||
|
@ -19,6 +19,7 @@ config/icon="res://icon.svg"
|
||||||
|
|
||||||
window/size/viewport_width=1920
|
window/size/viewport_width=1920
|
||||||
window/size/viewport_height=1080
|
window/size/viewport_height=1080
|
||||||
|
window/size/mode=3
|
||||||
window/size/resizable=false
|
window/size/resizable=false
|
||||||
window/vsync/vsync_mode=0
|
window/vsync/vsync_mode=0
|
||||||
|
|
||||||
|
@ -74,3 +75,10 @@ camera/depth_of_field/depth_of_field_bokeh_shape=0
|
||||||
anti_aliasing/quality/screen_space_aa=1
|
anti_aliasing/quality/screen_space_aa=1
|
||||||
anti_aliasing/quality/use_debanding=true
|
anti_aliasing/quality/use_debanding=true
|
||||||
occlusion_culling/use_occlusion_culling=true
|
occlusion_culling/use_occlusion_culling=true
|
||||||
|
|
||||||
|
[shader_globals]
|
||||||
|
|
||||||
|
game_over_percentage={
|
||||||
|
"type": "float",
|
||||||
|
"value": 0.0
|
||||||
|
}
|
||||||
|
|
33
project/scenes/main_menu.tscn
Normal file
|
@ -0,0 +1,33 @@
|
||||||
|
[gd_scene load_steps=2 format=3 uid="uid://cnau7sr4mu3gf"]
|
||||||
|
|
||||||
|
[sub_resource type="GDScript" id="GDScript_vue75"]
|
||||||
|
script/source = "extends Button
|
||||||
|
|
||||||
|
func _on_button_up() -> void:
|
||||||
|
self.get_tree().change_scene_to_file(\"res://scenes/valley.tscn\")
|
||||||
|
"
|
||||||
|
|
||||||
|
[node name="MainMenu" type="Control"]
|
||||||
|
layout_mode = 3
|
||||||
|
anchors_preset = 15
|
||||||
|
anchor_right = 1.0
|
||||||
|
anchor_bottom = 1.0
|
||||||
|
grow_horizontal = 2
|
||||||
|
grow_vertical = 2
|
||||||
|
|
||||||
|
[node name="Button" type="Button" parent="."]
|
||||||
|
layout_mode = 1
|
||||||
|
anchors_preset = 15
|
||||||
|
anchor_right = 1.0
|
||||||
|
anchor_bottom = 1.0
|
||||||
|
offset_left = 722.0
|
||||||
|
offset_top = 400.0
|
||||||
|
offset_right = -721.0
|
||||||
|
offset_bottom = -399.0
|
||||||
|
grow_horizontal = 2
|
||||||
|
grow_vertical = 2
|
||||||
|
theme_override_font_sizes/font_size = 200
|
||||||
|
text = "Start"
|
||||||
|
script = SubResource("GDScript_vue75")
|
||||||
|
|
||||||
|
[connection signal="button_up" from="Button" to="Button" method="_on_button_up"]
|
|
@ -1,10 +1,11 @@
|
||||||
[gd_scene load_steps=9 format=3 uid="uid://sofv1apr4467"]
|
[gd_scene load_steps=12 format=3 uid="uid://sofv1apr4467"]
|
||||||
|
|
||||||
[ext_resource type="PackedScene" uid="uid://5cfl3xu1861l" path="res://models/terrains/level.blend" id="1_ch7jd"]
|
[ext_resource type="PackedScene" uid="uid://5cfl3xu1861l" path="res://models/terrains/level.blend" id="1_ch7jd"]
|
||||||
[ext_resource type="PackedScene" uid="uid://dcgsrdacswacl" path="res://objects/player.tscn" id="2_pvuhy"]
|
[ext_resource type="PackedScene" uid="uid://dcgsrdacswacl" path="res://objects/player.tscn" id="2_pvuhy"]
|
||||||
[ext_resource type="PackedScene" uid="uid://dqjurq1nq1fle" path="res://objects/tre.tscn" id="3_lj5yw"]
|
[ext_resource type="PackedScene" uid="uid://dqjurq1nq1fle" path="res://objects/tre.tscn" id="3_lj5yw"]
|
||||||
[ext_resource type="PackedScene" uid="uid://cdmksnsttot3j" path="res://objects/wall_enemy.tscn" id="4_kaqos"]
|
[ext_resource type="PackedScene" uid="uid://cdmksnsttot3j" path="res://objects/wall_enemy.tscn" id="4_kaqos"]
|
||||||
[ext_resource type="PackedScene" uid="uid://dp48t6earfkm4" path="res://objects/evertre.tscn" id="5_81e57"]
|
[ext_resource type="PackedScene" uid="uid://dp48t6earfkm4" path="res://objects/evertre.tscn" id="5_81e57"]
|
||||||
|
[ext_resource type="PackedScene" uid="uid://cdyr4yad84cp2" path="res://models/pickups/twirly.blend" id="6_a2vvy"]
|
||||||
|
|
||||||
[sub_resource type="ProceduralSkyMaterial" id="ProceduralSkyMaterial_pvuhy"]
|
[sub_resource type="ProceduralSkyMaterial" id="ProceduralSkyMaterial_pvuhy"]
|
||||||
sky_top_color = Color(0.0825, 0.277292, 0.55, 1)
|
sky_top_color = Color(0.0825, 0.277292, 0.55, 1)
|
||||||
|
@ -23,13 +24,52 @@ ambient_light_source = 3
|
||||||
ssao_radius = 16.0
|
ssao_radius = 16.0
|
||||||
glow_enabled = true
|
glow_enabled = true
|
||||||
|
|
||||||
|
[sub_resource type="GDScript" id="GDScript_a2vvy"]
|
||||||
|
script/source = "extends Area3D
|
||||||
|
|
||||||
|
func _on_body_entered(body: Node3D) -> void:
|
||||||
|
if body.is_class(\"PlayerBody\"):
|
||||||
|
body.set_can_jump(true)
|
||||||
|
queue_free()
|
||||||
|
GameUI.get_singleton().display_message(\"Jump by pressing F during a split-step\")
|
||||||
|
|
||||||
|
func _process(delta):
|
||||||
|
$twirly.rotate_y(delta * 2.0)
|
||||||
|
"
|
||||||
|
|
||||||
|
[sub_resource type="SphereShape3D" id="SphereShape3D_a2vvy"]
|
||||||
|
radius = 1.61546
|
||||||
|
|
||||||
[node name="Valley" type="Node3D"]
|
[node name="Valley" type="Node3D"]
|
||||||
|
|
||||||
[node name="Player" parent="." instance=ExtResource("2_pvuhy")]
|
[node name="Player" parent="." instance=ExtResource("2_pvuhy")]
|
||||||
transform = Transform3D(0.999996, 0, -0.0030368, 0, 1, 0, 0.0030368, 0, 0.999996, 4.19603, 31.6645, -39.4833)
|
transform = Transform3D(0.999996, 0, -0.0030368, 0, 1, 0, 0.0030368, 0, 0.999996, 31.3342, 31.6645, -39.9581)
|
||||||
|
|
||||||
[node name="WallEnemy" parent="." instance=ExtResource("4_kaqos")]
|
[node name="WallEnemy" parent="." instance=ExtResource("4_kaqos")]
|
||||||
transform = Transform3D(-0.0472111, 0, -0.998885, 0, 1, 0, 0.998885, 0, -0.0472111, -33.2398, -0.00426483, 142.026)
|
transform = Transform3D(-0.38249, 0, -0.923959, 0, 1, 0, 0.923959, 0, -0.38249, 135.071, -6.37696, 263.993)
|
||||||
|
|
||||||
|
[node name="WallEnemy3" parent="." instance=ExtResource("4_kaqos")]
|
||||||
|
transform = Transform3D(0.999926, 0, 0.0121468, 0, 1, 0, -0.0121468, 0, 0.999926, 168.538, -6.37696, 215.507)
|
||||||
|
|
||||||
|
[node name="WallEnemy2" parent="." instance=ExtResource("4_kaqos")]
|
||||||
|
transform = Transform3D(-0.991635, 0, 0.129073, 0, 1, 0, -0.129073, 0, -0.991635, 229.483, -6.38962, 232.319)
|
||||||
|
speed = 4.0
|
||||||
|
|
||||||
|
[node name="Label3D" type="Label3D" parent="WallEnemy2"]
|
||||||
|
transform = Transform3D(0.994593, -0.103851, 0, -4.53949e-09, -4.3475e-08, 1, -0.103851, -0.994593, -4.37114e-08, 231.324, 6.54938, 243.387)
|
||||||
|
pixel_size = 0.08
|
||||||
|
text = " [W]
|
||||||
|
A S D"
|
||||||
|
|
||||||
|
[node name="Label3D2" type="Label3D" parent="WallEnemy2"]
|
||||||
|
transform = Transform3D(0.965926, 0, 0.258819, 0, 1, 0, -0.258819, 0, 0.965926, 228.424, 8.2929, 214.064)
|
||||||
|
pixel_size = 0.025
|
||||||
|
text = "[Space] [D]"
|
||||||
|
|
||||||
|
[node name="Label3D3" type="Label3D" parent="WallEnemy2"]
|
||||||
|
transform = Transform3D(-2.98023e-08, 0, -1, 0, 1, 0, 1, 0, -2.98023e-08, 260.364, 8.2929, 215.45)
|
||||||
|
pixel_size = 0.025
|
||||||
|
text = "[Space] [A]"
|
||||||
|
|
||||||
[node name="WorldEnvironment" type="WorldEnvironment" parent="."]
|
[node name="WorldEnvironment" type="WorldEnvironment" parent="."]
|
||||||
environment = SubResource("Environment_lj5yw")
|
environment = SubResource("Environment_lj5yw")
|
||||||
|
@ -82,10 +122,10 @@ transform = Transform3D(-0.583853, 0, 0.811859, 0, 1, 0, -0.811859, 0, -0.583853
|
||||||
transform = Transform3D(-0.806857, 0, 0.590747, 0, 1, 0, -0.590747, 0, -0.806857, 12.0918, 0.326586, 19.9047)
|
transform = Transform3D(-0.806857, 0, 0.590747, 0, 1, 0, -0.590747, 0, -0.806857, 12.0918, 0.326586, 19.9047)
|
||||||
|
|
||||||
[node name="Node3D17" parent="level" instance=ExtResource("3_lj5yw")]
|
[node name="Node3D17" parent="level" instance=ExtResource("3_lj5yw")]
|
||||||
transform = Transform3D(-0.729256, 0, -0.684242, 0, 1, 0, 0.684242, 0, -0.729256, 25.3264, 0.0781007, 1.97371)
|
transform = Transform3D(-0.729256, 0, -0.684242, 0, 1, 0, 0.684242, 0, -0.729256, 25.1658, -0.570518, 3.70682)
|
||||||
|
|
||||||
[node name="Node3D19" parent="level" instance=ExtResource("3_lj5yw")]
|
[node name="Node3D19" parent="level" instance=ExtResource("3_lj5yw")]
|
||||||
transform = Transform3D(-0.63905, 0, -0.769166, 0, 1, 0, 0.769166, 0, -0.63905, 36.3753, 0.295401, 4.2828)
|
transform = Transform3D(-0.63905, 0, -0.769166, 0, 1, 0, 0.769166, 0, -0.63905, 35.7514, -0.40734, 5.82252)
|
||||||
|
|
||||||
[node name="Node3D21" parent="level" instance=ExtResource("3_lj5yw")]
|
[node name="Node3D21" parent="level" instance=ExtResource("3_lj5yw")]
|
||||||
transform = Transform3D(0.87511, -1.61731e-08, 0.483924, -2.43482e-08, 1, 7.74511e-08, -0.483924, -7.95609e-08, 0.87511, 17.2233, 0.574241, 11.9056)
|
transform = Transform3D(0.87511, -1.61731e-08, 0.483924, -2.43482e-08, 1, 7.74511e-08, -0.483924, -7.95609e-08, 0.87511, 17.2233, 0.574241, 11.9056)
|
||||||
|
@ -349,7 +389,7 @@ transform = Transform3D(0.925203, -7.60956e-08, 0.379472, 3.51579e-08, 1, 1.1481
|
||||||
transform = Transform3D(0.395593, 9.15362e-08, -0.918426, 3.51579e-08, 1, 1.14811e-07, 0.918426, -7.77082e-08, 0.395593, -11.1774, -0.230842, 39.2564)
|
transform = Transform3D(0.395593, 9.15362e-08, -0.918426, 3.51579e-08, 1, 1.14811e-07, 0.918426, -7.77082e-08, 0.395593, -11.1774, -0.230842, 39.2564)
|
||||||
|
|
||||||
[node name="Node3D105" parent="level" instance=ExtResource("3_lj5yw")]
|
[node name="Node3D105" parent="level" instance=ExtResource("3_lj5yw")]
|
||||||
transform = Transform3D(-0.199709, -1.05476e-07, 0.979855, 3.51579e-08, 1, 1.14811e-07, -0.979855, 5.73785e-08, -0.199709, 3.23367, -0.230842, 53.8158)
|
transform = Transform3D(-0.199709, -1.05476e-07, 0.979855, 3.51579e-08, 1, 1.14811e-07, -0.979855, 5.73785e-08, -0.199709, 3.21507, -0.298522, 43.3237)
|
||||||
|
|
||||||
[node name="Node3D58" parent="level" instance=ExtResource("3_lj5yw")]
|
[node name="Node3D58" parent="level" instance=ExtResource("3_lj5yw")]
|
||||||
transform = Transform3D(-0.573291, -7.39146e-08, 0.819353, 3.51579e-08, 1, 1.14811e-07, -0.819353, 9.46265e-08, -0.573291, 41.0137, 1.1686, 34.4092)
|
transform = Transform3D(-0.573291, -7.39146e-08, 0.819353, 3.51579e-08, 1, 1.14811e-07, -0.819353, 9.46265e-08, -0.573291, 41.0137, 1.1686, 34.4092)
|
||||||
|
@ -777,9 +817,6 @@ transform = Transform3D(-0.954802, 0, 0.297242, 0, 1, 0, -0.297242, 0, -0.954802
|
||||||
[node name="Node3D225" parent="level" instance=ExtResource("3_lj5yw")]
|
[node name="Node3D225" parent="level" instance=ExtResource("3_lj5yw")]
|
||||||
transform = Transform3D(-0.954802, 0, 0.297242, 0, 1, 0, -0.297242, 0, -0.954802, -49.3032, 12.6146, 184.871)
|
transform = Transform3D(-0.954802, 0, 0.297242, 0, 1, 0, -0.297242, 0, -0.954802, -49.3032, 12.6146, 184.871)
|
||||||
|
|
||||||
[node name="Node3D226" parent="level" instance=ExtResource("3_lj5yw")]
|
|
||||||
transform = Transform3D(-0.954802, 0, 0.297242, 0, 1, 0, -0.297242, 0, -0.954802, -48.3955, 11.2669, 178.045)
|
|
||||||
|
|
||||||
[node name="Node3D227" parent="level" instance=ExtResource("3_lj5yw")]
|
[node name="Node3D227" parent="level" instance=ExtResource("3_lj5yw")]
|
||||||
transform = Transform3D(-0.954802, 0, 0.297242, 0, 1, 0, -0.297242, 0, -0.954802, -47.6151, 8.45536, 169.048)
|
transform = Transform3D(-0.954802, 0, 0.297242, 0, 1, 0, -0.297242, 0, -0.954802, -47.6151, 8.45536, 169.048)
|
||||||
|
|
||||||
|
@ -846,9 +883,6 @@ transform = Transform3D(-0.999984, 0, -0.00563782, 0, 1, 0, 0.00563782, 0, -0.99
|
||||||
[node name="Node3D211" parent="level" instance=ExtResource("3_lj5yw")]
|
[node name="Node3D211" parent="level" instance=ExtResource("3_lj5yw")]
|
||||||
transform = Transform3D(-0.890832, 0, -0.454333, 0, 1, 0, 0.454333, 0, -0.890832, -39.1819, 13.7524, 202.259)
|
transform = Transform3D(-0.890832, 0, -0.454333, 0, 1, 0, 0.454333, 0, -0.890832, -39.1819, 13.7524, 202.259)
|
||||||
|
|
||||||
[node name="Node3D212" parent="level" instance=ExtResource("3_lj5yw")]
|
|
||||||
transform = Transform3D(-0.50225, 0, 0.864722, 0, 1, 0, -0.864722, 0, -0.50225, -40.8661, 4.56589, 159.345)
|
|
||||||
|
|
||||||
[node name="Node3D213" parent="level" instance=ExtResource("3_lj5yw")]
|
[node name="Node3D213" parent="level" instance=ExtResource("3_lj5yw")]
|
||||||
transform = Transform3D(-0.50225, 0, 0.864722, 0, 1, 0, -0.864722, 0, -0.50225, -46.8773, 3.83218, 159.091)
|
transform = Transform3D(-0.50225, 0, 0.864722, 0, 1, 0, -0.864722, 0, -0.50225, -46.8773, 3.83218, 159.091)
|
||||||
|
|
||||||
|
@ -864,9 +898,6 @@ transform = Transform3D(-0.50225, 0, 0.864722, 0, 1, 0, -0.864722, 0, -0.50225,
|
||||||
[node name="Node3D217" parent="level" instance=ExtResource("3_lj5yw")]
|
[node name="Node3D217" parent="level" instance=ExtResource("3_lj5yw")]
|
||||||
transform = Transform3D(-0.50225, 0, 0.864722, 0, 1, 0, -0.864722, 0, -0.50225, -13.0376, 6.92232, 157.9)
|
transform = Transform3D(-0.50225, 0, 0.864722, 0, 1, 0, -0.864722, 0, -0.50225, -13.0376, 6.92232, 157.9)
|
||||||
|
|
||||||
[node name="Node3D218" parent="level" instance=ExtResource("3_lj5yw")]
|
|
||||||
transform = Transform3D(-0.50225, 0, 0.864722, 0, 1, 0, -0.864722, 0, -0.50225, -23.1474, 6.80598, 161.031)
|
|
||||||
|
|
||||||
[node name="Node3D220" parent="level" instance=ExtResource("3_lj5yw")]
|
[node name="Node3D220" parent="level" instance=ExtResource("3_lj5yw")]
|
||||||
transform = Transform3D(-0.50225, 0, 0.864722, 0, 1, 0, -0.864722, 0, -0.50225, -22.0954, 10.289, 171.149)
|
transform = Transform3D(-0.50225, 0, 0.864722, 0, 1, 0, -0.864722, 0, -0.50225, -22.0954, 10.289, 171.149)
|
||||||
|
|
||||||
|
@ -877,7 +908,7 @@ transform = Transform3D(-0.50225, 0, 0.864722, 0, 1, 0, -0.864722, 0, -0.50225,
|
||||||
transform = Transform3D(-0.50225, 0, 0.864722, 0, 1, 0, -0.864722, 0, -0.50225, -1.87738, 7.83628, 154.856)
|
transform = Transform3D(-0.50225, 0, 0.864722, 0, 1, 0, -0.864722, 0, -0.50225, -1.87738, 7.83628, 154.856)
|
||||||
|
|
||||||
[node name="Node3D223" parent="level" instance=ExtResource("3_lj5yw")]
|
[node name="Node3D223" parent="level" instance=ExtResource("3_lj5yw")]
|
||||||
transform = Transform3D(-0.50225, 0, 0.864722, 0, 1, 0, -0.864722, 0, -0.50225, 4.71963, 11.8309, 165.954)
|
transform = Transform3D(-0.50225, 0, 0.864722, 0, 1, 0, -0.864722, 0, -0.50225, 5.2084, 11.3779, 162.47)
|
||||||
|
|
||||||
[node name="Node3D224" parent="level" instance=ExtResource("3_lj5yw")]
|
[node name="Node3D224" parent="level" instance=ExtResource("3_lj5yw")]
|
||||||
transform = Transform3D(-0.50225, 0, 0.864722, 0, 1, 0, -0.864722, 0, -0.50225, 24.9724, 13.0452, 151.413)
|
transform = Transform3D(-0.50225, 0, 0.864722, 0, 1, 0, -0.864722, 0, -0.50225, 24.9724, 13.0452, 151.413)
|
||||||
|
@ -1036,3 +1067,29 @@ shadow_opacity = 0.74
|
||||||
shadow_blur = 0.973
|
shadow_blur = 0.973
|
||||||
directional_shadow_blend_splits = true
|
directional_shadow_blend_splits = true
|
||||||
directional_shadow_max_distance = 1063.4
|
directional_shadow_max_distance = 1063.4
|
||||||
|
|
||||||
|
[node name="Tree" parent="." instance=ExtResource("3_lj5yw")]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 269.46, 0.341235, 236.781)
|
||||||
|
|
||||||
|
[node name="Area3D" type="Area3D" parent="."]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 259.242, 1.93115, 234.094)
|
||||||
|
script = SubResource("GDScript_a2vvy")
|
||||||
|
|
||||||
|
[node name="twirly" parent="Area3D" instance=ExtResource("6_a2vvy")]
|
||||||
|
|
||||||
|
[node name="OmniLight3D" type="OmniLight3D" parent="Area3D"]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -0.503185, 0)
|
||||||
|
light_color = Color(0.880355, 0.555272, 0, 1)
|
||||||
|
light_energy = 8.133
|
||||||
|
omni_range = 3.15575
|
||||||
|
|
||||||
|
[node name="OmniLight3D2" type="OmniLight3D" parent="Area3D"]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.00915, 0)
|
||||||
|
light_color = Color(0.880355, 0.555272, 0, 1)
|
||||||
|
light_energy = 8.133
|
||||||
|
omni_range = 3.15575
|
||||||
|
|
||||||
|
[node name="CollisionShape3D" type="CollisionShape3D" parent="Area3D"]
|
||||||
|
shape = SubResource("SphereShape3D_a2vvy")
|
||||||
|
|
||||||
|
[connection signal="body_entered" from="Area3D" to="Area3D" method="_on_body_entered"]
|
||||||
|
|
59
project/ui/ui.tscn
Normal file
|
@ -0,0 +1,59 @@
|
||||||
|
[gd_scene load_steps=4 format=3 uid="uid://dy4yl1paa8whs"]
|
||||||
|
|
||||||
|
[ext_resource type="Texture2D" uid="uid://bglfaie21avpt" path="res://ui/vignette.png" id="1_nb4k0"]
|
||||||
|
|
||||||
|
[sub_resource type="Shader" id="Shader_ykyjo"]
|
||||||
|
code = "shader_type canvas_item;
|
||||||
|
global uniform float game_over_percentage = 0.0;
|
||||||
|
|
||||||
|
void vertex() {
|
||||||
|
// Called for every vertex the material is visible on.
|
||||||
|
}
|
||||||
|
|
||||||
|
void fragment() {
|
||||||
|
COLOR.r = COLOR.g = COLOR.b = 0.0;
|
||||||
|
COLOR.a = clamp(COLOR.a + game_over_percentage * 2.0 - 1.0, 0.0, 1.0);
|
||||||
|
}
|
||||||
|
|
||||||
|
//void light() {
|
||||||
|
// // Called for every pixel for every light affecting the CanvasItem.
|
||||||
|
// // Uncomment to replace the default light processing function with this one.
|
||||||
|
//}
|
||||||
|
"
|
||||||
|
|
||||||
|
[sub_resource type="ShaderMaterial" id="ShaderMaterial_uxov2"]
|
||||||
|
shader = SubResource("Shader_ykyjo")
|
||||||
|
|
||||||
|
[node name="CanvasLayer" type="GameUI"]
|
||||||
|
|
||||||
|
[node name="Vignette" type="TextureRect" parent="."]
|
||||||
|
material = SubResource("ShaderMaterial_uxov2")
|
||||||
|
anchors_preset = 15
|
||||||
|
anchor_right = 1.0
|
||||||
|
anchor_bottom = 1.0
|
||||||
|
grow_horizontal = 2
|
||||||
|
grow_vertical = 2
|
||||||
|
size_flags_horizontal = 3
|
||||||
|
size_flags_vertical = 3
|
||||||
|
texture = ExtResource("1_nb4k0")
|
||||||
|
expand_mode = 2
|
||||||
|
|
||||||
|
[node name="MessageLabel" type="RichTextLabel" parent="."]
|
||||||
|
unique_name_in_owner = true
|
||||||
|
anchors_preset = 10
|
||||||
|
anchor_right = 1.0
|
||||||
|
offset_bottom = 195.0
|
||||||
|
grow_horizontal = 2
|
||||||
|
theme_override_font_sizes/normal_font_size = 60
|
||||||
|
text = "Good Luck!"
|
||||||
|
horizontal_alignment = 1
|
||||||
|
vertical_alignment = 1
|
||||||
|
|
||||||
|
[node name="ClearMessageTimer" type="Timer" parent="MessageLabel"]
|
||||||
|
unique_name_in_owner = true
|
||||||
|
wait_time = 5.0
|
||||||
|
one_shot = true
|
||||||
|
autostart = true
|
||||||
|
ignore_time_scale = true
|
||||||
|
|
||||||
|
[connection signal="timeout" from="MessageLabel/ClearMessageTimer" to="MessageLabel" method="set_text" flags=3 binds= [""]]
|
BIN
project/ui/vignette.png
Normal file
After Width: | Height: | Size: 80 KiB |
34
project/ui/vignette.png.import
Normal file
|
@ -0,0 +1,34 @@
|
||||||
|
[remap]
|
||||||
|
|
||||||
|
importer="texture"
|
||||||
|
type="CompressedTexture2D"
|
||||||
|
uid="uid://bglfaie21avpt"
|
||||||
|
path="res://.godot/imported/vignette.png-fcc9b969d140e62ae5a80701deb118ec.ctex"
|
||||||
|
metadata={
|
||||||
|
"vram_texture": false
|
||||||
|
}
|
||||||
|
|
||||||
|
[deps]
|
||||||
|
|
||||||
|
source_file="res://ui/vignette.png"
|
||||||
|
dest_files=["res://.godot/imported/vignette.png-fcc9b969d140e62ae5a80701deb118ec.ctex"]
|
||||||
|
|
||||||
|
[params]
|
||||||
|
|
||||||
|
compress/mode=0
|
||||||
|
compress/high_quality=false
|
||||||
|
compress/lossy_quality=0.7
|
||||||
|
compress/hdr_compression=1
|
||||||
|
compress/normal_map=0
|
||||||
|
compress/channel_pack=0
|
||||||
|
mipmaps/generate=false
|
||||||
|
mipmaps/limit=-1
|
||||||
|
roughness/mode=0
|
||||||
|
roughness/src_normal=""
|
||||||
|
process/fix_alpha_border=true
|
||||||
|
process/premult_alpha=false
|
||||||
|
process/normal_map_invert_y=false
|
||||||
|
process/hdr_as_srgb=false
|
||||||
|
process/hdr_clamp_exposure=false
|
||||||
|
process/size_limit=0
|
||||||
|
detect_3d/compress_to=1
|