diff --git a/Game/project.godot b/Game/project.godot index caf369b..da23d47 100644 --- a/Game/project.godot +++ b/Game/project.godot @@ -15,6 +15,11 @@ run/main_scene="res://scenes/match.tscn" config/features=PackedStringArray("4.1", "Forward Plus") config/icon="res://icon.svg" +[display] + +window/size/viewport_width=1920 +window/size/viewport_height=1080 + [input] move_forward={ @@ -47,6 +52,34 @@ move_down={ "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":69,"key_label":0,"unicode":101,"echo":false,"script":null) ] } +move_forward2={ +"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":4194320,"key_label":0,"unicode":0,"echo":false,"script":null) +] +} +move_backward2={ +"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":4194322,"key_label":0,"unicode":0,"echo":false,"script":null) +] +} +move_left2={ +"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":4194319,"key_label":0,"unicode":0,"echo":false,"script":null) +] +} +move_right2={ +"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":4194321,"key_label":0,"unicode":0,"echo":false,"script":null) +] +} +move_up2={ +"deadzone": 0.5, +"events": [] +} +move_down2={ +"deadzone": 0.5, +"events": [] +} [rendering] diff --git a/Game/scenes/match.tscn b/Game/scenes/match.tscn index d0856a3..2546577 100644 --- a/Game/scenes/match.tscn +++ b/Game/scenes/match.tscn @@ -1,10 +1,11 @@ -[gd_scene load_steps=13 format=3 uid="uid://djlfte5nx8sel"] +[gd_scene load_steps=14 format=3 uid="uid://djlfte5nx8sel"] [ext_resource type="PackedScene" uid="uid://dnra1buk328d" path="res://objects/vehicle.tscn" id="2_2d4ji"] [ext_resource type="ArrayMesh" uid="uid://ucw1lyo43yi4" path="res://assets/models/gold_ball.res" id="2_4bpxj"] [ext_resource type="Script" path="res://scripts/MatchCamera3D.gd" id="2_n3g6s"] [ext_resource type="PackedScene" uid="uid://cofdcxo5170rs" path="res://objects/goal.tscn" id="3_xk008"] -[ext_resource type="Script" path="res://scripts/goal2.gd" id="4_ukkeh"] +[ext_resource type="Script" path="res://scripts/player1.gd" id="4_keuru"] +[ext_resource type="Script" path="res://scripts/player2.gd" id="4_vutck"] [sub_resource type="StandardMaterial3D" id="StandardMaterial3D_xmumy"] albedo_color = Color(0.0196078, 0.34902, 0.156863, 1) @@ -35,7 +36,7 @@ transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 2.08165e-12, 1.33585, 3.3972) current = true fov = 114.877 script = ExtResource("2_n3g6s") -vehicle = NodePath("../Players/Player1") +vehicle = NodePath("../Players/GridContainer/SubViewportContainer/SubViewport/Player1") ball = NodePath("../Ball") [node name="DirectionalLight3D" type="DirectionalLight3D" parent="."] @@ -66,15 +67,46 @@ mesh = ExtResource("2_4bpxj") [node name="Players" type="Node3D" parent="."] -[node name="Player1" parent="Players" instance=ExtResource("2_2d4ji")] +[node name="GridContainer" type="GridContainer" parent="Players"] +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +columns = 2 + +[node name="SubViewportContainer" type="SubViewportContainer" parent="Players/GridContainer"] +layout_mode = 2 +size_flags_horizontal = 3 +size_flags_vertical = 3 + +[node name="SubViewport" type="SubViewport" parent="Players/GridContainer/SubViewportContainer"] +handle_input_locally = false +size = Vector2i(1080, 960) +render_target_update_mode = 4 + +[node name="Player1" parent="Players/GridContainer/SubViewportContainer/SubViewport" instance=ExtResource("2_2d4ji")] +script = ExtResource("4_keuru") + +[node name="SubViewportContainer2" type="SubViewportContainer" parent="Players/GridContainer"] +layout_mode = 2 +size_flags_horizontal = 3 +size_flags_vertical = 3 + +[node name="SubViewport2" type="SubViewport" parent="Players/GridContainer/SubViewportContainer2"] +handle_input_locally = false +size = Vector2i(1080, 960) +render_target_update_mode = 4 + +[node name="Player2" parent="Players/GridContainer/SubViewportContainer2/SubViewport2" instance=ExtResource("2_2d4ji")] +script = ExtResource("4_vutck") [node name="Goals" type="Node3D" parent="."] [node name="Goal2" parent="Goals" node_paths=PackedStringArray("ball", "player1") instance=ExtResource("3_xk008")] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 2.08165e-12, 1, -5) -script = ExtResource("4_ukkeh") ball = NodePath("../../Ball") -player1 = NodePath("../../Players/Player1") +player1 = NodePath("../../Players/GridContainer/SubViewportContainer/SubViewport/Player1") [node name="WorldEnvironment" type="WorldEnvironment" parent="."] environment = SubResource("Environment_ycxte") diff --git a/Game/scripts/Vehicle.gd b/Game/scripts/Vehicle.gd index ee34692..02471ba 100644 --- a/Game/scripts/Vehicle.gd +++ b/Game/scripts/Vehicle.gd @@ -1,26 +1,24 @@ extends RigidBody3D -var speed = 10.0 # Adjust the speed as necessary +# Speed variable can be adjusted by subclasses +var speed = 10.0 func _integrate_forces(state): - # TODO - change these so they are relative to the vehicle, not the world - var input_vector = Vector3.ZERO - if Input.is_action_pressed("move_forward"): - input_vector.z -= 1 - if Input.is_action_pressed("move_backward"): - input_vector.z += 1 - if Input.is_action_pressed("move_left"): - input_vector.x -= 1 - if Input.is_action_pressed("move_right"): - input_vector.x += 1 - if Input.is_action_pressed("move_up"): - input_vector.y += 1 - if Input.is_action_pressed("move_down"): - input_vector.y -= 1 + # input_vector represents the movement input relative to the vehicle + var input_vector = get_input_vector() + # Scale the input_vector by speed input_vector = input_vector.normalized() * speed + + # Set the linear velocity based on the input state.linear_velocity = input_vector +# Get the input vector from subclasses +func get_input_vector() -> Vector3: + var input_vector = Vector3.ZERO + + # Subclasses will implement this function to provide their input mappings + return input_vector # Called when the node enters the scene tree for the first time. func _ready(): diff --git a/Game/scripts/player1.gd b/Game/scripts/player1.gd new file mode 100644 index 0000000..87214a9 --- /dev/null +++ b/Game/scripts/player1.gd @@ -0,0 +1,18 @@ +extends 'res://scripts/Vehicle.gd' + +func get_input_vector() -> Vector3: + var input_vector = Vector3.ZERO + if Input.is_action_pressed("move_forward"): + input_vector.z -= 1 + if Input.is_action_pressed("move_backward"): + input_vector.z += 1 + if Input.is_action_pressed("move_left"): + input_vector.x -= 1 + if Input.is_action_pressed("move_right"): + input_vector.x += 1 + if Input.is_action_pressed("move_up"): + input_vector.y += 1 + if Input.is_action_pressed("move_down"): + input_vector.y -= 1 + + return input_vector diff --git a/Game/scripts/player2.gd b/Game/scripts/player2.gd new file mode 100644 index 0000000..24825ac --- /dev/null +++ b/Game/scripts/player2.gd @@ -0,0 +1,18 @@ +extends 'res://scripts/Vehicle.gd' + +func get_input_vector() -> Vector3: + var input_vector = Vector3.ZERO + if Input.is_action_pressed("move_forward2"): + input_vector.z -= 1 + if Input.is_action_pressed("move_backward2"): + input_vector.z += 1 + if Input.is_action_pressed("move_left2"): + input_vector.x -= 1 + if Input.is_action_pressed("move_right2"): + input_vector.x += 1 + if Input.is_action_pressed("move_up2"): + input_vector.y += 1 + if Input.is_action_pressed("move_down2"): + input_vector.y -= 1 + + return input_vector