cleaned up player code, file organization; implemented simple-ish physics
This commit is contained in:
parent
b525ffd024
commit
19b18532db
@ -35,6 +35,8 @@ end_turn={
|
||||
[physics]
|
||||
|
||||
3d/physics_engine="Jolt Physics"
|
||||
2d/default_gravity=0.0
|
||||
2d/default_gravity_vector=Vector2(0, 0)
|
||||
|
||||
[rendering]
|
||||
|
||||
|
||||
@ -3,8 +3,14 @@
|
||||
[ext_resource type="Script" uid="uid://3c5arbqbgr2l" path="res://scripts/ball.gd" id="1_x8fbi"]
|
||||
[ext_resource type="Texture2D" uid="uid://vfxgx3oc6nm1" path="res://assets/ball/ball-kenney-accurate.png" id="2_41u45"]
|
||||
|
||||
[node name="Ball" type="Node2D" unique_id=1245529605]
|
||||
[sub_resource type="CircleShape2D" id="CircleShape2D_cxlvu"]
|
||||
radius = 13.0
|
||||
|
||||
[node name="Ball" type="RigidBody2D" unique_id=1681382008]
|
||||
script = ExtResource("1_x8fbi")
|
||||
|
||||
[node name="BallSprite" type="Sprite2D" parent="." unique_id=982207895]
|
||||
texture = ExtResource("2_41u45")
|
||||
|
||||
[node name="BallShape" type="CollisionShape2D" parent="." unique_id=754296158]
|
||||
shape = SubResource("CircleShape2D_cxlvu")
|
||||
@ -29,6 +29,7 @@ centered = false
|
||||
navigation_polygon = SubResource("NavigationPolygon_klx28")
|
||||
|
||||
[node name="KeyArea" type="Area2D" parent="." unique_id=538903225]
|
||||
unique_name_in_owner = true
|
||||
position = Vector2(755, 292)
|
||||
|
||||
[node name="CollisionShape2D" type="CollisionShape2D" parent="KeyArea" unique_id=1398173864]
|
||||
@ -36,6 +37,7 @@ shape = SubResource("RectangleShape2D_ih5bv")
|
||||
debug_color = Color(1, 1, 0, 0.41960785)
|
||||
|
||||
[node name="TwoPointArea" type="Area2D" parent="." unique_id=1591376341]
|
||||
unique_name_in_owner = true
|
||||
position = Vector2(760, 162.5)
|
||||
|
||||
[node name="TwoPointArc" type="CollisionShape2D" parent="TwoPointArea" unique_id=704197509]
|
||||
@ -1,11 +1,11 @@
|
||||
[gd_scene format=3 uid="uid://bhn3vm462n1rv"]
|
||||
|
||||
[ext_resource type="Script" uid="uid://0xvlu81d8a01" path="res://scripts/game_manager.gd" id="1_7jktm"]
|
||||
[ext_resource type="PackedScene" uid="uid://cxbu51aedxg3c" path="res://court.tscn" id="1_e2o6t"]
|
||||
[ext_resource type="PackedScene" uid="uid://i0ijmmchb3s1" path="res://hoop.tscn" id="4_215e1"]
|
||||
[ext_resource type="PackedScene" uid="uid://cxbu51aedxg3c" path="res://scenes/court.tscn" id="1_e2o6t"]
|
||||
[ext_resource type="PackedScene" uid="uid://i0ijmmchb3s1" path="res://scenes/hoop.tscn" id="4_215e1"]
|
||||
[ext_resource type="PackedScene" uid="uid://b7js4xq85ajf7" path="res://teams/orange_team.tscn" id="6_eow3j"]
|
||||
[ext_resource type="PackedScene" uid="uid://dndfw477wwjog" path="res://teams/blue_team.tscn" id="6_j5wjh"]
|
||||
[ext_resource type="PackedScene" uid="uid://cbqaj6trvqat0" path="res://ball.tscn" id="6_ryrav"]
|
||||
[ext_resource type="PackedScene" uid="uid://cbqaj6trvqat0" path="res://scenes/ball.tscn" id="6_ryrav"]
|
||||
|
||||
[node name="Game" type="Node2D" unique_id=980666470 node_paths=PackedStringArray("ball", "court", "home_team", "away_team")]
|
||||
script = ExtResource("1_7jktm")
|
||||
@ -2,12 +2,15 @@
|
||||
|
||||
[ext_resource type="Script" uid="uid://bs8r5rqnt33rf" path="res://scripts/player.gd" id="1_onrkg"]
|
||||
[ext_resource type="Texture2D" uid="uid://ctakygdw82fs2" path="res://assets/players/top-down/orange-45.png" id="2_onrkg"]
|
||||
[ext_resource type="PackedScene" uid="uid://nbb3fdh08hbk" path="res://player_label.tscn" id="3_i3pqv"]
|
||||
[ext_resource type="PackedScene" uid="uid://nbb3fdh08hbk" path="res://scenes/ui/player_label.tscn" id="3_i3pqv"]
|
||||
|
||||
[sub_resource type="CapsuleShape2D" id="CapsuleShape2D_i3pqv"]
|
||||
radius = 11.0
|
||||
height = 46.0
|
||||
|
||||
[sub_resource type="CircleShape2D" id="CircleShape2D_qhqgy"]
|
||||
radius = 75.0
|
||||
|
||||
[sub_resource type="Gradient" id="Gradient_i3pqv"]
|
||||
offsets = PackedFloat32Array(0, 0.74882627)
|
||||
colors = PackedColorArray(1, 1, 1, 0.5019608, 0, 0, 0, 0)
|
||||
@ -17,8 +20,6 @@ gradient = SubResource("Gradient_i3pqv")
|
||||
fill = 1
|
||||
fill_from = Vector2(0.5, 0.5)
|
||||
|
||||
[sub_resource type="Shortcut" id="Shortcut_hqtel"]
|
||||
|
||||
[node name="Player" type="CharacterBody2D" unique_id=1353719775]
|
||||
motion_mode = 1
|
||||
script = ExtResource("1_onrkg")
|
||||
@ -32,6 +33,11 @@ position = Vector2(1, 0)
|
||||
shape = SubResource("CapsuleShape2D_i3pqv")
|
||||
debug_color = Color(0.23987567, 0.6988715, 0.40862384, 0.41960785)
|
||||
|
||||
[node name="PlayerReachArea" type="Area2D" parent="." unique_id=1000158753]
|
||||
|
||||
[node name="CollisionShape2D" type="CollisionShape2D" parent="PlayerReachArea" unique_id=1228042585]
|
||||
shape = SubResource("CircleShape2D_qhqgy")
|
||||
|
||||
[node name="PlayerCamera" type="Camera2D" parent="." unique_id=1839930911]
|
||||
zoom = Vector2(1.5, 1.5)
|
||||
editor_draw_screen = false
|
||||
@ -42,7 +48,7 @@ radius = 25.0
|
||||
max_speed = 100000.0
|
||||
debug_enabled = true
|
||||
|
||||
[node name="NavTarget" type="Sprite2D" parent="." unique_id=1224616450]
|
||||
[node name="NavTargetSprite" type="Sprite2D" parent="." unique_id=1224616450]
|
||||
z_index = 10
|
||||
texture = SubResource("GradientTexture2D_hqtel")
|
||||
|
||||
@ -53,6 +59,7 @@ offset_right = -60.0
|
||||
offset_bottom = 30.0
|
||||
|
||||
[node name="PlayerUI" type="CanvasLayer" parent="." unique_id=742234296]
|
||||
visible = false
|
||||
|
||||
[node name="CenterContainer" type="CenterContainer" parent="PlayerUI" unique_id=964838525]
|
||||
anchors_preset = 15
|
||||
@ -71,5 +78,4 @@ layout_mode = 2
|
||||
[node name="EndTurnButton" type="Button" parent="PlayerUI/CenterContainer/VBoxContainer" unique_id=1003182030]
|
||||
unique_name_in_owner = true
|
||||
layout_mode = 2
|
||||
shortcut = SubResource("Shortcut_hqtel")
|
||||
text = "End Turn (E)"
|
||||
@ -1,3 +1,3 @@
|
||||
@icon("res://assets/icons/ball.svg")
|
||||
class_name Ball
|
||||
extends Node2D
|
||||
extends RigidBody2D
|
||||
|
||||
@ -1,3 +1,28 @@
|
||||
@icon("res://assets/icons/court.svg")
|
||||
class_name Court
|
||||
extends Node2D
|
||||
|
||||
@onready var key_area: Area2D = %KeyArea
|
||||
@onready var two_point_area: Area2D = %TwoPointArea
|
||||
|
||||
func _ready() -> void:
|
||||
key_area.connect("body_entered", on_key_area_entered)
|
||||
two_point_area.connect("body_entered", on_two_point_area_entered)
|
||||
key_area.connect("body_exited", on_key_area_exited)
|
||||
two_point_area.connect("body_exited", on_two_point_area_exited)
|
||||
|
||||
func on_key_area_entered(body: PhysicsBody2D) -> void:
|
||||
if body is Player:
|
||||
print_debug(str(body.attributes.player_name) + " has entered the key")
|
||||
|
||||
func on_two_point_area_entered(body: PhysicsBody2D) -> void:
|
||||
if body is Player:
|
||||
print_debug(str(body.attributes.player_name) + " has entered the two-point area")
|
||||
|
||||
func on_key_area_exited(body: PhysicsBody2D) -> void:
|
||||
if body is Player:
|
||||
print_debug(str(body.attributes.player_name) + " has exited the key")
|
||||
|
||||
func on_two_point_area_exited(body: PhysicsBody2D) -> void:
|
||||
if body is Player:
|
||||
print_debug(str(body.attributes.player_name) + " has exited the two-point area")
|
||||
|
||||
@ -7,6 +7,7 @@ extends Resource
|
||||
@export var player_name: String
|
||||
@export_range(0.0, 99.0, 1.0, "prefer_slider") var player_number: int
|
||||
@export var player_position: Globals.PlayerPosition
|
||||
@export_range(150.0, 250.0, 1.0, "prefer_slider") var player_height: float ## Player height in centimetres; determines reach.
|
||||
@export_group("Abilities")
|
||||
@export var speed: float
|
||||
@export var reflexes: float
|
||||
|
||||
@ -15,13 +15,10 @@ func _ready() -> void:
|
||||
players = get_tree().get_nodes_in_group("players")
|
||||
for player in players:
|
||||
player.connect("turn_finished", on_player_turn_finished)
|
||||
player.is_active = false
|
||||
active_player = players[0] as Player
|
||||
|
||||
|
||||
#func _input(event: InputEvent) -> void:
|
||||
#if event.is_action_pressed("")
|
||||
|
||||
|
||||
## Signal-handlers
|
||||
func on_player_turn_finished() -> void:
|
||||
print_debug("Moving to the next player in the turn order")
|
||||
|
||||
@ -1,5 +1,4 @@
|
||||
@icon("res://assets/icons/player.svg")
|
||||
#@tool
|
||||
class_name Player
|
||||
extends CharacterBody2D
|
||||
|
||||
@ -10,7 +9,7 @@ signal turn_finished
|
||||
@export var attributes: PlayerAttributes ## The attributes resource that defines the player's abilities, vitals etc.
|
||||
|
||||
## regular variables
|
||||
var is_active: bool: set = set_active
|
||||
var is_active: bool = false: set = set_active
|
||||
var player_label_offset: Vector2
|
||||
|
||||
## 'onready' variables
|
||||
@ -18,38 +17,35 @@ var player_label_offset: Vector2
|
||||
@onready var player_camera: Camera2D = $PlayerCamera
|
||||
@onready var player_label: PlayerLabel = $PlayerLabel
|
||||
@onready var player_nav: NavigationAgent2D = $PlayerNav
|
||||
@onready var nav_target: Sprite2D = $NavTarget
|
||||
@onready var player_reach_area: Area2D = $PlayerReachArea
|
||||
@onready var nav_target_sprite: Sprite2D = $NavTargetSprite
|
||||
@onready var player_sprite: Sprite2D = $PlayerSprite
|
||||
@onready var player_ui: CanvasLayer = $PlayerUI
|
||||
@onready var end_turn_button: Button = %EndTurnButton
|
||||
#@onready var end_turn_button: Button = %EndTurnButton
|
||||
|
||||
## Overrides
|
||||
func _ready() -> void:
|
||||
## signals
|
||||
end_turn_button.connect("button_down", end_turn)
|
||||
player_nav.connect("velocity_computed", on_velocity_computed)
|
||||
|
||||
is_active = false
|
||||
_connect_signals()
|
||||
#set_player_attributes(attributes)
|
||||
|
||||
if attributes:
|
||||
player_label.player_name = attributes.player_name
|
||||
player_label.player_number = attributes.player_number
|
||||
player_label.player_position = attributes.player_position
|
||||
player_sprite.texture = attributes.player_texture
|
||||
|
||||
_set_player_label_values(attributes)
|
||||
_set_player_sprite(attributes.player_texture)
|
||||
|
||||
player_label_offset = player_label.position
|
||||
|
||||
func _process(_delta: float) -> void:
|
||||
player_label.global_position = global_position + player_label_offset
|
||||
_set_player_label_position()
|
||||
if is_active:
|
||||
nav_target.global_position = get_global_mouse_position()
|
||||
_set_nav_sprite_position()
|
||||
|
||||
func _physics_process(delta: float) -> void:
|
||||
var desired_velocity: Vector2 = global_position.direction_to(player_nav.get_next_path_position()) * attributes.speed ## TODO: this doesn't seem to affect actual movement speed
|
||||
player_nav.velocity = desired_velocity
|
||||
#if player_nav.target_position:
|
||||
#player_nav.velocity = global_position.direction_to(player_nav.get_next_path_position())
|
||||
##var movement_direction =
|
||||
##translate(movement_direction)
|
||||
func _physics_process(_delta: float) -> void:
|
||||
_set_desired_velocity()
|
||||
if get_last_slide_collision():
|
||||
var collision = get_last_slide_collision()
|
||||
var collider = collision.get_collider()
|
||||
if collider is Ball:
|
||||
collider.apply_central_impulse(collision.get_normal() * -2.0)
|
||||
|
||||
func _input(event: InputEvent) -> void:
|
||||
if event.is_action_pressed("end_turn"):
|
||||
@ -60,33 +56,66 @@ func _input(event: InputEvent) -> void:
|
||||
player_nav.target_position = click_position_global
|
||||
var target_distance = player_nav.distance_to_target()
|
||||
print_debug("That's %s pixels/cm away" % target_distance)
|
||||
look_at(player_nav.target_position)
|
||||
|
||||
|
||||
## Setters
|
||||
func set_active(active: bool) -> void:
|
||||
is_active = active
|
||||
if is_active:
|
||||
print_debug("%s says: 'My turn!'" % attributes.player_name)
|
||||
player_ui.visible = true
|
||||
player_camera.enabled = true
|
||||
player_camera.make_current()
|
||||
nav_target.visible = true
|
||||
nav_target_sprite.visible = true
|
||||
set_process_input(true)
|
||||
else:
|
||||
print_debug("%s says: 'It's not my turn'" % attributes.player_name)
|
||||
player_ui.visible = false
|
||||
player_camera.enabled = false
|
||||
nav_target.visible = false
|
||||
nav_target_sprite.visible = false
|
||||
set_process_input(false)
|
||||
|
||||
## Helper functions/signal handlers
|
||||
|
||||
## Actions
|
||||
func end_turn() -> void:
|
||||
print_debug("%s says: I'd like my turn to end." % attributes.player_name)
|
||||
is_active = false
|
||||
turn_finished.emit()
|
||||
|
||||
## Helper functions
|
||||
func _connect_signals() -> void:
|
||||
player_nav.connect("velocity_computed", on_velocity_computed)
|
||||
player_reach_area.connect("body_entered", on_player_reach_area_body_entered)
|
||||
player_reach_area.connect("body_exited", on_player_reach_area_body_exited)
|
||||
|
||||
func _set_desired_velocity() -> void:
|
||||
var desired_velocity: Vector2 = global_position.direction_to(player_nav.get_next_path_position()) * attributes.speed
|
||||
player_nav.velocity = desired_velocity
|
||||
|
||||
func _set_player_label_position() -> void:
|
||||
player_label.global_position = global_position + player_label_offset
|
||||
|
||||
func _set_nav_sprite_position() -> void:
|
||||
nav_target_sprite.global_position = get_global_mouse_position()
|
||||
|
||||
func _set_player_label_values(attributes_resource: PlayerAttributes) -> void:
|
||||
player_label.player_name = attributes_resource.player_name
|
||||
player_label.player_number = attributes_resource.player_number
|
||||
player_label.player_position = attributes_resource.player_position
|
||||
|
||||
func _set_player_sprite(texture: Texture2D) -> void:
|
||||
player_sprite.texture = texture
|
||||
|
||||
## Signal handlers
|
||||
func on_player_reach_area_body_entered(body: PhysicsBody2D) -> void:
|
||||
if body is Player:
|
||||
print_debug((body.attributes.player_name) + " has entered %s's reach area" % attributes.player_name)
|
||||
elif body is Ball:
|
||||
print_debug("The ball has entered %s's reach area" % attributes.player_name)
|
||||
|
||||
func on_player_reach_area_body_exited(body: PhysicsBody2D) -> void:
|
||||
if body is Player:
|
||||
print_debug((body.attributes.player_name) + " has exited %s's reach area" % attributes.player_name)
|
||||
elif body is Ball:
|
||||
print_debug("The ball has exited %s's reach area" % attributes.player_name)
|
||||
|
||||
func on_velocity_computed(safe_velocity: Vector2) -> void:
|
||||
look_at(player_nav.get_next_path_position())
|
||||
velocity = safe_velocity
|
||||
move_and_slide()
|
||||
|
||||
@ -3,3 +3,4 @@ class_name Team
|
||||
extends Node2D
|
||||
|
||||
@export var attributes: TeamAttributes
|
||||
@export var players: Array[Player]
|
||||
|
||||
@ -1,8 +1,8 @@
|
||||
[gd_scene format=3 uid="uid://dndfw477wwjog"]
|
||||
|
||||
[ext_resource type="PackedScene" uid="uid://cfq463kejcp2m" path="res://team.tscn" id="1_7xvty"]
|
||||
[ext_resource type="PackedScene" uid="uid://cfq463kejcp2m" path="res://scenes/team.tscn" id="1_7xvty"]
|
||||
[ext_resource type="Script" uid="uid://c7dxj0ifl687s" path="res://scripts/custom resources/team_attributes.gd" id="2_rosww"]
|
||||
[ext_resource type="PackedScene" uid="uid://boqs7k6ia532h" path="res://player.tscn" id="3_8v3ba"]
|
||||
[ext_resource type="PackedScene" uid="uid://boqs7k6ia532h" path="res://scenes/player.tscn" id="3_8v3ba"]
|
||||
[ext_resource type="Texture2D" uid="uid://btwb84mew7whb" path="res://assets/players/top-down/blue-45.png" id="4_21h5f"]
|
||||
[ext_resource type="Script" uid="uid://bbey5ttwv5utd" path="res://scripts/custom resources/player_attributes.gd" id="5_bwj7y"]
|
||||
[ext_resource type="Texture2D" uid="uid://cf8i6dbhws3ig" path="res://assets/players/top-down/blue-50.png" id="6_21h5f"]
|
||||
|
||||
@ -1,8 +1,8 @@
|
||||
[gd_scene format=3 uid="uid://b7js4xq85ajf7"]
|
||||
|
||||
[ext_resource type="PackedScene" uid="uid://cfq463kejcp2m" path="res://team.tscn" id="1_m0gtt"]
|
||||
[ext_resource type="PackedScene" uid="uid://cfq463kejcp2m" path="res://scenes/team.tscn" id="1_m0gtt"]
|
||||
[ext_resource type="Script" uid="uid://c7dxj0ifl687s" path="res://scripts/custom resources/team_attributes.gd" id="2_qxtr2"]
|
||||
[ext_resource type="PackedScene" uid="uid://boqs7k6ia532h" path="res://player.tscn" id="3_oxqyn"]
|
||||
[ext_resource type="PackedScene" uid="uid://boqs7k6ia532h" path="res://scenes/player.tscn" id="3_oxqyn"]
|
||||
[ext_resource type="Texture2D" uid="uid://ctakygdw82fs2" path="res://assets/players/top-down/orange-45.png" id="4_dbbjc"]
|
||||
[ext_resource type="Script" uid="uid://bbey5ttwv5utd" path="res://scripts/custom resources/player_attributes.gd" id="5_ssmnd"]
|
||||
[ext_resource type="Texture2D" uid="uid://nwm6exs2vod6" path="res://assets/players/top-down/orange-50.png" id="6_dbbjc"]
|
||||
@ -50,9 +50,6 @@ attributes = SubResource("Resource_hms1j")
|
||||
position = Vector2(6284.951, 0)
|
||||
attributes = SubResource("Resource_jsul0")
|
||||
|
||||
[node name="PlayerNav" parent="Orange1" index="3" unique_id=1205813043]
|
||||
debug_use_custom = true
|
||||
|
||||
[node name="Orange2" parent="." index="1" unique_id=1623179654 instance=ExtResource("3_oxqyn")]
|
||||
position = Vector2(3503.8748, 0)
|
||||
attributes = SubResource("Resource_ufsyq")
|
||||
@ -60,5 +57,3 @@ attributes = SubResource("Resource_ufsyq")
|
||||
[node name="Orange3" parent="." index="2" unique_id=964363928 instance=ExtResource("3_oxqyn")]
|
||||
position = Vector2(4278.757, 0)
|
||||
attributes = SubResource("Resource_nbn31")
|
||||
|
||||
[editable path="Orange1"]
|
||||
|
||||
Loading…
Reference in New Issue
Block a user