Compare commits
2 commits
e1b43c8bc5
...
77ef1dee48
Author | SHA1 | Date | |
---|---|---|---|
77ef1dee48 | |||
08712cf22c |
13 changed files with 296 additions and 43 deletions
Binary file not shown.
36
assets/shaders/flag.gdshader
Normal file
36
assets/shaders/flag.gdshader
Normal file
|
@ -0,0 +1,36 @@
|
||||||
|
shader_type spatial;
|
||||||
|
render_mode vertex_lighting, specular_disabled, cull_disabled;
|
||||||
|
|
||||||
|
uniform vec3 color_bright : source_color = vec3(1.0);
|
||||||
|
uniform vec3 color_dark : source_color = vec3(0.0);
|
||||||
|
uniform float pivot = 0.0;
|
||||||
|
uniform float pivot_speed = 1.0;
|
||||||
|
uniform float waves = 4.0;
|
||||||
|
uniform float wave_speed = 1.0;
|
||||||
|
uniform float wave_scale = 0.25;
|
||||||
|
|
||||||
|
void vertex() {
|
||||||
|
float body = (VERTEX.x) / 2.0;
|
||||||
|
|
||||||
|
VERTEX.z = sin(VERTEX.x * waves + TIME * wave_speed) * wave_scale * body;
|
||||||
|
|
||||||
|
float pivot_angle = cos(TIME * pivot_speed) * 0.1 * pivot;
|
||||||
|
mat2 rotation_matrix = mat2(
|
||||||
|
vec2(cos(pivot_angle), -sin(pivot_angle)),
|
||||||
|
vec2(sin(pivot_angle), cos(pivot_angle))
|
||||||
|
);
|
||||||
|
VERTEX.xz = rotation_matrix * VERTEX.xz;
|
||||||
|
|
||||||
|
float color_weight = sin(VERTEX.x * waves + TIME * wave_speed);
|
||||||
|
COLOR = vec4(mix(color_dark, color_bright, color_weight), 1.0);
|
||||||
|
//VERTEX.z += cos(time + body) * wave;
|
||||||
|
}
|
||||||
|
|
||||||
|
void fragment() {
|
||||||
|
ALBEDO = COLOR.rgb;
|
||||||
|
}
|
||||||
|
|
||||||
|
//void light() {
|
||||||
|
// Called for every pixel for every light affecting the material.
|
||||||
|
// Uncomment to replace the default light processing function with this one.
|
||||||
|
//}
|
BIN
assets/textures/objects/goal_hole.png
Normal file
BIN
assets/textures/objects/goal_hole.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 833 B |
35
assets/textures/objects/goal_hole.png.import
Normal file
35
assets/textures/objects/goal_hole.png.import
Normal file
|
@ -0,0 +1,35 @@
|
||||||
|
[remap]
|
||||||
|
|
||||||
|
importer="texture"
|
||||||
|
type="CompressedTexture2D"
|
||||||
|
uid="uid://cyxkbck2gs2wt"
|
||||||
|
path.s3tc="res://.godot/imported/goal_hole.png-82d98e7cb998351c16c7196fffe6486e.s3tc.ctex"
|
||||||
|
metadata={
|
||||||
|
"imported_formats": ["s3tc_bptc"],
|
||||||
|
"vram_texture": true
|
||||||
|
}
|
||||||
|
|
||||||
|
[deps]
|
||||||
|
|
||||||
|
source_file="res://assets/textures/objects/goal_hole.png"
|
||||||
|
dest_files=["res://.godot/imported/goal_hole.png-82d98e7cb998351c16c7196fffe6486e.s3tc.ctex"]
|
||||||
|
|
||||||
|
[params]
|
||||||
|
|
||||||
|
compress/mode=2
|
||||||
|
compress/high_quality=false
|
||||||
|
compress/lossy_quality=0.7
|
||||||
|
compress/hdr_compression=1
|
||||||
|
compress/normal_map=0
|
||||||
|
compress/channel_pack=0
|
||||||
|
mipmaps/generate=true
|
||||||
|
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=0
|
Binary file not shown.
Before Width: | Height: | Size: 3.1 KiB After Width: | Height: | Size: 6.5 KiB |
|
@ -1,3 +1,4 @@
|
||||||
|
class_name Player
|
||||||
extends CharacterBody3D
|
extends CharacterBody3D
|
||||||
|
|
||||||
|
|
||||||
|
@ -5,9 +6,13 @@ extends CharacterBody3D
|
||||||
@export var power_sensitivity: float
|
@export var power_sensitivity: float
|
||||||
@export var power_threshold: float
|
@export var power_threshold: float
|
||||||
|
|
||||||
|
@export var goal_animation_time: float = 1.0
|
||||||
|
|
||||||
@export_group("Movement")
|
@export_group("Movement")
|
||||||
@export var gravity: float
|
@export var gravity: float
|
||||||
@export var friction: float
|
@export var friction: float
|
||||||
|
@export var friction_coef: float
|
||||||
|
@export var friction_pow: float
|
||||||
@export var stop_threshold: float
|
@export var stop_threshold: float
|
||||||
|
|
||||||
@export_group("Camera", "camera_")
|
@export_group("Camera", "camera_")
|
||||||
|
@ -18,9 +23,10 @@ extends CharacterBody3D
|
||||||
|
|
||||||
@export_group("Node References")
|
@export_group("Node References")
|
||||||
@export var state_chart: StateChart
|
@export var state_chart: StateChart
|
||||||
|
@export var graphics: Node3D
|
||||||
@export var power_indicator: Node3D
|
@export var power_indicator: Node3D
|
||||||
@export var camera_arm: SpringArm3D
|
@export var camera_arm: SpringArm3D
|
||||||
@export var wall_detector: PhysicsBody3D
|
@export var collision_shape: CollisionShape3D
|
||||||
|
|
||||||
|
|
||||||
var power: float = 0.0:
|
var power: float = 0.0:
|
||||||
|
@ -30,6 +36,8 @@ var power: float = 0.0:
|
||||||
var charging_power: bool = false
|
var charging_power: bool = false
|
||||||
var prev_velocity: Vector3 = Vector3.ZERO
|
var prev_velocity: Vector3 = Vector3.ZERO
|
||||||
|
|
||||||
|
var _entered_goal: Node3D = self
|
||||||
|
|
||||||
|
|
||||||
func _ready() -> void:
|
func _ready() -> void:
|
||||||
Input.mouse_mode = Input.MOUSE_MODE_CAPTURED
|
Input.mouse_mode = Input.MOUSE_MODE_CAPTURED
|
||||||
|
@ -57,6 +65,13 @@ func _unhandled_input(event: InputEvent) -> void:
|
||||||
camera_arm.rotation.x = clampf(camera_arm.rotation.x, -camera_high_angle, -camera_low_angle)
|
camera_arm.rotation.x = clampf(camera_arm.rotation.x, -camera_high_angle, -camera_low_angle)
|
||||||
|
|
||||||
|
|
||||||
|
#region Public Functions
|
||||||
|
func enter_goal(goal: GoalPost) -> void:
|
||||||
|
_entered_goal = goal
|
||||||
|
state_chart.send_event(&"goal_entered")
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
|
||||||
#region Charging
|
#region Charging
|
||||||
func _start_charge() -> void:
|
func _start_charge() -> void:
|
||||||
charging_power = true
|
charging_power = true
|
||||||
|
@ -88,13 +103,18 @@ func _apply_gravity(delta: float) -> void:
|
||||||
|
|
||||||
func _slow_to_stop(delta: float) -> void:
|
func _slow_to_stop(delta: float) -> void:
|
||||||
if is_on_floor():
|
if is_on_floor():
|
||||||
var new_velocity = velocity
|
var new_velocity = velocity * Vector3(1.0, 0.0, 1.0)
|
||||||
new_velocity.y = 0.0
|
|
||||||
|
#new_velocity = lerp(new_velocity, Vector3.ZERO, friction_coef * delta)
|
||||||
|
#new_velocity = lerp(
|
||||||
|
#new_velocity, Vector3.ZERO,
|
||||||
|
#power_scale * pow(friction_coef / new_velocity.length(), friction_pow * delta)
|
||||||
|
#)
|
||||||
new_velocity = new_velocity.move_toward(Vector3.ZERO, friction * delta)
|
new_velocity = new_velocity.move_toward(Vector3.ZERO, friction * delta)
|
||||||
if new_velocity.length_squared() <= stop_threshold * stop_threshold:
|
if new_velocity.length_squared() <= stop_threshold * stop_threshold:
|
||||||
new_velocity = Vector3.ZERO
|
new_velocity = Vector3.ZERO
|
||||||
new_velocity.y = velocity.y
|
velocity.x = new_velocity.x
|
||||||
velocity = new_velocity
|
velocity.z = new_velocity.z
|
||||||
|
|
||||||
func _bounce_on_walls(delta: float = 0.0) -> void:
|
func _bounce_on_walls(delta: float = 0.0) -> void:
|
||||||
var h_vel = (prev_velocity * Vector3(1.0, 0.0, 1.0))
|
var h_vel = (prev_velocity * Vector3(1.0, 0.0, 1.0))
|
||||||
|
@ -115,3 +135,17 @@ func _bounce_on_walls(delta: float = 0.0) -> void:
|
||||||
#velocity.x = h_vel.x
|
#velocity.x = h_vel.x
|
||||||
#velocity.z = h_vel.z
|
#velocity.z = h_vel.z
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
|
|
||||||
|
#region Winning
|
||||||
|
func _start_winning() -> void:
|
||||||
|
velocity = Vector3.ZERO
|
||||||
|
prev_velocity = velocity
|
||||||
|
collision_shape.disabled = true
|
||||||
|
|
||||||
|
var tween = create_tween()
|
||||||
|
tween.set_process_mode(Tween.TWEEN_PROCESS_PHYSICS)
|
||||||
|
tween.tween_property(graphics, ^"scale", Vector3.ZERO, goal_animation_time)
|
||||||
|
tween.set_parallel(true)
|
||||||
|
tween.tween_property(graphics, ^"global_position", _entered_goal.global_position, goal_animation_time)
|
||||||
|
#endregion
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
[gd_scene load_steps=15 format=3 uid="uid://cybm74xwbsivx"]
|
[gd_scene load_steps=14 format=3 uid="uid://cybm74xwbsivx"]
|
||||||
|
|
||||||
[ext_resource type="Texture2D" uid="uid://3i17aqnrspma" path="res://assets/textures/player/canny.png" id="1_cp4br"]
|
[ext_resource type="Texture2D" uid="uid://3i17aqnrspma" path="res://assets/textures/player/canny.png" id="1_cp4br"]
|
||||||
[ext_resource type="Script" path="res://objects/canny_cat.gd" id="1_twfq8"]
|
[ext_resource type="Script" path="res://objects/canny_cat.gd" id="1_twfq8"]
|
||||||
|
@ -9,11 +9,8 @@
|
||||||
[ext_resource type="Script" path="res://addons/godot_state_charts/transition.gd" id="7_epv8h"]
|
[ext_resource type="Script" path="res://addons/godot_state_charts/transition.gd" id="7_epv8h"]
|
||||||
[ext_resource type="Script" path="res://addons/godot_state_charts/expression_guard.gd" id="8_d5slg"]
|
[ext_resource type="Script" path="res://addons/godot_state_charts/expression_guard.gd" id="8_d5slg"]
|
||||||
|
|
||||||
[sub_resource type="CylinderShape3D" id="CylinderShape3D_0aipe"]
|
|
||||||
height = 0.25
|
|
||||||
radius = 0.55
|
|
||||||
|
|
||||||
[sub_resource type="SphereShape3D" id="SphereShape3D_4o01j"]
|
[sub_resource type="SphereShape3D" id="SphereShape3D_4o01j"]
|
||||||
|
radius = 0.45
|
||||||
|
|
||||||
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_2xpb7"]
|
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_2xpb7"]
|
||||||
shading_mode = 0
|
shading_mode = 0
|
||||||
|
@ -35,7 +32,7 @@ resource_name = "Not Moving"
|
||||||
script = ExtResource("8_d5slg")
|
script = ExtResource("8_d5slg")
|
||||||
expression = "velocity.is_zero_approx()"
|
expression = "velocity.is_zero_approx()"
|
||||||
|
|
||||||
[node name="CannyCat" type="CharacterBody3D" node_paths=PackedStringArray("state_chart", "power_indicator", "camera_arm", "wall_detector")]
|
[node name="CannyCat" type="CharacterBody3D" node_paths=PackedStringArray("state_chart", "graphics", "power_indicator", "camera_arm", "collision_shape")]
|
||||||
process_priority = -100
|
process_priority = -100
|
||||||
process_physics_priority = -100
|
process_physics_priority = -100
|
||||||
collision_layer = 16
|
collision_layer = 16
|
||||||
|
@ -48,32 +45,40 @@ power_scale = 20.0
|
||||||
power_sensitivity = 0.01
|
power_sensitivity = 0.01
|
||||||
power_threshold = 0.2
|
power_threshold = 0.2
|
||||||
gravity = 10.0
|
gravity = 10.0
|
||||||
friction = 5.0
|
friction = 10.0
|
||||||
|
friction_coef = 0.01
|
||||||
|
friction_pow = 60.0
|
||||||
stop_threshold = 0.1
|
stop_threshold = 0.1
|
||||||
camera_low_angle = 0.349066
|
camera_low_angle = 0.349066
|
||||||
camera_high_angle = 1.0472
|
camera_high_angle = 1.0472
|
||||||
camera_yaw_sensitivity = 0.00872665
|
camera_yaw_sensitivity = 0.00872665
|
||||||
camera_pitch_sensitivity = 0.00872665
|
camera_pitch_sensitivity = 0.00872665
|
||||||
state_chart = NodePath("StateChart")
|
state_chart = NodePath("StateChart")
|
||||||
|
graphics = NodePath("Graphics")
|
||||||
power_indicator = NodePath("PowerIndicator")
|
power_indicator = NodePath("PowerIndicator")
|
||||||
camera_arm = NodePath("CameraArm")
|
camera_arm = NodePath("CameraArm")
|
||||||
wall_detector = NodePath("WallDetector")
|
collision_shape = NodePath("CollisionShape3D")
|
||||||
|
|
||||||
[node name="WallDetector" type="StaticBody3D" parent="."]
|
|
||||||
collision_layer = 0
|
|
||||||
|
|
||||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="WallDetector"]
|
|
||||||
shape = SubResource("CylinderShape3D_0aipe")
|
|
||||||
|
|
||||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="."]
|
[node name="CollisionShape3D" type="CollisionShape3D" parent="."]
|
||||||
shape = SubResource("SphereShape3D_4o01j")
|
shape = SubResource("SphereShape3D_4o01j")
|
||||||
|
|
||||||
[node name="CannySprite" type="Sprite3D" parent="."]
|
[node name="Graphics" type="Node3D" parent="."]
|
||||||
|
|
||||||
|
[node name="CannySprite" type="Sprite3D" parent="Graphics"]
|
||||||
pixel_size = 0.0156
|
pixel_size = 0.0156
|
||||||
billboard = 1
|
billboard = 1
|
||||||
texture_filter = 0
|
texture_filter = 0
|
||||||
texture = ExtResource("1_cp4br")
|
texture = ExtResource("1_cp4br")
|
||||||
|
|
||||||
|
[node name="ShadowArm" type="SpringArm3D" parent="Graphics"]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, -4.37114e-08, -1, 0, 1, -4.37114e-08, 0, -0.25, 0)
|
||||||
|
collision_mask = 7
|
||||||
|
spring_length = 100.0
|
||||||
|
|
||||||
|
[node name="ShadowSprite" type="Sprite3D" parent="Graphics/ShadowArm"]
|
||||||
|
pixel_size = 0.0313
|
||||||
|
texture = ExtResource("2_fwt6m")
|
||||||
|
|
||||||
[node name="PowerIndicator" type="Node3D" parent="."]
|
[node name="PowerIndicator" type="Node3D" parent="."]
|
||||||
visible = false
|
visible = false
|
||||||
|
|
||||||
|
@ -84,15 +89,6 @@ cast_shadow = 0
|
||||||
gi_mode = 0
|
gi_mode = 0
|
||||||
mesh = SubResource("CylinderMesh_b16dl")
|
mesh = SubResource("CylinderMesh_b16dl")
|
||||||
|
|
||||||
[node name="ShadowArm" type="SpringArm3D" parent="."]
|
|
||||||
transform = Transform3D(1, 0, 0, 0, -4.37114e-08, -1, 0, 1, -4.37114e-08, 0, 0, 0)
|
|
||||||
collision_mask = 7
|
|
||||||
spring_length = 100.0
|
|
||||||
|
|
||||||
[node name="ShadowSprite" type="Sprite3D" parent="ShadowArm"]
|
|
||||||
pixel_size = 0.0078
|
|
||||||
texture = ExtResource("2_fwt6m")
|
|
||||||
|
|
||||||
[node name="CameraArm" type="SpringArm3D" parent="."]
|
[node name="CameraArm" type="SpringArm3D" parent="."]
|
||||||
transform = Transform3D(1, 0, 0, 0, 0.5, 0.866025, 0, -0.866025, 0.5, 0, 0, 0)
|
transform = Transform3D(1, 0, 0, 0, 0.5, 0.866025, 0, -0.866025, 0.5, 0, 0, 0)
|
||||||
spring_length = 8.0
|
spring_length = 8.0
|
||||||
|
@ -111,6 +107,12 @@ initial_expression_properties = {
|
||||||
script = ExtResource("5_ox6hb")
|
script = ExtResource("5_ox6hb")
|
||||||
initial_state = NodePath("Moving")
|
initial_state = NodePath("Moving")
|
||||||
|
|
||||||
|
[node name="on GoalEntered" type="Node" parent="StateChart/Root"]
|
||||||
|
script = ExtResource("7_epv8h")
|
||||||
|
to = NodePath("../Winning")
|
||||||
|
event = &"goal_entered"
|
||||||
|
delay_in_seconds = "0.0"
|
||||||
|
|
||||||
[node name="Idle" type="Node" parent="StateChart/Root"]
|
[node name="Idle" type="Node" parent="StateChart/Root"]
|
||||||
script = ExtResource("6_bu01i")
|
script = ExtResource("6_bu01i")
|
||||||
|
|
||||||
|
@ -144,6 +146,9 @@ to = NodePath("../../Moving")
|
||||||
event = &"charge_released"
|
event = &"charge_released"
|
||||||
delay_in_seconds = "0.0"
|
delay_in_seconds = "0.0"
|
||||||
|
|
||||||
|
[node name="Winning" type="Node" parent="StateChart/Root"]
|
||||||
|
script = ExtResource("6_bu01i")
|
||||||
|
|
||||||
[connection signal="state_physics_processing" from="StateChart/Root/Idle" to="." method="_apply_gravity"]
|
[connection signal="state_physics_processing" from="StateChart/Root/Idle" to="." method="_apply_gravity"]
|
||||||
[connection signal="state_physics_processing" from="StateChart/Root/Moving" to="." method="_slow_to_stop"]
|
[connection signal="state_physics_processing" from="StateChart/Root/Moving" to="." method="_slow_to_stop"]
|
||||||
[connection signal="state_physics_processing" from="StateChart/Root/Moving" to="." method="_apply_gravity"]
|
[connection signal="state_physics_processing" from="StateChart/Root/Moving" to="." method="_apply_gravity"]
|
||||||
|
@ -151,3 +156,4 @@ delay_in_seconds = "0.0"
|
||||||
[connection signal="state_entered" from="StateChart/Root/Charging" to="." method="_start_charge"]
|
[connection signal="state_entered" from="StateChart/Root/Charging" to="." method="_start_charge"]
|
||||||
[connection signal="state_exited" from="StateChart/Root/Charging" to="." method="_end_charge"]
|
[connection signal="state_exited" from="StateChart/Root/Charging" to="." method="_end_charge"]
|
||||||
[connection signal="state_physics_processing" from="StateChart/Root/Charging" to="." method="_update_charge"]
|
[connection signal="state_physics_processing" from="StateChart/Root/Charging" to="." method="_update_charge"]
|
||||||
|
[connection signal="state_entered" from="StateChart/Root/Winning" to="." method="_start_winning"]
|
||||||
|
|
7
objects/goal_post.gd
Normal file
7
objects/goal_post.gd
Normal file
|
@ -0,0 +1,7 @@
|
||||||
|
class_name GoalPost
|
||||||
|
extends Node3D
|
||||||
|
|
||||||
|
|
||||||
|
func _on_player_detector_body_entered(body: Node3D) -> void:
|
||||||
|
if body is Player:
|
||||||
|
body.enter_goal(self)
|
70
objects/goal_post.tscn
Normal file
70
objects/goal_post.tscn
Normal file
|
@ -0,0 +1,70 @@
|
||||||
|
[gd_scene load_steps=9 format=3 uid="uid://cdpgby3r6xe4n"]
|
||||||
|
|
||||||
|
[ext_resource type="Script" path="res://objects/goal_post.gd" id="1_08x2x"]
|
||||||
|
[ext_resource type="Shader" path="res://assets/shaders/flag.gdshader" id="2_xbid5"]
|
||||||
|
[ext_resource type="Texture2D" uid="uid://cyxkbck2gs2wt" path="res://assets/textures/objects/goal_hole.png" id="3_yg6kd"]
|
||||||
|
|
||||||
|
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_e2vbu"]
|
||||||
|
shading_mode = 2
|
||||||
|
albedo_color = Color(0.196078, 0.235294, 0.223529, 1)
|
||||||
|
metallic_specular = 0.0
|
||||||
|
|
||||||
|
[sub_resource type="CylinderMesh" id="CylinderMesh_i27ie"]
|
||||||
|
material = SubResource("StandardMaterial3D_e2vbu")
|
||||||
|
top_radius = 0.1
|
||||||
|
bottom_radius = 0.1
|
||||||
|
height = 4.0
|
||||||
|
radial_segments = 6
|
||||||
|
rings = 8
|
||||||
|
|
||||||
|
[sub_resource type="ShaderMaterial" id="ShaderMaterial_3urv4"]
|
||||||
|
render_priority = 0
|
||||||
|
shader = ExtResource("2_xbid5")
|
||||||
|
shader_parameter/color_bright = Color(1, 0.290196, 0.356863, 1)
|
||||||
|
shader_parameter/color_dark = Color(0.870588, 0.156863, 0.223529, 1)
|
||||||
|
shader_parameter/pivot = 2.0
|
||||||
|
shader_parameter/pivot_speed = 1.0
|
||||||
|
shader_parameter/waves = 6.0
|
||||||
|
shader_parameter/wave_speed = 5.0
|
||||||
|
shader_parameter/wave_scale = 0.25
|
||||||
|
|
||||||
|
[sub_resource type="QuadMesh" id="QuadMesh_mfpmh"]
|
||||||
|
material = SubResource("ShaderMaterial_3urv4")
|
||||||
|
size = Vector2(2, 1)
|
||||||
|
subdivide_width = 6
|
||||||
|
center_offset = Vector3(1, 0, 0)
|
||||||
|
|
||||||
|
[sub_resource type="CylinderShape3D" id="CylinderShape3D_eshe3"]
|
||||||
|
height = 0.5
|
||||||
|
|
||||||
|
[node name="GoalPost" type="Node3D"]
|
||||||
|
script = ExtResource("1_08x2x")
|
||||||
|
|
||||||
|
[node name="Graphics" type="Node3D" parent="."]
|
||||||
|
|
||||||
|
[node name="Pole" type="MeshInstance3D" parent="Graphics"]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 2, 0)
|
||||||
|
mesh = SubResource("CylinderMesh_i27ie")
|
||||||
|
|
||||||
|
[node name="Flag" type="MeshInstance3D" parent="Graphics"]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 3.5, 0)
|
||||||
|
mesh = SubResource("QuadMesh_mfpmh")
|
||||||
|
|
||||||
|
[node name="Sprite3D" type="Sprite3D" parent="Graphics"]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.01, 0)
|
||||||
|
pixel_size = 0.0313
|
||||||
|
axis = 1
|
||||||
|
alpha_cut = 2
|
||||||
|
texture_filter = 0
|
||||||
|
texture = ExtResource("3_yg6kd")
|
||||||
|
|
||||||
|
[node name="PlayerDetector" type="Area3D" parent="."]
|
||||||
|
collision_layer = 0
|
||||||
|
collision_mask = 16
|
||||||
|
monitorable = false
|
||||||
|
|
||||||
|
[node name="CollisionShape3D" type="CollisionShape3D" parent="PlayerDetector"]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.25, 0)
|
||||||
|
shape = SubResource("CylinderShape3D_eshe3")
|
||||||
|
|
||||||
|
[connection signal="body_entered" from="PlayerDetector" to="." method="_on_player_detector_body_entered"]
|
30
objects/sand_pit.gd
Normal file
30
objects/sand_pit.gd
Normal file
|
@ -0,0 +1,30 @@
|
||||||
|
extends CSGPolygon3D
|
||||||
|
|
||||||
|
|
||||||
|
@export var friction: float
|
||||||
|
|
||||||
|
@export_group("Node References")
|
||||||
|
@export var collision_polygon: CollisionPolygon3D
|
||||||
|
|
||||||
|
|
||||||
|
var _players: Array[Player] = []
|
||||||
|
|
||||||
|
|
||||||
|
func _ready() -> void:
|
||||||
|
collision_polygon.polygon = polygon
|
||||||
|
collision_polygon.depth = depth
|
||||||
|
|
||||||
|
|
||||||
|
func _physics_process(delta: float) -> void:
|
||||||
|
for player in _players:
|
||||||
|
player.velocity = lerp(player.velocity, Vector3.ZERO, friction * delta)
|
||||||
|
|
||||||
|
|
||||||
|
func _on_body_entered(body: Node3D) -> void:
|
||||||
|
if body is Player:
|
||||||
|
_players.append(body)
|
||||||
|
|
||||||
|
|
||||||
|
func _on_body_exited(body: Node3D) -> void:
|
||||||
|
if body is Player:
|
||||||
|
_players.erase(body)
|
31
objects/sand_pit.tscn
Normal file
31
objects/sand_pit.tscn
Normal file
|
@ -0,0 +1,31 @@
|
||||||
|
[gd_scene load_steps=4 format=3 uid="uid://bfic5n608nc5j"]
|
||||||
|
|
||||||
|
[ext_resource type="Texture2D" uid="uid://djx2x3jjn01w2" path="res://assets/textures/world/sand.png" id="1_yg8om"]
|
||||||
|
[ext_resource type="Script" path="res://objects/sand_pit.gd" id="2_vtyum"]
|
||||||
|
|
||||||
|
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_r0cip"]
|
||||||
|
shading_mode = 2
|
||||||
|
specular_mode = 2
|
||||||
|
albedo_texture = ExtResource("1_yg8om")
|
||||||
|
metallic_specular = 0.0
|
||||||
|
uv1_triplanar = true
|
||||||
|
uv1_world_triplanar = true
|
||||||
|
texture_filter = 0
|
||||||
|
|
||||||
|
[node name="SandPit" type="CSGPolygon3D" node_paths=PackedStringArray("collision_polygon")]
|
||||||
|
process_physics_priority = 100
|
||||||
|
transform = Transform3D(1, 0, 0, 0, -4.37114e-08, -1, 0, 1, -4.37114e-08, 0, 0, 0)
|
||||||
|
depth = 0.03
|
||||||
|
material = SubResource("StandardMaterial3D_r0cip")
|
||||||
|
script = ExtResource("2_vtyum")
|
||||||
|
friction = 9.0
|
||||||
|
collision_polygon = NodePath("Area3D/CollisionPolygon3D")
|
||||||
|
|
||||||
|
[node name="Area3D" type="Area3D" parent="."]
|
||||||
|
collision_layer = 0
|
||||||
|
collision_mask = 16
|
||||||
|
|
||||||
|
[node name="CollisionPolygon3D" type="CollisionPolygon3D" parent="Area3D"]
|
||||||
|
|
||||||
|
[connection signal="body_entered" from="Area3D" to="." method="_on_body_entered"]
|
||||||
|
[connection signal="body_exited" from="Area3D" to="." method="_on_body_exited"]
|
|
@ -19,7 +19,7 @@ config/icon="res://icon.svg"
|
||||||
|
|
||||||
window/size/viewport_width=320
|
window/size/viewport_width=320
|
||||||
window/size/viewport_height=240
|
window/size/viewport_height=240
|
||||||
window/stretch/mode="viewport"
|
window/stretch/mode="canvas_items"
|
||||||
|
|
||||||
[editor_plugins]
|
[editor_plugins]
|
||||||
|
|
||||||
|
@ -29,6 +29,10 @@ enabled=PackedStringArray("res://addons/godot_state_charts/plugin.cfg")
|
||||||
|
|
||||||
import/blender/enabled=false
|
import/blender/enabled=false
|
||||||
|
|
||||||
|
[global_group]
|
||||||
|
|
||||||
|
friction_floor=""
|
||||||
|
|
||||||
[input]
|
[input]
|
||||||
|
|
||||||
charge_shot={
|
charge_shot={
|
||||||
|
|
|
@ -1,11 +1,10 @@
|
||||||
[gd_scene load_steps=8 format=3 uid="uid://dllug6vijj18o"]
|
[gd_scene load_steps=9 format=3 uid="uid://dllug6vijj18o"]
|
||||||
|
|
||||||
[ext_resource type="PackedScene" uid="uid://cybm74xwbsivx" path="res://objects/canny_cat.tscn" id="1_8qiqb"]
|
[ext_resource type="PackedScene" uid="uid://cybm74xwbsivx" path="res://objects/canny_cat.tscn" id="1_8qiqb"]
|
||||||
[ext_resource type="MeshLibrary" uid="uid://cbs170roel08g" path="res://assets/mesh_libraries/w1/w1_floors.meshlib" id="2_ohutf"]
|
[ext_resource type="MeshLibrary" uid="uid://cbs170roel08g" path="res://assets/mesh_libraries/w1/w1_floors.meshlib" id="2_ohutf"]
|
||||||
[ext_resource type="MeshLibrary" uid="uid://bqxgr3arh0i7f" path="res://assets/mesh_libraries/w1/w1_walls.meshlib" id="3_k3r2h"]
|
[ext_resource type="MeshLibrary" uid="uid://bqxgr3arh0i7f" path="res://assets/mesh_libraries/w1/w1_walls.meshlib" id="3_k3r2h"]
|
||||||
|
[ext_resource type="PackedScene" uid="uid://cdpgby3r6xe4n" path="res://objects/goal_post.tscn" id="4_71ems"]
|
||||||
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_81x51"]
|
[ext_resource type="PackedScene" uid="uid://bfic5n608nc5j" path="res://objects/sand_pit.tscn" id="5_7n16u"]
|
||||||
albedo_color = Color(0.305715, 0.658195, 0.299865, 1)
|
|
||||||
|
|
||||||
[sub_resource type="ProceduralSkyMaterial" id="ProceduralSkyMaterial_akirf"]
|
[sub_resource type="ProceduralSkyMaterial" id="ProceduralSkyMaterial_akirf"]
|
||||||
|
|
||||||
|
@ -18,12 +17,6 @@ sky = SubResource("Sky_f657k")
|
||||||
|
|
||||||
[node name="TestScene" type="Node3D"]
|
[node name="TestScene" type="Node3D"]
|
||||||
|
|
||||||
[node name="CSGBox3D" type="CSGBox3D" parent="."]
|
|
||||||
transform = Transform3D(1, 0, 0, 0, 0.983766, -0.179455, 0, 0.179455, 0.983766, 0, -1.59434, 7.28085)
|
|
||||||
use_collision = true
|
|
||||||
size = Vector3(20, 0.5, 20)
|
|
||||||
material = SubResource("StandardMaterial3D_81x51")
|
|
||||||
|
|
||||||
[node name="DirectionalLight3D" type="DirectionalLight3D" parent="."]
|
[node name="DirectionalLight3D" type="DirectionalLight3D" parent="."]
|
||||||
transform = Transform3D(0.893065, 0.251134, -0.373318, 0, 0.82973, 0.558165, 0.449927, -0.498478, 0.741003, 0, 3.18312, 0)
|
transform = Transform3D(0.893065, 0.251134, -0.373318, 0, 0.82973, 0.558165, 0.449927, -0.498478, 0.741003, 0, 3.18312, 0)
|
||||||
light_energy = 1.5
|
light_energy = 1.5
|
||||||
|
@ -34,7 +27,7 @@ mesh_library = ExtResource("2_ohutf")
|
||||||
cell_size = Vector3(1, 1, 1)
|
cell_size = Vector3(1, 1, 1)
|
||||||
cell_center_y = false
|
cell_center_y = false
|
||||||
data = {
|
data = {
|
||||||
"cells": PackedInt32Array(0, 0, 0, 0, 65535, 0, 65535, 65535, 0, 65535, 0, 0, 65534, 0, 0, 65534, 65535, 0, 65534, 65534, 0, 65535, 65534, 0, 0, 65534, 0, 1, 65534, 0, 1, 65535, 0, 1, 0, 0, 0, 1, 0, 65535, 1, 0, 65534, 1, 0, 1, 1, 0, 1, 2, 0, 0, 2, 0, 65535, 2, 0, 65534, 2, 0, 65533, 2, 0, 65533, 1, 0, 65533, 0, 0, 65533, 65535, 0, 65533, 65534, 0, 65533, 65533, 0, 65534, 65533, 0, 1, 65533, 0, 2, 65533, 0, 0, 65533, 0, 65535, 65533, 0, 2, 65534, 0, 2, 65535, 0, 2, 0, 0, 2, 1, 0, 3, 2, 0, 3, 1, 0, 3, 0, 0, 3, 65535, 0, 4, 65535, 0, 4, 65534, 1, 3, 65532, 0, 3, 65534, 0, 2, 65532, 0, 1, 65532, 0, 0, 65532, 0, 65535, 65532, 0, 65534, 65532, 0, 65533, 65532, 0, 65532, 65532, 0, 65532, 65533, 0, 65532, 65534, 0, 65532, 65535, 0, 65532, 1, 0, 65532, 0, 0, 65532, 2, 0, 65532, 3, 0, 65533, 3, 0, 65534, 3, 0, 65535, 3, 0, 1, 3, 0, 2, 3, 0, 3, 3, 0, 0, 3, 0, 4, 3, 0, 4, 2, 0, 4, 1, 0, 4, 0, 0, 2, 2, 0, 5, 4, 0, 4, 4, 0, 3, 4, 0, 2, 4, 0, 1, 4, 0, 0, 4, 0, 0, 5, 0, 65535, 5, 0, 65534, 5, 0, 65533, 5, 0, 65533, 4, 0, 65532, 4, 0, 65534, 4, 0, 65535, 4, 0, 3, 5, 0, 4, 5, 0, 5, 5, 0, 2, 5, 0, 1, 5, 0, 65532, 5, 0, 65531, 5, 0, 65531, 4, 0, 65531, 3, 0, 65531, 2, 0, 65531, 1, 0, 65530, 1, 0, 65530, 0, 0, 65530, 65535, 0, 65530, 65534, 0, 65530, 65533, 0, 65531, 65534, 0, 65531, 65535, 0, 65531, 0, 0, 65531, 65533, 0, 65531, 65532, 0, 65531, 65531, 0, 65532, 65531, 0, 65533, 65531, 0, 65534, 65531, 0, 65535, 65531, 0, 0, 65531, 0, 1, 65531, 0, 2, 65531, 0, 2, 65530, 0, 3, 65530, 0, 3, 65531, 0, 6, 65531, 0, 5, 65532, 1, 5, 65533, 1, 5, 65534, 1, 5, 65535, 1, 5, 1, 0, 5, 2, 0, 5, 3, 0, 6, 0, 0, 6, 65535, 0, 6, 65534, 0, 6, 65533, 1, 6, 65532, 1, 5, 0, 0, 7, 65535, 0, 7, 65534, 0, 8, 65533, 0, 8, 65534, 0, 7, 0, 0, 6, 1, 0, 6, 2, 0, 6, 4, 0, 6, 3, 0, 7, 2, 0, 7, 1, 0, 8, 1, 0, 8, 0, 0, 5, 65531, 1, 4, 65531, 1, 4, 65532, 1, 4, 65533, 1, 3, 65533, 1)
|
"cells": PackedInt32Array(0, 65535, 0, 65535, 65535, 0, 65535, 0, 1441792, 65534, 0, 0, 65534, 65535, 0, 65534, 65534, 0, 65535, 65534, 0, 0, 65534, 0, 1, 65534, 0, 1, 65535, 0, 1, 0, 1441792, 65535, 1, 0, 65534, 1, 0, 1, 2, 0, 0, 2, 0, 65535, 2, 0, 65534, 2, 0, 65533, 2, 0, 65533, 1, 0, 65533, 0, 0, 65533, 65535, 0, 65533, 65534, 0, 65533, 65533, 0, 65534, 65533, 0, 0, 65533, 0, 65535, 65533, 0, 2, 1, 1441792, 3, 2, 0, 3, 1, 0, 0, 65532, 0, 65535, 65532, 0, 65534, 65532, 0, 65533, 65532, 0, 65532, 65532, 0, 65532, 65533, 0, 65532, 65534, 0, 65532, 65535, 0, 65532, 1, 0, 65532, 0, 0, 65532, 2, 0, 65532, 3, 0, 65533, 3, 0, 65534, 3, 0, 65535, 3, 0, 1, 3, 0, 2, 3, 0, 3, 3, 0, 0, 3, 0, 4, 3, 0, 4, 2, 0, 4, 1, 0, 2, 2, 0, 5, 4, 0, 4, 4, 0, 3, 4, 0, 2, 4, 0, 1, 4, 0, 0, 4, 0, 0, 5, 0, 65535, 5, 0, 65534, 5, 0, 65533, 5, 0, 65533, 4, 0, 65532, 4, 0, 65534, 4, 0, 65535, 4, 0, 3, 5, 0, 4, 5, 0, 5, 5, 0, 2, 5, 0, 1, 5, 0, 65532, 5, 0, 65531, 5, 0, 65531, 4, 0, 65531, 3, 0, 65531, 2, 0, 65531, 1, 0, 65530, 1, 0, 65530, 0, 0, 65530, 65535, 0, 65530, 65534, 0, 65530, 65533, 0, 65531, 65534, 0, 65531, 65535, 0, 65531, 0, 0, 65531, 65533, 0, 65531, 65532, 0, 65531, 65531, 0, 65532, 65531, 0, 65533, 65531, 0, 65534, 65531, 0, 65535, 65531, 0, 0, 65531, 0, 6, 65531, 0, 5, 1, 0, 5, 2, 0, 5, 3, 0, 6, 0, 0, 6, 65535, 0, 6, 65534, 0, 5, 0, 0, 7, 65535, 0, 7, 65534, 0, 8, 65533, 0, 8, 65534, 0, 7, 0, 0, 6, 1, 0, 6, 2, 0, 6, 4, 0, 6, 3, 0, 7, 2, 0, 7, 1, 0, 8, 1, 0, 8, 0, 0, 1, 1, 1441792, 0, 1, 1441792, 3, 0, 1441792, 4, 0, 1441792, 4, 65535, 1441792, 3, 65535, 1441792, 2, 65534, 1441792, 2, 65533, 1441792, 1, 65533, 1441792, 1, 65532, 1441792, 1, 65531, 1441792, 2, 65531, 1441792, 2, 65530, 1441792, 3, 65530, 1441792, 3, 65531, 1441792, 2, 65532, 1441792, 4, 65532, 1441792, 4, 65531, 1441792, 5, 65531, 1441792, 5, 65532, 1441792, 5, 65533, 1441792, 5, 65534, 1441792, 5, 65535, 1441792, 4, 65534, 1441792, 4, 65533, 1441792, 6, 65533, 1441792, 6, 65532, 1441792, 3, 65532, 1441792, 3, 65533, 1441792, 3, 65534, 1441792, 2, 65535, 1441792, 2, 0, 1441792, 0, 0, 1441792)
|
||||||
}
|
}
|
||||||
metadata/_editor_floor_ = Vector3(0, 0, 0)
|
metadata/_editor_floor_ = Vector3(0, 0, 0)
|
||||||
|
|
||||||
|
@ -43,7 +36,7 @@ mesh_library = ExtResource("3_k3r2h")
|
||||||
cell_size = Vector3(1, 1, 1)
|
cell_size = Vector3(1, 1, 1)
|
||||||
cell_center_y = false
|
cell_center_y = false
|
||||||
data = {
|
data = {
|
||||||
"cells": PackedInt32Array(65531, 65530, 0, 65532, 65530, 0, 65533, 65530, 0, 65534, 65530, 0, 65535, 65530, 0, 0, 65530, 0, 1, 65530, 0, 65530, 65530, 0, 65530, 65531, 0, 65530, 65532, 0, 65529, 65531, 0, 65529, 65532, 0, 65529, 65533, 0, 65529, 65534, 0, 65529, 65535, 0, 65529, 0, 0, 65529, 1, 0, 65529, 2, 0, 65530, 2, 0, 2, 65529, 1441792, 3, 65529, 1441792, 4, 65529, 1441792, 4, 65530, 1441792, 5, 65530, 1441792, 6, 65530, 1441792, 7, 65530, 1441792, 7, 65531, 1441792, 7, 65532, 1441792, 7, 65533, 1441792, 8, 65532, 1441792, 9, 65532, 1441792, 9, 65533, 1441792, 9, 65534, 1441792, 9, 65535, 1441792, 9, 0, 1441792, 8, 65535, 1441792, 9, 1, 1441792, 9, 2, 1441792, 8, 2, 1441792, 8, 3, 1441792, 7, 3, 1441792, 7, 4, 1441792, 7, 5, 1441792, 6, 5, 1441792, 6, 6, 1441792, 5, 6, 1441792, 4, 6, 1441792, 3, 6, 1441792, 2, 6, 1441792, 1, 6, 1441792, 0, 6, 1441792, 65535, 6, 1441792, 65534, 6, 1441792, 65533, 6, 1441792, 65532, 6, 1441792, 65531, 6, 1441792, 65530, 6, 1441792, 65530, 5, 1441792, 65530, 4, 1441792, 65530, 3, 1441792, 1, 65529, 1441792, 8, 65531, 0, 6, 65531, 0, 6, 65534, 0, 5, 0, 0)
|
"cells": PackedInt32Array(65531, 65530, 0, 65532, 65530, 0, 65533, 65530, 0, 65534, 65530, 0, 65535, 65530, 0, 0, 65530, 0, 1, 65530, 0, 65530, 65530, 0, 65530, 65531, 0, 65530, 65532, 0, 65529, 65531, 0, 65529, 65532, 0, 65529, 65533, 0, 65529, 65534, 0, 65529, 65535, 0, 65529, 0, 0, 65529, 1, 0, 65529, 2, 0, 65530, 2, 0, 2, 65529, 1441792, 3, 65529, 1441792, 4, 65529, 1441792, 4, 65530, 1441792, 5, 65530, 1441792, 6, 65530, 1441792, 7, 65530, 1441792, 7, 65532, 1441792, 7, 65533, 1441792, 8, 65532, 1441792, 9, 65532, 1441792, 9, 65533, 1441792, 9, 65534, 1441792, 9, 65535, 1441792, 9, 0, 1441792, 8, 65535, 1441792, 9, 1, 1441792, 9, 2, 1441792, 8, 2, 1441792, 8, 3, 1441792, 7, 3, 1441792, 7, 4, 1441792, 7, 5, 1441792, 6, 5, 1441792, 6, 6, 1441792, 5, 6, 1441792, 4, 6, 1441792, 3, 6, 1441792, 2, 6, 1441792, 1, 6, 1441792, 0, 6, 1441792, 65535, 6, 1441792, 65534, 6, 1441792, 65533, 6, 1441792, 65532, 6, 1441792, 65531, 6, 1441792, 65530, 6, 1441792, 65530, 5, 1441792, 65530, 4, 1441792, 65530, 3, 1441792, 1, 65529, 1441792, 6, 65534, 0, 5, 0, 0, 7, 65531, 1441792, 6, 65531, 1441792)
|
||||||
}
|
}
|
||||||
metadata/_editor_floor_ = Vector3(0, 0, 0)
|
metadata/_editor_floor_ = Vector3(0, 0, 0)
|
||||||
|
|
||||||
|
@ -51,4 +44,11 @@ metadata/_editor_floor_ = Vector3(0, 0, 0)
|
||||||
environment = SubResource("Environment_0oogp")
|
environment = SubResource("Environment_0oogp")
|
||||||
|
|
||||||
[node name="CannyCat" parent="." instance=ExtResource("1_8qiqb")]
|
[node name="CannyCat" parent="." instance=ExtResource("1_8qiqb")]
|
||||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.544784, 5.5043)
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.926551, 3.63641)
|
||||||
|
|
||||||
|
[node name="GoalPost" parent="." instance=ExtResource("4_71ems")]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -2, -2.38419e-07, -4)
|
||||||
|
|
||||||
|
[node name="CSGPolygon3D" parent="." instance=ExtResource("5_7n16u")]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, -4.37114e-08, -1, 0, 1, -4.37114e-08, 2, 0, -4)
|
||||||
|
polygon = PackedVector2Array(0, -1, 1, -1, 3, 0, 3, 2, 2, 3, -1, 2, -2, 0)
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue