add player/enemy system
This commit is contained in:
parent
fdce0c7a76
commit
0d077ce1a0
6
core/player.gd
Normal file
6
core/player.gd
Normal file
|
@ -0,0 +1,6 @@
|
|||
@tool
|
||||
extends Node
|
||||
class_name Player
|
||||
|
||||
@export var color = Color.WHITE
|
||||
@export var code: String
|
7
core/player.tscn
Normal file
7
core/player.tscn
Normal file
|
@ -0,0 +1,7 @@
|
|||
[gd_scene load_steps=2 format=3 uid="uid://dqaabctftkakr"]
|
||||
|
||||
[ext_resource type="Script" path="res://core/player.gd" id="1_6rga0"]
|
||||
|
||||
[node name="player" type="Node" groups=["player"]]
|
||||
script = ExtResource("1_6rga0")
|
||||
code = ""
|
|
@ -4,12 +4,20 @@ class_name Spawner
|
|||
|
||||
@export var unit_type: PackedScene
|
||||
@export var spawn_duration = 1.0
|
||||
var _spawning_since = 0.0
|
||||
|
||||
@export var player: Node:
|
||||
set(val):
|
||||
if val is Player:
|
||||
player = val
|
||||
else:
|
||||
player = null
|
||||
|
||||
@export var delivery = Vector2(100.0, 0.0):
|
||||
set(val):
|
||||
delivery = val
|
||||
_check_compose()
|
||||
|
||||
var _spawning_since = 0.0
|
||||
|
||||
func _compose():
|
||||
$delivery.position = delivery
|
||||
|
@ -27,6 +35,7 @@ func spawn():
|
|||
var unit := unit_type.instantiate()
|
||||
if unit is Unit:
|
||||
unit.position = delivery
|
||||
unit.player = player
|
||||
_spawning_since = min(0.0, _spawning_since - spawn_duration)
|
||||
# FIXME add to battlefield
|
||||
add_child(unit)
|
||||
|
|
44
core/unit.gd
44
core/unit.gd
|
@ -2,10 +2,54 @@
|
|||
class_name Unit
|
||||
extends Composer
|
||||
|
||||
@export var can_move = false
|
||||
|
||||
@export var sprite: Texture2D:
|
||||
set(val):
|
||||
sprite = val
|
||||
_check_compose()
|
||||
|
||||
@export var player: Node:
|
||||
set(val):
|
||||
if val is Player:
|
||||
player = val
|
||||
else:
|
||||
player = null
|
||||
|
||||
var target_reached = true
|
||||
var target_position: Vector2
|
||||
|
||||
func _compose():
|
||||
$sprite.texture = sprite
|
||||
if player:
|
||||
# TODO something more subtle
|
||||
modulate = player.color
|
||||
if player.code and not Engine.is_editor_hint():
|
||||
add_to_group("player:" + player.code)
|
||||
|
||||
func _physics_process(delta):
|
||||
if not target_reached:
|
||||
# TODO use position instead of position, once parented to battlefield
|
||||
global_position += (target_position - global_position).normalized() * 100.0 * delta
|
||||
if global_position == target_position:
|
||||
target_reached = true
|
||||
|
||||
make_decision() # TODO not every tick
|
||||
|
||||
func set_target(pos: Vector2):
|
||||
if pos != target_position:
|
||||
target_position = pos
|
||||
target_reached = false
|
||||
|
||||
func make_decision():
|
||||
if can_move:
|
||||
var enemy: Unit = null
|
||||
var closest := INF
|
||||
for unit in get_tree().get_nodes_in_group("unit"):
|
||||
if unit is Unit and unit.player != player:
|
||||
var distance := global_position.distance_to(unit.global_position)
|
||||
if distance < closest:
|
||||
closest = distance
|
||||
enemy = unit
|
||||
if enemy:
|
||||
set_target(enemy.global_position)
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
[ext_resource type="Script" path="res://core/unit.gd" id="1_1i367"]
|
||||
|
||||
[node name="unit" type="Node2D"]
|
||||
[node name="unit" type="Node2D" groups=["unit"]]
|
||||
script = ExtResource("1_1i367")
|
||||
|
||||
[node name="sprite" type="Sprite2D" parent="."]
|
||||
|
|
11
core/weapon.gd
Normal file
11
core/weapon.gd
Normal file
|
@ -0,0 +1,11 @@
|
|||
@tool
|
||||
extends Composer
|
||||
class_name Weapon
|
||||
|
||||
@export var sprite: Texture2D:
|
||||
set(val):
|
||||
sprite = val
|
||||
_check_compose()
|
||||
|
||||
func _compose():
|
||||
$sprite.texture = sprite
|
|
@ -1,3 +1,8 @@
|
|||
[gd_scene format=3 uid="uid://cjegfdo7jw38q"]
|
||||
[gd_scene load_steps=2 format=3 uid="uid://cjegfdo7jw38q"]
|
||||
|
||||
[ext_resource type="Script" path="res://core/weapon.gd" id="1_vw2y4"]
|
||||
|
||||
[node name="weapon" type="Node2D"]
|
||||
script = ExtResource("1_vw2y4")
|
||||
|
||||
[node name="sprite" type="Sprite2D" parent="."]
|
||||
|
|
21
main.tscn
21
main.tscn
|
@ -1,14 +1,27 @@
|
|||
[gd_scene load_steps=3 format=3 uid="uid://c6omib6txy3qh"]
|
||||
[gd_scene load_steps=4 format=3 uid="uid://c6omib6txy3qh"]
|
||||
|
||||
[ext_resource type="PackedScene" uid="uid://brbtq46uk18gg" path="res://core/battlefield.tscn" id="1_x63ik"]
|
||||
[ext_resource type="PackedScene" uid="uid://dqaabctftkakr" path="res://core/player.tscn" id="2_o4smw"]
|
||||
[ext_resource type="PackedScene" uid="uid://b8uik6q4v35o3" path="res://tac/units/factory.tscn" id="2_wnc50"]
|
||||
|
||||
[node name="main" type="Node2D"]
|
||||
|
||||
[node name="battlefield" parent="." instance=ExtResource("1_x63ik")]
|
||||
|
||||
[node name="factory" parent="battlefield" instance=ExtResource("2_wnc50")]
|
||||
position = Vector2(216, 262)
|
||||
script = null
|
||||
[node name="player1" parent="battlefield" instance=ExtResource("2_o4smw")]
|
||||
color = Color(0, 0, 1, 1)
|
||||
code = "p1"
|
||||
|
||||
[node name="player2" parent="battlefield" instance=ExtResource("2_o4smw")]
|
||||
color = Color(1, 0, 0, 1)
|
||||
code = "p2"
|
||||
|
||||
[node name="factory1" parent="battlefield" node_paths=PackedStringArray("player") instance=ExtResource("2_wnc50")]
|
||||
position = Vector2(270, 222)
|
||||
player = NodePath("../player1")
|
||||
|
||||
[node name="factory2" parent="battlefield" node_paths=PackedStringArray("player") instance=ExtResource("2_wnc50")]
|
||||
position = Vector2(929, 429)
|
||||
player = NodePath("../player2")
|
||||
|
||||
[node name="ui" type="CanvasLayer" parent="."]
|
||||
|
|
|
@ -14,6 +14,11 @@ _global_script_classes=[{
|
|||
"language": &"GDScript",
|
||||
"path": "res://core/composer.gd"
|
||||
}, {
|
||||
"base": "Node",
|
||||
"class": &"Player",
|
||||
"language": &"GDScript",
|
||||
"path": "res://core/player.gd"
|
||||
}, {
|
||||
"base": "Composer",
|
||||
"class": &"Spawner",
|
||||
"language": &"GDScript",
|
||||
|
@ -23,11 +28,18 @@ _global_script_classes=[{
|
|||
"class": &"Unit",
|
||||
"language": &"GDScript",
|
||||
"path": "res://core/unit.gd"
|
||||
}, {
|
||||
"base": "Composer",
|
||||
"class": &"Weapon",
|
||||
"language": &"GDScript",
|
||||
"path": "res://core/weapon.gd"
|
||||
}]
|
||||
_global_script_class_icons={
|
||||
"Composer": "",
|
||||
"Player": "",
|
||||
"Spawner": "",
|
||||
"Unit": ""
|
||||
"Unit": "",
|
||||
"Weapon": ""
|
||||
}
|
||||
|
||||
[application]
|
||||
|
|
BIN
tac/assets/turret1.png
Normal file
BIN
tac/assets/turret1.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 1.3 KiB |
34
tac/assets/turret1.png.import
Normal file
34
tac/assets/turret1.png.import
Normal file
|
@ -0,0 +1,34 @@
|
|||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://f50jxvf24eq"
|
||||
path="res://.godot/imported/turret1.png-6ae12f481bfa83613e2e699160f305aa.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://tac/assets/turret1.png"
|
||||
dest_files=["res://.godot/imported/turret1.png-6ae12f481bfa83613e2e699160f305aa.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/lossy_quality=0.7
|
||||
compress/hdr_compression=1
|
||||
compress/bptc_ldr=0
|
||||
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
|
34
tac/assets/turret_1.png.import
Normal file
34
tac/assets/turret_1.png.import
Normal file
|
@ -0,0 +1,34 @@
|
|||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://ch2tifa0qxhpn"
|
||||
path="res://.godot/imported/turret_1.png-ec61205419b69a0ceddc07ea23f94af2.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://tac/assets/turret_1.png"
|
||||
dest_files=["res://.godot/imported/turret_1.png-ec61205419b69a0ceddc07ea23f94af2.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/lossy_quality=0.7
|
||||
compress/hdr_compression=1
|
||||
compress/bptc_ldr=0
|
||||
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
|
|
@ -7,5 +7,6 @@ extends Unit
|
|||
_check_compose()
|
||||
|
||||
func _compose():
|
||||
super._compose()
|
||||
$spawner.unit_type = produced_unit
|
||||
$spawner.player = player
|
||||
super._compose()
|
||||
|
|
|
@ -1,10 +1,14 @@
|
|||
[gd_scene load_steps=3 format=3 uid="uid://b05ykot10q8no"]
|
||||
[gd_scene load_steps=4 format=3 uid="uid://b05ykot10q8no"]
|
||||
|
||||
[ext_resource type="PackedScene" uid="uid://bft45rcp7v3a6" path="res://core/unit.tscn" id="1_2ka4q"]
|
||||
[ext_resource type="Texture2D" uid="uid://2nhprnyswhyh" path="res://tac/assets/ship_small_1.png" id="2_oablw"]
|
||||
[ext_resource type="PackedScene" uid="uid://byg2bmiy2gia0" path="res://tac/weapons/turret.tscn" id="3_rt3r8"]
|
||||
|
||||
[node name="fighter" instance=ExtResource("1_2ka4q")]
|
||||
can_move = true
|
||||
sprite = ExtResource("2_oablw")
|
||||
|
||||
[node name="sprite" parent="." index="0"]
|
||||
texture = ExtResource("2_oablw")
|
||||
|
||||
[node name="turret" parent="." index="1" instance=ExtResource("3_rt3r8")]
|
||||
|
|
10
tac/weapons/turret.tscn
Normal file
10
tac/weapons/turret.tscn
Normal file
|
@ -0,0 +1,10 @@
|
|||
[gd_scene load_steps=3 format=3 uid="uid://byg2bmiy2gia0"]
|
||||
|
||||
[ext_resource type="PackedScene" uid="uid://cjegfdo7jw38q" path="res://core/weapon.tscn" id="1_l2lnm"]
|
||||
[ext_resource type="Texture2D" uid="uid://f50jxvf24eq" path="res://tac/assets/turret1.png" id="2_f2xj2"]
|
||||
|
||||
[node name="turret" instance=ExtResource("1_l2lnm")]
|
||||
sprite = ExtResource("2_f2xj2")
|
||||
|
||||
[node name="sprite" parent="." index="0"]
|
||||
texture = ExtResource("2_f2xj2")
|
Loading…
Reference in a new issue