diff --git a/FPS.csproj b/FPS.csproj index 8ee8c44..101e97a 100644 --- a/FPS.csproj +++ b/FPS.csproj @@ -3,4 +3,7 @@ net6.0 true + + + \ No newline at end of file diff --git a/Models/machinegun.mtl b/Models/machinegun.mtl new file mode 100644 index 0000000..fc11195 --- /dev/null +++ b/Models/machinegun.mtl @@ -0,0 +1,24 @@ +# +## Alias OBJ Material File +# Exported from SketchUp, (c) 2000-2012 Trimble Navigation Limited + +newmtl Gray8 +Ka 0.000000 0.000000 0.000000 +Kd 0.266667 0.266667 0.266667 +Ks 0.330000 0.330000 0.330000 + +newmtl Gray5 +Ka 0.000000 0.000000 0.000000 +Kd 0.529412 0.529412 0.529412 +Ks 0.330000 0.330000 0.330000 + +newmtl Gray6 +Ka 0.000000 0.000000 0.000000 +Kd 0.376471 0.376471 0.376471 +Ks 0.330000 0.330000 0.330000 + +newmtl FrontColor +Ka 0.000000 0.000000 0.000000 +Kd 1.000000 1.000000 1.000000 +Ks 0.330000 0.330000 0.330000 + diff --git a/Models/machinegun.obj.import b/Models/machinegun.obj.import new file mode 100644 index 0000000..7f13edd --- /dev/null +++ b/Models/machinegun.obj.import @@ -0,0 +1,21 @@ +[remap] + +importer="wavefront_obj" +importer_version=1 +type="Mesh" +uid="uid://d7b2roon4kjw" +path="res://.godot/imported/machinegun.obj-de3394cab87f093dcf4bc6a41fb34309.mesh" + +[deps] + +files=["res://.godot/imported/machinegun.obj-de3394cab87f093dcf4bc6a41fb34309.mesh"] + +source_file="res://Models/machinegun.obj" +dest_files=["res://.godot/imported/machinegun.obj-de3394cab87f093dcf4bc6a41fb34309.mesh", "res://.godot/imported/machinegun.obj-de3394cab87f093dcf4bc6a41fb34309.mesh"] + +[params] + +generate_tangents=true +scale_mesh=Vector3(1, 1, 1) +offset_mesh=Vector3(0, 0, 0) +optimize_mesh=true diff --git a/Scenes/Crosshair.gdshader b/Scenes/Crosshair.gdshader new file mode 100644 index 0000000..16869ea --- /dev/null +++ b/Scenes/Crosshair.gdshader @@ -0,0 +1,43 @@ +shader_type canvas_item; + +uniform bool center_enabled = true; +uniform bool legs_enabled = true; +uniform bool inverted = false; +uniform int color_id = 0; +uniform vec4 color_0 = vec4(0., 1, 0., 1.); +uniform vec4 color_1 = vec4(1., 0., 0., 1.); +uniform vec4 color_2 = vec4(0., 0., 1., 1.); +uniform float center_radius = .002; +uniform float width = .003; +uniform float len = .03; +uniform float spacing = .008; +uniform float spread = 1.; +uniform sampler2D SCREEN_TEXTURE : hint_screen_texture, filter_linear_mipmap; + + +void fragment(){ + + float a = SCREEN_PIXEL_SIZE.x / SCREEN_PIXEL_SIZE.y; + vec2 UVa = vec2(UV.x / a, UV.y); + vec2 center = vec2(.5 / a, .5); + + float point = step(distance(UVa, center), center_radius); + + float h = step(center.x - len - spacing*spread, UVa.x) - step(center.x - spacing*spread, UVa.x); + h += step(center.x + spacing*spread, UVa.x) - step(center.x + len + spacing*spread, UVa.x); + h *= step(center.y - width, UVa.y) - step(center.y + width, UVa.y); + + float v = step(center.y - len - spacing*spread, UVa.y) - step(center.y - spacing*spread, UVa.y); + v += step(center.y + spacing*spread, UVa.y) - step(center.y + len + spacing*spread, UVa.y); + v *= step(center.x - width, UVa.x) - step(center.x + width, UVa.x); + + float crosshair; + + crosshair = (h+v) * float(legs_enabled) + point * float(center_enabled); + + if(!inverted){ + COLOR = (color_0 * float(color_id == 0) + color_1 * float(color_id == 1) + color_2 * float(color_id == 2)) * crosshair; + }else{ + COLOR = vec4((cos(textureLod(SCREEN_TEXTURE, SCREEN_UV, 0.0).rgb * 3.1415926534) + 1.)/2., 1.) * crosshair; + } +} \ No newline at end of file diff --git a/Scenes/Enivornment.tres b/Scenes/Enivornment.tres new file mode 100644 index 0000000..34f9a9f --- /dev/null +++ b/Scenes/Enivornment.tres @@ -0,0 +1,3 @@ +[gd_resource type="Environment" format=3 uid="uid://c1i78mwq3ug2f"] + +[resource] diff --git a/Scenes/Gun.tscn b/Scenes/Gun.tscn new file mode 100644 index 0000000..a59cf75 --- /dev/null +++ b/Scenes/Gun.tscn @@ -0,0 +1,65 @@ +[gd_scene load_steps=5 format=3 uid="uid://cc5emorildoar"] + +[ext_resource type="Environment" uid="uid://c1i78mwq3ug2f" path="res://Scenes/Enivornment.tres" id="1_3jquc"] +[ext_resource type="ArrayMesh" uid="uid://d7b2roon4kjw" path="res://Models/machinegun.obj" id="1_lxd3t"] +[ext_resource type="Shader" path="res://Scenes/Crosshair.gdshader" id="3_avtvy"] + +[sub_resource type="ShaderMaterial" id="ShaderMaterial_foxul"] +shader = ExtResource("3_avtvy") +shader_parameter/center_enabled = true +shader_parameter/legs_enabled = true +shader_parameter/inverted = false +shader_parameter/color_id = 0 +shader_parameter/color_0 = Vector4(0, 1, 0, 1) +shader_parameter/color_1 = Vector4(1, 0, 0, 1) +shader_parameter/color_2 = Vector4(0, 0, 1, 1) +shader_parameter/center_radius = 0.002 +shader_parameter/width = 0.002 +shader_parameter/len = 0.025 +shader_parameter/spacing = 0.008 +shader_parameter/spread = 1.0 + +[node name="Gun" type="Node3D"] + +[node name="SubViewportContainer" type="SubViewportContainer" parent="."] +light_mask = 2 +visibility_layer = 2 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +stretch = true + +[node name="SubViewport" type="SubViewport" parent="SubViewportContainer"] +transparent_bg = true +handle_input_locally = false +size = Vector2i(1152, 648) +render_target_update_mode = 4 + +[node name="Camera3D" type="Camera3D" parent="SubViewportContainer/SubViewport"] +cull_mask = 1047554 +environment = ExtResource("1_3jquc") + +[node name="Machinegun" type="MeshInstance3D" parent="SubViewportContainer/SubViewport/Camera3D"] +transform = Transform3D(-8, 0, -1.20797e-06, 0, 8, 0, 1.20797e-06, 0, -8, 0.355038, -0.26573, -0.622725) +layers = 2 +mesh = ExtResource("1_lxd3t") +skeleton = NodePath("../../../..") + +[node name="Crosshair" type="Control" parent="."] +layout_mode = 3 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 + +[node name="ColorRect" type="ColorRect" parent="Crosshair"] +material = SubResource("ShaderMaterial_foxul") +layout_mode = 1 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 diff --git a/Scenes/Healthbar.cs b/Scenes/Healthbar.cs new file mode 100644 index 0000000..50cf6a1 --- /dev/null +++ b/Scenes/Healthbar.cs @@ -0,0 +1,8 @@ +using Godot; + +public partial class Healthbar : Sprite3D +{ + public override void _Ready() + { + } +} diff --git a/Scenes/Level.tscn b/Scenes/Level.tscn index 7dbabe4..6b396ea 100644 --- a/Scenes/Level.tscn +++ b/Scenes/Level.tscn @@ -1,4 +1,8 @@ -[gd_scene load_steps=4 format=3 uid="uid://ocor7udqvoec"] +[gd_scene load_steps=7 format=3 uid="uid://ocor7udqvoec"] + +[ext_resource type="PackedScene" uid="uid://bi7j4afsxghrj" path="res://Scenes/Player.tscn" id="1_my8b5"] +[ext_resource type="PackedScene" uid="uid://cc5emorildoar" path="res://Scenes/Gun.tscn" id="2_mhg71"] +[ext_resource type="PackedScene" uid="uid://b03tplah8y1do" path="res://Scenes/target.tscn" id="3_civmh"] [sub_resource type="BoxShape3D" id="BoxShape3D_gyf0l"] size = Vector3(20, 0.5, 20) @@ -13,9 +17,22 @@ size = Vector3(20, 0.5, 20) [node name="Level" type="Node3D"] [node name="StaticBody3D" type="StaticBody3D" parent="."] +collision_mask = 0 [node name="CollisionShape3D" type="CollisionShape3D" parent="StaticBody3D"] shape = SubResource("BoxShape3D_gyf0l") [node name="MeshInstance3D" type="MeshInstance3D" parent="StaticBody3D"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -0.189965, 0) mesh = SubResource("BoxMesh_v2sg1") + +[node name="Player" parent="." instance=ExtResource("1_my8b5")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.269294, 0) + +[node name="Gun" parent="Player" instance=ExtResource("2_mhg71")] +transform = Transform3D(0.979575, 0, 0.201078, 0, 1, 0, -0.201078, 0, 0.979575, 0.074702, 1.59908, -0.498807) + +[node name="DirectionalLight3D" type="DirectionalLight3D" parent="."] +transform = Transform3D(-0.0510635, -0.435165, -0.898901, 0, -0.900076, 0.435734, -0.998695, 0.0222501, 0.045961, -5.60126, 7.19548, 0) + +[node name="Target" parent="." instance=ExtResource("3_civmh")] diff --git a/Scenes/Player.tscn b/Scenes/Player.tscn new file mode 100644 index 0000000..65dd166 --- /dev/null +++ b/Scenes/Player.tscn @@ -0,0 +1,34 @@ +[gd_scene load_steps=5 format=3 uid="uid://bi7j4afsxghrj"] + +[ext_resource type="Script" path="res://Scripts/Player.cs" id="1_jsq3s"] +[ext_resource type="Environment" uid="uid://c1i78mwq3ug2f" path="res://Scenes/Enivornment.tres" id="2_t03qe"] + +[sub_resource type="CapsuleShape3D" id="CapsuleShape3D_cxbex"] + +[sub_resource type="CapsuleMesh" id="CapsuleMesh_7dxig"] + +[node name="Player" type="CharacterBody3D" node_paths=PackedStringArray("_pivot")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.13331, 0) +script = ExtResource("1_jsq3s") +_mouseSensitivity = 0.07 +_pivot = NodePath("Pivot") + +[node name="CollisionShape3D" type="CollisionShape3D" parent="."] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0) +shape = SubResource("CapsuleShape3D_cxbex") + +[node name="Pivot" type="Node3D" parent="."] + +[node name="Camera3D" type="Camera3D" parent="Pivot"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.47186, 0.0718701) +environment = ExtResource("2_t03qe") +fov = 60.0 + +[node name="AimCast" type="RayCast3D" parent="Pivot/Camera3D"] +transform = Transform3D(0.125, 0, 0, 0, 0.125, 0, 0, 0, 0.125, 0, 0, 0) +target_position = Vector3(0, 0, -1000) + +[node name="MeshInstance3D" type="MeshInstance3D" parent="."] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0) +visible = false +mesh = SubResource("CapsuleMesh_7dxig") diff --git a/Scenes/target.tscn b/Scenes/target.tscn new file mode 100644 index 0000000..b1c23c1 --- /dev/null +++ b/Scenes/target.tscn @@ -0,0 +1,33 @@ +[gd_scene load_steps=5 format=3 uid="uid://b03tplah8y1do"] + +[ext_resource type="Script" path="res://Scripts/Target.cs" id="1_ykgyh"] + +[sub_resource type="BoxShape3D" id="BoxShape3D_37aka"] + +[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_8nuxw"] +albedo_color = Color(1, 0.282353, 0, 1) + +[sub_resource type="BoxMesh" id="BoxMesh_ni5do"] +material = SubResource("StandardMaterial3D_8nuxw") + +[node name="Target" type="StaticBody3D" node_paths=PackedStringArray("_progressBar")] +script = ExtResource("1_ykgyh") +_progressBar = NodePath("ProgressBar") + +[node name="CollisionShape3D" type="CollisionShape3D" parent="."] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 2.12414, -3.96702) +shape = SubResource("BoxShape3D_37aka") + +[node name="MeshInstance3D" type="MeshInstance3D" parent="."] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 2.12414, -3.96702) +mesh = SubResource("BoxMesh_ni5do") +skeleton = NodePath("") + +[node name="ProgressBar" type="ProgressBar" parent="."] +offset_left = 460.0 +offset_top = 3.0 +offset_right = 688.0 +offset_bottom = 58.0 +value = 100.0 + +[node name="Sprite3D" type="Sprite3D" parent="."] diff --git a/Scripts/Player.cs b/Scripts/Player.cs new file mode 100644 index 0000000..0d8fcf4 --- /dev/null +++ b/Scripts/Player.cs @@ -0,0 +1,101 @@ +using Godot; + +public partial class Player : CharacterBody3D +{ + [Signal] + public delegate void OnHitEventHandler(); + + public const float _speed = 5.0f; + public const float _jumpVelocity = 4.5f; + [Export] + private float _mouseSensitivity = 0.03f; + [Export] + private float _joystickDeadZone = 0.5f; + [Export] + private float _sensitivityHorizontal = 0.5f; + [Export] + private float _sensitivityVertical = 0.5f; + [Export] + private Node3D _pivot; + + private RayCast3D _aimCast; + + // Get the gravity from the project settings to be synced with RigidBody nodes. + public static float gravity = ProjectSettings.GetSetting("physics/3d/default_gravity").AsSingle(); + + public override void _Ready() + { + Input.MouseMode = Input.MouseModeEnum.Captured; + _aimCast = GetNode("Pivot/Camera3D/AimCast"); + } + + public override void _PhysicsProcess(double delta) + { + var isOnFloor = IsOnFloor(); + Velocity = MovePlayer(Velocity, Transform.Basis, (float)delta, isOnFloor); + MoveAndSlide(); + } + + public override void _Process(double delta) + { + var joyRightX = Input.GetJoyAxis(0, JoyAxis.RightX); + var joyRightY = Input.GetJoyAxis(0, JoyAxis.RightY); + + if (Mathf.Abs(joyRightX) > _joystickDeadZone) + RotateY(Mathf.DegToRad(-joyRightX * _sensitivityHorizontal)); + if (Mathf.Abs(joyRightY) > _joystickDeadZone) + { + _pivot.RotateX(Mathf.DegToRad(-joyRightY * _sensitivityVertical)); + _pivot.Rotation = new Vector3(Mathf.Clamp(_pivot.Rotation.X, Mathf.DegToRad(-80), Mathf.DegToRad(80)), _pivot.Rotation.Y, _pivot.Rotation.Z); + } + } + + public override void _Input(InputEvent @event) + { + + if (Input.IsActionJustPressed("quit")) + GetTree().Quit(); + + if (@event is InputEventMouseMotion inputMouseEvent) + { + RotateY(Mathf.DegToRad(-inputMouseEvent.Relative.X * _mouseSensitivity)); + _pivot.RotateX(Mathf.DegToRad(-inputMouseEvent.Relative.Y * _mouseSensitivity)); + _pivot.Rotation = new Vector3(Mathf.Clamp(_pivot.Rotation.X, Mathf.DegToRad(-80), Mathf.DegToRad(80)), _pivot.Rotation.Y, _pivot.Rotation.Z); + } + + if (@event.IsActionPressed("fire") && _aimCast.IsColliding()) + { + EmitSignal(SignalName.OnHit); + _aimCast.GetCollider().Call("OnHitEvent", 3); + } + } + + private static Vector3 MovePlayer(Vector3 velocity, Basis basis, float delta, bool isOnFloor) + { + var startingVelocity = velocity; + // Add the gravity. + if (!isOnFloor) + velocity.Y -= gravity * delta; + + // Handle Jump. + if (Input.IsActionJustPressed("jump") && isOnFloor) + velocity.Y = _jumpVelocity; + + // Get the input direction and handle the movement/deceleration. + // As good practice, you should replace UI actions with custom gameplay actions. + Vector2 inputDir = Input.GetVector("left", "right", "up", "down"); + Vector3 direction = (basis * new Vector3(inputDir.X, 0, inputDir.Y)).Normalized(); + if (direction != Vector3.Zero) + { + velocity.X = direction.X * _speed; + velocity.Z = direction.Z * _speed; + } + else + { + velocity.X = Mathf.MoveToward(startingVelocity.X, 0, _speed); + velocity.Z = Mathf.MoveToward(startingVelocity.Z, 0, _speed); + } + + return velocity; + } +} diff --git a/Scripts/Target.cs b/Scripts/Target.cs new file mode 100644 index 0000000..3b3b12e --- /dev/null +++ b/Scripts/Target.cs @@ -0,0 +1,26 @@ +using Godot; + +public partial class Target : StaticBody3D +{ + [Export] + private int _maxHP = 100; + private int _currentHP; + + [Export] + private ProgressBar _progressBar; + + public override void _Ready() + { + _currentHP = _maxHP; + } + + public void OnHitEvent(int damage) + { + _currentHP -= damage; + GD.Print($"Current HP: {_currentHP}"); + _progressBar.Value = _currentHP; + + if (_currentHP <= 0) + QueueFree(); + } +} diff --git a/Textures/Healthbar/barHorizontal_green_mid 200.png b/Textures/Healthbar/barHorizontal_green_mid 200.png new file mode 100644 index 0000000..1a0cec7 Binary files /dev/null and b/Textures/Healthbar/barHorizontal_green_mid 200.png differ diff --git a/Textures/Healthbar/barHorizontal_green_mid 200.png.import b/Textures/Healthbar/barHorizontal_green_mid 200.png.import new file mode 100644 index 0000000..e4ebed9 --- /dev/null +++ b/Textures/Healthbar/barHorizontal_green_mid 200.png.import @@ -0,0 +1,35 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://dhcfanxewk34" +path.s3tc="res://.godot/imported/barHorizontal_green_mid 200.png-ba8c88892332a40612df0726c113abf1.s3tc.ctex" +metadata={ +"imported_formats": ["s3tc_bptc"], +"vram_texture": true +} + +[deps] + +source_file="res://Textures/Healthbar/barHorizontal_green_mid 200.png" +dest_files=["res://.godot/imported/barHorizontal_green_mid 200.png-ba8c88892332a40612df0726c113abf1.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 diff --git a/Textures/Healthbar/barHorizontal_red_mid 200.png b/Textures/Healthbar/barHorizontal_red_mid 200.png new file mode 100644 index 0000000..17e0237 Binary files /dev/null and b/Textures/Healthbar/barHorizontal_red_mid 200.png differ diff --git a/Textures/Healthbar/barHorizontal_red_mid 200.png.import b/Textures/Healthbar/barHorizontal_red_mid 200.png.import new file mode 100644 index 0000000..aac36b1 --- /dev/null +++ b/Textures/Healthbar/barHorizontal_red_mid 200.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://bjh06psv7qg06" +path="res://.godot/imported/barHorizontal_red_mid 200.png-e40ac6e900cd3d39ba0d9194290b293a.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://Textures/Healthbar/barHorizontal_red_mid 200.png" +dest_files=["res://.godot/imported/barHorizontal_red_mid 200.png-e40ac6e900cd3d39ba0d9194290b293a.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 diff --git a/Textures/Healthbar/barHorizontal_yellow_mid 200.png b/Textures/Healthbar/barHorizontal_yellow_mid 200.png new file mode 100644 index 0000000..eb35005 Binary files /dev/null and b/Textures/Healthbar/barHorizontal_yellow_mid 200.png differ diff --git a/Textures/Healthbar/barHorizontal_yellow_mid 200.png.import b/Textures/Healthbar/barHorizontal_yellow_mid 200.png.import new file mode 100644 index 0000000..6ec519c --- /dev/null +++ b/Textures/Healthbar/barHorizontal_yellow_mid 200.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://d3xp4otnenl1q" +path="res://.godot/imported/barHorizontal_yellow_mid 200.png-d77c21427b8443909ca99c00f2118f80.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://Textures/Healthbar/barHorizontal_yellow_mid 200.png" +dest_files=["res://.godot/imported/barHorizontal_yellow_mid 200.png-d77c21427b8443909ca99c00f2118f80.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 diff --git a/project.godot b/project.godot index eb3e6d2..640ec09 100644 --- a/project.godot +++ b/project.godot @@ -11,9 +11,58 @@ config_version=5 [application] config/name="FPS" -config/features=PackedStringArray("4.1", "Forward Plus") -config/icon="res://icon.svg" +run/main_scene="res://Scenes/Level.tscn" +config/features=PackedStringArray("4.1", "C#", "Forward Plus") [dotnet] project/assembly_name="FPS" + +[input] + +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) +, Object(InputEventJoypadMotion,"resource_local_to_scene":false,"resource_name":"","device":-1,"axis":1,"axis_value":-1.0,"script":null) +] +} +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) +, Object(InputEventJoypadMotion,"resource_local_to_scene":false,"resource_name":"","device":-1,"axis":0,"axis_value":-1.0,"script":null) +] +} +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) +, Object(InputEventJoypadMotion,"resource_local_to_scene":false,"resource_name":"","device":-1,"axis":1,"axis_value":1.0,"script":null) +] +} +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) +, Object(InputEventJoypadMotion,"resource_local_to_scene":false,"resource_name":"","device":-1,"axis":0,"axis_value":1.0,"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) +, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"button_index":0,"pressure":0.0,"pressed":true,"script":null) +] +} +fire={ +"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(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"button_index":10,"pressure":0.0,"pressed":true,"script":null) +] +} +quit={ +"deadzone": 0.5, +"events": [Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"button_index":6,"pressure":0.0,"pressed":true,"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":4194305,"key_label":0,"unicode":0,"echo":false,"script":null) +] +} + +[physics] + +common/physics_ticks_per_second=300