1
0
Fork 0

add player/enemy system

This commit is contained in:
Michaël Lemaire 2022-10-06 01:21:40 +02:00
parent fdce0c7a76
commit 0d077ce1a0
15 changed files with 200 additions and 10 deletions

6
core/player.gd Normal file
View 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
View 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 = ""

View file

@ -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)

View file

@ -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)

View file

@ -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
View 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

View file

@ -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="."]

View file

@ -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="."]

View file

@ -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

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

View 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

View 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

View file

@ -7,5 +7,6 @@ extends Unit
_check_compose()
func _compose():
super._compose()
$spawner.unit_type = produced_unit
$spawner.player = player
super._compose()

View file

@ -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
View 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")