From 35f17991e8dafe9693a8f4f899c325324f22d78d Mon Sep 17 00:00:00 2001 From: AmyLillya Date: Sun, 3 Sep 2023 11:32:48 -0300 Subject: [PATCH] add project --- .gitattributes | 2 + .gitignore | 2 + Ball/Meshes/ball_bouncing.glb | Bin 0 -> 36812 bytes Ball/Meshes/ball_bouncing.glb.import | 39 ++++++++++++++ Ball/Meshes/ball_flying.glb | Bin 0 -> 36848 bytes Ball/Meshes/ball_flying.glb.import | 39 ++++++++++++++ Ball/Meshes/ball_material.tres | 11 ++++ Ball/Meshes/ball_shader.gdshader | 18 +++++++ Ball/Meshes/ball_visual_shader.tres | 63 ++++++++++++++++++++++ Ball/bal42CA.tmp | 35 ++++++++++++ Ball/bal6D7B.tmp | 36 +++++++++++++ Ball/balA3FF.tmp | 40 ++++++++++++++ Ball/ball.gd | 62 +++++++++++++++++++++ Ball/ball.tscn | 36 +++++++++++++ Ball/ball_mesh_bouncing.tscn | 5 ++ Ball/ball_meshes.gd | 77 ++++++++++++++++++++++++++ Misc/64x64_orange_grey.png | Bin 0 -> 612 bytes Misc/64x64_orange_grey.png.import | 35 ++++++++++++ Misc/debug_cone.gd | 11 ++++ Misc/matcap_wobbly.png | Bin 0 -> 24496 bytes Misc/matcap_wobbly.png.import | 35 ++++++++++++ Player/player.gd | 56 +++++++++++++++++++ Player/player.tscn | 34 ++++++++++++ Player/player_camera_basis.gd | 8 +++ Player/shooter.gd | 15 ++++++ World/worD3C3.tmp | 62 +++++++++++++++++++++ World/world.tscn | 78 +++++++++++++++++++++++++++ icon.svg | 1 + icon.svg.import | 37 +++++++++++++ project.godot | 56 +++++++++++++++++++ 30 files changed, 893 insertions(+) create mode 100644 .gitattributes create mode 100644 .gitignore create mode 100644 Ball/Meshes/ball_bouncing.glb create mode 100644 Ball/Meshes/ball_bouncing.glb.import create mode 100644 Ball/Meshes/ball_flying.glb create mode 100644 Ball/Meshes/ball_flying.glb.import create mode 100644 Ball/Meshes/ball_material.tres create mode 100644 Ball/Meshes/ball_shader.gdshader create mode 100644 Ball/Meshes/ball_visual_shader.tres create mode 100644 Ball/bal42CA.tmp create mode 100644 Ball/bal6D7B.tmp create mode 100644 Ball/balA3FF.tmp create mode 100644 Ball/ball.gd create mode 100644 Ball/ball.tscn create mode 100644 Ball/ball_mesh_bouncing.tscn create mode 100644 Ball/ball_meshes.gd create mode 100644 Misc/64x64_orange_grey.png create mode 100644 Misc/64x64_orange_grey.png.import create mode 100644 Misc/debug_cone.gd create mode 100644 Misc/matcap_wobbly.png create mode 100644 Misc/matcap_wobbly.png.import create mode 100644 Player/player.gd create mode 100644 Player/player.tscn create mode 100644 Player/player_camera_basis.gd create mode 100644 Player/shooter.gd create mode 100644 World/worD3C3.tmp create mode 100644 World/world.tscn create mode 100644 icon.svg create mode 100644 icon.svg.import create mode 100644 project.godot diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..8ad74f7 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,2 @@ +# Normalize EOL for all files that Git considers text files. +* text=auto eol=lf diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..4709183 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +# Godot 4+ specific ignores +.godot/ diff --git a/Ball/Meshes/ball_bouncing.glb b/Ball/Meshes/ball_bouncing.glb new file mode 100644 index 0000000000000000000000000000000000000000..60a66806a94cc35bdf06b6070911894d5f5b86e5 GIT binary patch literal 36812 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 literal 0 HcmV?d00001 diff --git a/Ball/Meshes/ball_flying.glb.import b/Ball/Meshes/ball_flying.glb.import new file mode 100644 index 0000000..889951c --- /dev/null +++ b/Ball/Meshes/ball_flying.glb.import @@ -0,0 +1,39 @@ +[remap] + +importer="scene" +importer_version=1 +type="PackedScene" +uid="uid://b1embyb2knvho" +path="res://.godot/imported/ball_flying.glb-2e72ac9d7b4b8b2e6357f34d6db76d73.scn" + +[deps] + +source_file="res://Ball/Meshes/ball_flying.glb" +dest_files=["res://.godot/imported/ball_flying.glb-2e72ac9d7b4b8b2e6357f34d6db76d73.scn"] + +[params] + +nodes/root_type="Node3D" +nodes/root_name="Scene Root" +nodes/apply_root_scale=true +nodes/root_scale=1.0 +meshes/ensure_tangents=true +meshes/generate_lods=true +meshes/create_shadow_meshes=true +meshes/light_baking=1 +meshes/lightmap_texel_size=0.2 +skins/use_named_skins=true +animation/import=false +animation/fps=30 +animation/trimming=false +animation/remove_immutable_tracks=true +import_script/path="" +_subresources={ +"materials": { +"Projectile": { +"use_external/enabled": true, +"use_external/path": "res://Ball/Meshes/ball_material.tres" +} +} +} +gltf/embedded_image_handling=1 diff --git a/Ball/Meshes/ball_material.tres b/Ball/Meshes/ball_material.tres new file mode 100644 index 0000000..176674e --- /dev/null +++ b/Ball/Meshes/ball_material.tres @@ -0,0 +1,11 @@ +[gd_resource type="ShaderMaterial" load_steps=3 format=3 uid="uid://ccktnp41cys0r"] + +[ext_resource type="Shader" path="res://Ball/Meshes/ball_shader.gdshader" id="1_kfvtm"] +[ext_resource type="Texture2D" uid="uid://7xvwnxdwlypg" path="res://Misc/matcap_wobbly.png" id="2_o5lk5"] + +[resource] +render_priority = 0 +shader = ExtResource("1_kfvtm") +shader_parameter/intensity = 1.0 +shader_parameter/color = Color(0.333333, 0.545098, 0.976471, 0.862745) +shader_parameter/matcap = ExtResource("2_o5lk5") diff --git a/Ball/Meshes/ball_shader.gdshader b/Ball/Meshes/ball_shader.gdshader new file mode 100644 index 0000000..fa6b558 --- /dev/null +++ b/Ball/Meshes/ball_shader.gdshader @@ -0,0 +1,18 @@ +/* + MatCap Shader by Firerabbit + + MIT License +*/ + +shader_type spatial; + +uniform sampler2D matcap : source_color, hint_default_black; +uniform float intensity : hint_range(0.0,1.0) = 1.0; +uniform vec4 color : source_color = vec4(1.0); + +void fragment() { + vec2 matcap_uv = (NORMAL.xy * vec2(0.5, -0.5) + vec2(0.5, 0.5)); + ALBEDO = color.rgb; + ALBEDO *= mix(vec3(1.0), texture(matcap, matcap_uv).rgb, intensity); + ALPHA = color.a; +} \ No newline at end of file diff --git a/Ball/Meshes/ball_visual_shader.tres b/Ball/Meshes/ball_visual_shader.tres new file mode 100644 index 0000000..8b469b4 --- /dev/null +++ b/Ball/Meshes/ball_visual_shader.tres @@ -0,0 +1,63 @@ +[gd_resource type="VisualShader" load_steps=9 format=3 uid="uid://ny01m62ohegv"] + +[sub_resource type="VisualShaderNodeVectorOp" id="VisualShaderNodeVectorOp_sbl4o"] +operator = 8 + +[sub_resource type="VisualShaderNodeVectorCompose" id="VisualShaderNodeVectorCompose_7ys52"] +default_input_values = [0, 0.0, 1, 0.0, 2, 1.0] + +[sub_resource type="VisualShaderNodeVectorDecompose" id="VisualShaderNodeVectorDecompose_o0c6e"] +default_input_values = [0, Vector2(0, 0)] +op_type = 0 + +[sub_resource type="VisualShaderNodeInput" id="VisualShaderNodeInput_5rytf"] +input_name = "screen_uv" + +[sub_resource type="VisualShaderNodeVectorOp" id="VisualShaderNodeVectorOp_nwrdd"] +default_input_values = [0, Vector2(0, 0), 1, Vector2(0.5, 0.5)] +op_type = 0 +operator = 1 + +[sub_resource type="VisualShaderNodeVectorFunc" id="VisualShaderNodeVectorFunc_711ug"] + +[sub_resource type="VisualShaderNodeInput" id="VisualShaderNodeInput_fou4c"] +input_name = "normal" + +[sub_resource type="VisualShaderNodeVectorOp" id="VisualShaderNodeVectorOp_2wva2"] +operator = 2 + +[resource] +code = "shader_type spatial; +render_mode blend_mix, depth_draw_opaque, cull_back, diffuse_lambert, specular_schlick_ggx; + + + + +void fragment() { +// Input:7 + vec3 n_out7p0 = NORMAL; + + +// Output:0 + ALBEDO = n_out7p0; + + +} +" +nodes/fragment/3/node = SubResource("VisualShaderNodeInput_5rytf") +nodes/fragment/3/position = Vector2(-1780, 340) +nodes/fragment/5/node = SubResource("VisualShaderNodeVectorOp_nwrdd") +nodes/fragment/5/position = Vector2(-1480, 400) +nodes/fragment/6/node = SubResource("VisualShaderNodeVectorFunc_711ug") +nodes/fragment/6/position = Vector2(-920, 400) +nodes/fragment/7/node = SubResource("VisualShaderNodeInput_fou4c") +nodes/fragment/7/position = Vector2(-880, 200) +nodes/fragment/9/node = SubResource("VisualShaderNodeVectorOp_2wva2") +nodes/fragment/9/position = Vector2(-400, 200) +nodes/fragment/10/node = SubResource("VisualShaderNodeVectorOp_sbl4o") +nodes/fragment/10/position = Vector2(-200, 260) +nodes/fragment/11/node = SubResource("VisualShaderNodeVectorCompose_7ys52") +nodes/fragment/11/position = Vector2(-1120, 400) +nodes/fragment/12/node = SubResource("VisualShaderNodeVectorDecompose_o0c6e") +nodes/fragment/12/position = Vector2(-1320, 400) +nodes/fragment/connections = PackedInt32Array(3, 0, 5, 0, 7, 0, 9, 0, 9, 0, 10, 0, 6, 0, 10, 1, 5, 0, 11, 0, 5, 0, 12, 0, 12, 1, 11, 1, 11, 0, 6, 0, 3, 0, 9, 1, 7, 0, 0, 0) diff --git a/Ball/bal42CA.tmp b/Ball/bal42CA.tmp new file mode 100644 index 0000000..5062c96 --- /dev/null +++ b/Ball/bal42CA.tmp @@ -0,0 +1,35 @@ +[gd_scene load_steps=5 format=3 uid="uid://rdlvlyf0l1l"] + +[ext_resource type="Script" path="res://Ball/ball.gd" id="1_oenn5"] + +[sub_resource type="BoxShape3D" id="BoxShape3D_b4pqe"] +size = Vector3(0.5, 0.5, 0.5) + +[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_tdblm"] +albedo_color = Color(0.117647, 0.427451, 0.611765, 1) +roughness = 0.42 + +[sub_resource type="SphereMesh" id="SphereMesh_mq1q1"] +radius = 0.3 +height = 0.6 + +[node name="Ball" type="RigidBody3D"] +collision_layer = 4 +custom_integrator = true +max_contacts_reported = 1 +contact_monitor = true +can_sleep = false +lock_rotation = true +linear_damp_mode = 1 +angular_damp_mode = 1 +script = ExtResource("1_oenn5") + +[node name="CollisionShape3D" type="CollisionShape3D" parent="."] +shape = SubResource("BoxShape3D_b4pqe") + +[node name="MeshInstance3D" type="MeshInstance3D" parent="."] +material_override = SubResource("StandardMaterial3D_tdblm") +mesh = SubResource("SphereMesh_mq1q1") + +[node name="TimerCollision" type="Timer" parent="."] +one_shot = true diff --git a/Ball/bal6D7B.tmp b/Ball/bal6D7B.tmp new file mode 100644 index 0000000..cb6271f --- /dev/null +++ b/Ball/bal6D7B.tmp @@ -0,0 +1,36 @@ +[gd_scene load_steps=6 format=3 uid="uid://rdlvlyf0l1l"] + +[ext_resource type="Script" path="res://Ball/ball.gd" id="1_oenn5"] +[ext_resource type="PackedScene" uid="uid://lge7m41oi6pn" path="res://Ball/Meshes/ball_bouncing.glb" id="2_ccq7m"] +[ext_resource type="PackedScene" uid="uid://b1embyb2knvho" path="res://Ball/Meshes/ball_flying.glb" id="4_fh5j8"] +[ext_resource type="Script" path="res://Ball/ball_meshes.gd" id="4_llldm"] + +[sub_resource type="SphereShape3D" id="SphereShape3D_ogc07"] +radius = 0.3 + +[node name="Ball" type="RigidBody3D"] +collision_layer = 4 +custom_integrator = true +max_contacts_reported = 1 +contact_monitor = true +can_sleep = false +lock_rotation = true +linear_damp_mode = 1 +angular_damp_mode = 1 +script = ExtResource("1_oenn5") + +[node name="CollisionShape3D" type="CollisionShape3D" parent="."] +shape = SubResource("SphereShape3D_ogc07") + +[node name="TimerCollision" type="Timer" parent="."] +one_shot = true + +[node name="Meshes" type="Node3D" parent="."] +script = ExtResource("4_llldm") + +[node name="BallBouncingMesh" parent="Meshes" instance=ExtResource("2_ccq7m")] +visible = false + +[node name="BallFlyingMesh" parent="Meshes" instance=ExtResource("4_fh5j8")] + +[node name="RotationNode" type="Node3D" parent="Meshes"] diff --git a/Ball/balA3FF.tmp b/Ball/balA3FF.tmp new file mode 100644 index 0000000..b7febdb --- /dev/null +++ b/Ball/balA3FF.tmp @@ -0,0 +1,40 @@ +[gd_scene load_steps=7 format=3 uid="uid://rdlvlyf0l1l"] + +[ext_resource type="Script" path="res://Ball/ball.gd" id="1_oenn5"] +[ext_resource type="Shader" uid="uid://ny01m62ohegv" path="res://Ball/Meshes/ball_visual_shader.tres" id="2_wbu40"] +[ext_resource type="PackedScene" uid="uid://dn8tw0i6t3701" path="res://Ball/ball_mesh_bouncing.tscn" id="3_3pvgr"] + +[sub_resource type="SphereShape3D" id="SphereShape3D_ogc07"] +radius = 0.3 + +[sub_resource type="ShaderMaterial" id="ShaderMaterial_qwhgq"] +render_priority = 0 +shader = ExtResource("2_wbu40") + +[sub_resource type="SphereMesh" id="SphereMesh_mq1q1"] +radius = 0.3 +height = 0.6 + +[node name="Ball" type="RigidBody3D"] +collision_layer = 4 +custom_integrator = true +max_contacts_reported = 1 +contact_monitor = true +can_sleep = false +lock_rotation = true +linear_damp_mode = 1 +angular_damp_mode = 1 +script = ExtResource("1_oenn5") + +[node name="CollisionShape3D" type="CollisionShape3D" parent="."] +shape = SubResource("SphereShape3D_ogc07") + +[node name="MeshInstance3D" type="MeshInstance3D" parent="."] +visible = false +material_override = SubResource("ShaderMaterial_qwhgq") +mesh = SubResource("SphereMesh_mq1q1") + +[node name="TimerCollision" type="Timer" parent="."] +one_shot = true + +[node name="BallBouncingMesh" parent="." instance=ExtResource("3_3pvgr")] diff --git a/Ball/ball.gd b/Ball/ball.gd new file mode 100644 index 0000000..85968f0 --- /dev/null +++ b/Ball/ball.gd @@ -0,0 +1,62 @@ +extends RigidBody3D + + +signal ball_collision_started +signal ball_collision_ended + +var captured_velocity : Vector3 +var bounced_velocity : Vector3 +var just_collided = false + +var total_bounce_duration = 0.5 +var gravity = Vector3(0, -10, 0) + + +func _physics_process(delta): + # Capture the linear velocity unless the ball have stopped on collision + if not just_collided: + captured_velocity = linear_velocity + + _get_collision(delta) + + +var collision_normal : Vector3 +var collision_angle_factor : float +func _get_collision(delta): + var collision : KinematicCollision3D + # test_only is true so this function doesn't move the ball on top of the main movement + collision = move_and_collide(linear_velocity * delta, true) + + # A collision happens + if collision: + # Get collision data stuff + collision_normal = collision.get_normal() + bounced_velocity = captured_velocity.bounce(collision_normal) + # Get the dot product between the surface normal and the ball direction on hit + collision_angle_factor = collision_normal.dot(captured_velocity.normalized() * -1) + + # Set the duration of the timer based on the collision angle + $TimerCollision.wait_time = total_bounce_duration * collision_angle_factor + $TimerCollision.start() + + # Send the signal after getting the data to avoid having zeroed values + just_collided = true + emit_signal("ball_collision_started") + + # Completely stop the ball in place + linear_velocity = Vector3.ZERO + freeze = true + + # Move the ball again after the timer runs out + # The if check prevents the timeout function from trying to connect every frame + if not $TimerCollision.timeout.is_connected(_after_collision): + $TimerCollision.timeout.connect(_after_collision) + + +func _after_collision(): + just_collided = false + emit_signal("ball_collision_ended") + + # Unfreezes the ball and apply the bounced captured velocity to it + freeze = false + linear_velocity = bounced_velocity diff --git a/Ball/ball.tscn b/Ball/ball.tscn new file mode 100644 index 0000000..5c71a40 --- /dev/null +++ b/Ball/ball.tscn @@ -0,0 +1,36 @@ +[gd_scene load_steps=6 format=3 uid="uid://rdlvlyf0l1l"] + +[ext_resource type="Script" path="res://Ball/ball.gd" id="1_oenn5"] +[ext_resource type="PackedScene" uid="uid://lge7m41oi6pn" path="res://Ball/Meshes/ball_bouncing.glb" id="2_ccq7m"] +[ext_resource type="PackedScene" uid="uid://b1embyb2knvho" path="res://Ball/Meshes/ball_flying.glb" id="4_fh5j8"] +[ext_resource type="Script" path="res://Ball/ball_meshes.gd" id="4_llldm"] + +[sub_resource type="SphereShape3D" id="SphereShape3D_ogc07"] +radius = 0.3 + +[node name="Ball" type="RigidBody3D"] +collision_layer = 4 +max_contacts_reported = 1 +contact_monitor = true +can_sleep = false +lock_rotation = true +linear_damp_mode = 1 +angular_damp_mode = 1 +script = ExtResource("1_oenn5") + +[node name="CollisionShape3D" type="CollisionShape3D" parent="."] +shape = SubResource("SphereShape3D_ogc07") + +[node name="TimerCollision" type="Timer" parent="."] +one_shot = true + +[node name="Meshes" type="Node3D" parent="."] +script = ExtResource("4_llldm") + +[node name="RotationNode" type="Node3D" parent="Meshes"] + +[node name="BallBouncingMesh" parent="Meshes" instance=ExtResource("2_ccq7m")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0.3) +visible = false + +[node name="BallFlyingMesh" parent="Meshes" instance=ExtResource("4_fh5j8")] diff --git a/Ball/ball_mesh_bouncing.tscn b/Ball/ball_mesh_bouncing.tscn new file mode 100644 index 0000000..1ec041b --- /dev/null +++ b/Ball/ball_mesh_bouncing.tscn @@ -0,0 +1,5 @@ +[gd_scene load_steps=2 format=3 uid="uid://8svturwvd3cx"] + +[ext_resource type="PackedScene" uid="uid://lge7m41oi6pn" path="res://Ball/Meshes/ball_bouncing.glb" id="1_gs32o"] + +[node name="BallBouncingMesh" instance=ExtResource("1_gs32o")] diff --git a/Ball/ball_meshes.gd b/Ball/ball_meshes.gd new file mode 100644 index 0000000..3805acb --- /dev/null +++ b/Ball/ball_meshes.gd @@ -0,0 +1,77 @@ +extends Node3D + + +@onready var skeleton_flying = $BallFlyingMesh.get_node("SKL_projectile_flying/Skeleton3D") +@onready var skeleton_bouncing = $BallBouncingMesh.get_node("SKL_projectile_bouncing/Skeleton3D") +@onready var ball = owner +@onready var timer = ball.get_node("TimerCollision") + +var is_bouncing = false +var max_squish_xy = 0.5 # Starts at 0 +var max_squish_z = 0.8 # From 0 to 1 + +# Apply a small offset to the up vector in the look_at function to fix it +# not working when the target is perfectly aligned with the up vector +const LOOK_AT_OFFSET_FIX = Vector3(0.01, 1, 0.01) + + +func _ready(): + ball.ball_collision_started.connect(_on_collision) + ball.ball_collision_ended.connect(_after_collision) + + +func _process(delta): + _align_mesh_to_direction() + _squish_animation() + + +func _align_mesh_to_direction(): + # Align the RotationNode to the movement direction + $RotationNode.look_at(ball.captured_velocity + ball.global_position, LOOK_AT_OFFSET_FIX) + + # Convert the rotation euler into a quaternion + var euler_rotation = $RotationNode.rotation + var quaternion_rotation : Quaternion + quaternion_rotation = quaternion_rotation.from_euler(euler_rotation) + + # Rotate the bone + skeleton_flying.set_bone_pose_rotation(1, quaternion_rotation) + + +func _on_collision(): + $BallFlyingMesh.visible = false + $BallBouncingMesh.visible = true + is_bouncing = true + + # Align the Meshes node to the surface normal so the bouncing mesh is properly aligned + look_at(ball.collision_normal + ball.global_position, LOOK_AT_OFFSET_FIX) + + +func _after_collision(): + $BallFlyingMesh.visible = true + $BallBouncingMesh.visible = false + is_bouncing = false + + # Reset the Meshes node rotation + rotation = Vector3.ZERO + + +func _squish_animation(): + if is_bouncing: + # Remap the time_left value of the timer + var time_left_remap = remap(timer.time_left, timer.wait_time, 0, 0, 2) + var time_left_pingpong = pingpong(time_left_remap, 1) + + # Multiply the scaling by the collision angle factor to reduce + # the squishing effect at shallow angles + var scale_xy_factor = 1.0 + (ball.collision_angle_factor * max_squish_xy) + var scale_xy = 1.0 * remap(time_left_pingpong, 0, 1, 1, scale_xy_factor) + var scale_z_factor = 1.0 - (ball.collision_angle_factor * max_squish_z) + var scale_z = 1.0 * remap(time_left_pingpong, 0, 1, 1, scale_z_factor) + + # Compose the vector for the bone scaling + var scale_squish_vector = Vector3(scale_xy, scale_xy, scale_z) + + # Scale the bone + skeleton_bouncing.set_bone_pose_scale(1, scale_squish_vector) + diff --git a/Misc/64x64_orange_grey.png b/Misc/64x64_orange_grey.png new file mode 100644 index 0000000000000000000000000000000000000000..56cfefa875f87fdf802b65b8d0155573e445a606 GIT binary patch literal 612 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 diff --git a/icon.svg.import b/icon.svg.import new file mode 100644 index 0000000..78ab15a --- /dev/null +++ b/icon.svg.import @@ -0,0 +1,37 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://wabpaapepcrh" +path="res://.godot/imported/icon.svg-218a8f2b3041327d8a5756f3a245f83b.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://icon.svg" +dest_files=["res://.godot/imported/icon.svg-218a8f2b3041327d8a5756f3a245f83b.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 +svg/scale=1.0 +editor/scale_with_editor_scale=false +editor/convert_colors_with_editor_theme=false diff --git a/project.godot b/project.godot new file mode 100644 index 0000000..1491771 --- /dev/null +++ b/project.godot @@ -0,0 +1,56 @@ +; Engine configuration file. +; It's best edited using the editor UI and not directly, +; since the parameters that go here are not all obvious. +; +; Format: +; [section] ; section goes between [] +; param=value ; assign values to parameters + +config_version=5 + +[application] + +config/name="Custom RigidBody Bounce Behaviour" +run/main_scene="res://World/world.tscn" +config/features=PackedStringArray("4.1", "Forward Plus") +config/icon="res://icon.svg" + +[input] + +move_left={ +"deadzone": 0.5, +"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":65,"key_label":0,"unicode":97,"echo":false,"script":null) +] +} +move_right={ +"deadzone": 0.5, +"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":68,"key_label":0,"unicode":100,"echo":false,"script":null) +] +} +move_up={ +"deadzone": 0.5, +"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":87,"key_label":0,"unicode":119,"echo":false,"script":null) +] +} +move_down={ +"deadzone": 0.5, +"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":83,"key_label":0,"unicode":115,"echo":false,"script":null) +] +} +jump={ +"deadzone": 0.5, +"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":32,"key_label":0,"unicode":32,"echo":false,"script":null) +] +} +shoot={ +"deadzone": 0.5, +"events": [Object(InputEventMouseButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"button_mask":0,"position":Vector2(0, 0),"global_position":Vector2(0, 0),"factor":1.0,"button_index":1,"canceled":false,"pressed":false,"double_click":false,"script":null) +, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":69,"key_label":0,"unicode":101,"echo":false,"script":null) +] +} + +[layer_names] + +3d_physics/layer_1="general" +3d_physics/layer_2="player" +3d_physics/layer_3="balls"