refactoring
This commit is contained in:
parent
3840c135a7
commit
a1fc8d912a
|
@ -1,4 +1,4 @@
|
|||
extends CanvasLayer
|
||||
extends Node2D
|
||||
class_name BattleField
|
||||
|
||||
var _ticker1 := 0.0
|
||||
|
|
|
@ -2,6 +2,5 @@
|
|||
|
||||
[ext_resource type="Script" path="res://core/battlefield.gd" id="1_u7icn"]
|
||||
|
||||
[node name="battlefield" type="CanvasLayer"]
|
||||
follow_viewport_enabled = true
|
||||
[node name="battlefield" type="Node2D"]
|
||||
script = ExtResource("1_u7icn")
|
||||
|
|
|
@ -0,0 +1,12 @@
|
|||
extends Camera2D
|
||||
|
||||
var raw_zoom := 0.0
|
||||
|
||||
func scroll(diff: Vector2):
|
||||
position -= diff
|
||||
|
||||
func change_zoom(diff: float):
|
||||
raw_zoom = clampf(raw_zoom + diff, -2, 2)
|
||||
|
||||
var z := pow(2.0, raw_zoom)
|
||||
zoom = Vector2(z, z)
|
|
@ -0,0 +1,10 @@
|
|||
[gd_scene load_steps=2 format=3 uid="uid://ck41r2je85sm3"]
|
||||
|
||||
[ext_resource type="Script" path="res://core/ui/camera.gd" id="1_pdh08"]
|
||||
|
||||
[node name="camera" type="Camera2D"]
|
||||
position = Vector2(640, 360)
|
||||
current = true
|
||||
position_smoothing_enabled = true
|
||||
position_smoothing_speed = 12.0
|
||||
script = ExtResource("1_pdh08")
|
|
@ -11,11 +11,20 @@ signal clicked
|
|||
else:
|
||||
icon = PlaceholderTexture2D.new()
|
||||
_check_compose()
|
||||
|
||||
@export var color: Color:
|
||||
set(val):
|
||||
if val is Color:
|
||||
color = val
|
||||
else:
|
||||
color = Color.BLACK
|
||||
_check_compose()
|
||||
|
||||
@export var code: String
|
||||
|
||||
func _compose():
|
||||
$badge/icon.texture = icon
|
||||
$badge.self_modulate = color
|
||||
super._compose()
|
||||
|
||||
func _on_click_input_event(viewport, event, shape_idx):
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
|
||||
[sub_resource type="Gradient" id="Gradient_i2fje"]
|
||||
offsets = PackedFloat32Array(0, 0.845528, 1)
|
||||
colors = PackedColorArray(0.631696, 0, 0.0105082, 1, 0.604306, 0, 0.0100526, 0.95664, 0, 0, 0, 0)
|
||||
colors = PackedColorArray(0.51, 0.51, 0.51, 1, 0.6, 0.6, 0.6, 0.956863, 0, 0, 0, 0)
|
||||
|
||||
[sub_resource type="GradientTexture2D" id="GradientTexture2D_3dnb6"]
|
||||
gradient = SubResource("Gradient_i2fje")
|
||||
|
@ -19,6 +19,7 @@ radius = 80.0
|
|||
|
||||
[node name="command" type="Node2D"]
|
||||
script = ExtResource("1_bwbsk")
|
||||
code = ""
|
||||
|
||||
[node name="badge" type="Sprite2D" parent="."]
|
||||
texture = SubResource("GradientTexture2D_3dnb6")
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
extends CanvasLayer
|
||||
extends Node
|
||||
|
||||
@export var player: Node:
|
||||
set(val):
|
||||
|
@ -6,44 +6,46 @@ extends CanvasLayer
|
|||
player = val
|
||||
else:
|
||||
player = null
|
||||
|
||||
@export var camera: Camera2D
|
||||
|
||||
@export var available_commands: Array[PackedScene]
|
||||
|
||||
signal commands_changed(commander, commands)
|
||||
|
||||
func _ready():
|
||||
$stock.visible = false
|
||||
$wheel.visible = false
|
||||
%stock.visible = false
|
||||
%wheel.visible = false
|
||||
|
||||
if available_commands:
|
||||
for command_scene in available_commands:
|
||||
var command := command_scene.instantiate()
|
||||
$stock.add_child(command)
|
||||
%stock.add_child(command)
|
||||
|
||||
func _unhandled_input(event: InputEvent):
|
||||
if event is InputEventMouseButton:
|
||||
if event.button_index == MOUSE_BUTTON_LEFT and not event.pressed:
|
||||
get_viewport().set_input_as_handled()
|
||||
_show_command_wheel(event.position)
|
||||
|
||||
func _show_command_wheel(pos: Vector2):
|
||||
var wheel := $wheel as Node2D
|
||||
var wheel := %wheel as Node2D
|
||||
wheel.position = pos
|
||||
|
||||
# TODO center cam ?
|
||||
|
||||
for command in $wheel.get_children():
|
||||
for command in %wheel.get_children():
|
||||
command.queue_free()
|
||||
|
||||
for command in $stock.get_children():
|
||||
for command in %stock.get_children():
|
||||
# TODO only available
|
||||
command = command.duplicate()
|
||||
command.color = player.color
|
||||
command.connect("clicked", _on_wheel_command_clicked.bind(command))
|
||||
$wheel.add_child(command)
|
||||
%wheel.add_child(command)
|
||||
|
||||
wheel.visible = true
|
||||
|
||||
func _on_wheel_command_clicked(command: Command):
|
||||
command.apply($active, $wheel.position)
|
||||
$wheel.visible = false
|
||||
commands_changed.emit(player, $active.get_children())
|
||||
command.apply(%active, %wheel.position)
|
||||
%wheel.visible = false
|
||||
commands_changed.emit(player, %active.get_children())
|
||||
|
||||
func background_clicked(pos):
|
||||
if camera:
|
||||
pos = camera.get_canvas_transform().inverse() * pos
|
||||
_show_command_wheel(pos)
|
||||
|
|
|
@ -2,14 +2,15 @@
|
|||
|
||||
[ext_resource type="Script" path="res://core/ui/commands.gd" id="1_8b4dn"]
|
||||
|
||||
[node name="commands" type="CanvasLayer"]
|
||||
layer = 2
|
||||
follow_viewport_enabled = true
|
||||
[node name="commands" type="Node2D"]
|
||||
script = ExtResource("1_8b4dn")
|
||||
|
||||
[node name="wheel" type="Node2D" parent="."]
|
||||
|
||||
[node name="stock" type="Node2D" parent="."]
|
||||
unique_name_in_owner = true
|
||||
visible = false
|
||||
|
||||
[node name="wheel" type="Node2D" parent="."]
|
||||
unique_name_in_owner = true
|
||||
|
||||
[node name="active" type="Node2D" parent="."]
|
||||
unique_name_in_owner = true
|
||||
|
|
|
@ -0,0 +1,36 @@
|
|||
extends Control
|
||||
|
||||
signal scrolled(diff: Vector2)
|
||||
signal clicked(pos: Vector2)
|
||||
signal zoomed(diff: float)
|
||||
|
||||
var pressed = false
|
||||
|
||||
func _ready():
|
||||
get_viewport().connect("size_changed", resize)
|
||||
resize()
|
||||
|
||||
func resize():
|
||||
set_deferred("size", get_viewport().size)
|
||||
|
||||
func _gui_input(event):
|
||||
if event is InputEventMouseMotion:
|
||||
if event.button_mask & MOUSE_BUTTON_LEFT:
|
||||
pressed = false
|
||||
scrolled.emit(event.relative)
|
||||
accept_event()
|
||||
if event is InputEventMouseButton:
|
||||
if event.pressed:
|
||||
if event.button_index == MOUSE_BUTTON_WHEEL_UP:
|
||||
zoomed.emit(signf(event.factor))
|
||||
accept_event()
|
||||
elif event.button_index == MOUSE_BUTTON_WHEEL_DOWN:
|
||||
zoomed.emit(-signf(event.factor))
|
||||
accept_event()
|
||||
elif event.button_index == MOUSE_BUTTON_LEFT:
|
||||
pressed = true
|
||||
else:
|
||||
if event.button_index == MOUSE_BUTTON_LEFT and pressed:
|
||||
accept_event()
|
||||
pressed = false
|
||||
clicked.emit(event.position)
|
|
@ -0,0 +1,15 @@
|
|||
[gd_scene load_steps=2 format=3 uid="uid://boo6ta2m7e55o"]
|
||||
|
||||
[ext_resource type="Script" path="res://core/ui/inputs.gd" id="1_wm60j"]
|
||||
|
||||
[node name="inputs" type="Control"]
|
||||
layout_mode = 3
|
||||
anchors_preset = 15
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
size_flags_horizontal = 3
|
||||
size_flags_vertical = 3
|
||||
mouse_force_pass_scroll_events = false
|
||||
script = ExtResource("1_wm60j")
|
92
main.tscn
92
main.tscn
|
@ -1,91 +1,49 @@
|
|||
[gd_scene load_steps=8 format=3 uid="uid://c6omib6txy3qh"]
|
||||
|
||||
[ext_resource type="PackedScene" uid="uid://ck41r2je85sm3" path="res://core/ui/camera.tscn" id="1_7evrt"]
|
||||
[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://boo6ta2m7e55o" path="res://core/ui/inputs.tscn" id="2_wkcj2"]
|
||||
[ext_resource type="PackedScene" uid="uid://b8uik6q4v35o3" path="res://tac/units/factory.tscn" id="2_wnc50"]
|
||||
[ext_resource type="PackedScene" uid="uid://xoup4vukp3ni" path="res://core/ui/commands.tscn" id="4_1gkbi"]
|
||||
[ext_resource type="PackedScene" uid="uid://dr1e0h27nuam" path="res://tac/commands/delivery.tscn" id="5_fi2mi"]
|
||||
|
||||
[sub_resource type="GDScript" id="GDScript_8ehhf"]
|
||||
script/source = "extends Camera2D
|
||||
|
||||
var raw_zoom := 0
|
||||
|
||||
func scroll(diff: Vector2):
|
||||
position -= diff
|
||||
|
||||
func change_zoom(diff: float):
|
||||
raw_zoom = clampf(raw_zoom + diff, -2, 2)
|
||||
|
||||
var z := pow(2.0, raw_zoom)
|
||||
zoom = Vector2(z, z)
|
||||
"
|
||||
|
||||
[sub_resource type="GDScript" id="GDScript_0auct"]
|
||||
script/source = "extends Control
|
||||
|
||||
signal scrolled(diff)
|
||||
signal zoomed(diff)
|
||||
|
||||
func _unhandled_input(event):
|
||||
if event is InputEventMouseMotion:
|
||||
if event.button_mask & MOUSE_BUTTON_LEFT:
|
||||
scrolled.emit(event.relative)
|
||||
accept_event()
|
||||
if event is InputEventMouseButton and event.pressed:
|
||||
if event.button_index == MOUSE_BUTTON_WHEEL_UP:
|
||||
zoomed.emit(signf(event.factor))
|
||||
accept_event()
|
||||
elif event.button_index == MOUSE_BUTTON_WHEEL_DOWN:
|
||||
zoomed.emit(-signf(event.factor))
|
||||
accept_event()
|
||||
"
|
||||
|
||||
[node name="main" type="Node2D"]
|
||||
|
||||
[node name="camera" type="Camera2D" parent="."]
|
||||
position = Vector2(640, 360)
|
||||
current = true
|
||||
script = SubResource("GDScript_8ehhf")
|
||||
[node name="camera" parent="." instance=ExtResource("1_7evrt")]
|
||||
|
||||
[node name="battlefield" parent="." instance=ExtResource("1_x63ik")]
|
||||
[node name="backui" type="CanvasLayer" parent="."]
|
||||
layer = -1
|
||||
|
||||
[node name="player1" parent="battlefield" instance=ExtResource("2_o4smw")]
|
||||
[node name="inputs" parent="backui" instance=ExtResource("2_wkcj2")]
|
||||
|
||||
[node name="world" type="CanvasLayer" parent="."]
|
||||
follow_viewport_enabled = true
|
||||
|
||||
[node name="player1" parent="world" instance=ExtResource("2_o4smw")]
|
||||
color = Color(0, 0, 1, 1)
|
||||
code = "p1"
|
||||
|
||||
[node name="player2" parent="battlefield" instance=ExtResource("2_o4smw")]
|
||||
[node name="player2" parent="world" 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")]
|
||||
[node name="battlefield" parent="world" instance=ExtResource("1_x63ik")]
|
||||
|
||||
[node name="factory1" parent="world/battlefield" node_paths=PackedStringArray("player") instance=ExtResource("2_wnc50")]
|
||||
position = Vector2(270, 222)
|
||||
player = NodePath("../player1")
|
||||
player = NodePath("../../player1")
|
||||
|
||||
[node name="factory2" parent="battlefield" node_paths=PackedStringArray("player") instance=ExtResource("2_wnc50")]
|
||||
[node name="factory2" parent="world/battlefield" node_paths=PackedStringArray("player") instance=ExtResource("2_wnc50")]
|
||||
position = Vector2(929, 429)
|
||||
player = NodePath("../player2")
|
||||
player = NodePath("../../player2")
|
||||
|
||||
[node name="commands" parent="." node_paths=PackedStringArray("player") instance=ExtResource("4_1gkbi")]
|
||||
player = NodePath("../battlefield/player1")
|
||||
[node name="commands" parent="world" node_paths=PackedStringArray("player", "camera") instance=ExtResource("4_1gkbi")]
|
||||
player = NodePath("../player1")
|
||||
camera = NodePath("../../camera")
|
||||
available_commands = [ExtResource("5_fi2mi")]
|
||||
|
||||
[node name="ui" type="CanvasLayer" parent="."]
|
||||
layer = 3
|
||||
|
||||
[node name="camcontrol" type="Control" parent="ui"]
|
||||
layout_mode = 3
|
||||
anchors_preset = 15
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
size_flags_horizontal = 3
|
||||
size_flags_vertical = 3
|
||||
mouse_filter = 2
|
||||
mouse_force_pass_scroll_events = false
|
||||
script = SubResource("GDScript_0auct")
|
||||
|
||||
[connection signal="commands_changed" from="commands" to="battlefield" method="_on_commands_changed"]
|
||||
[connection signal="scrolled" from="ui/camcontrol" to="camera" method="scroll"]
|
||||
[connection signal="zoomed" from="ui/camcontrol" to="camera" method="change_zoom"]
|
||||
[connection signal="clicked" from="backui/inputs" to="world/commands" method="background_clicked"]
|
||||
[connection signal="scrolled" from="backui/inputs" to="camera" method="scroll"]
|
||||
[connection signal="zoomed" from="backui/inputs" to="camera" method="change_zoom"]
|
||||
[connection signal="commands_changed" from="world/commands" to="world/battlefield" method="_on_commands_changed"]
|
||||
|
|
|
@ -9,7 +9,7 @@
|
|||
config_version=5
|
||||
|
||||
_global_script_classes=[{
|
||||
"base": "CanvasLayer",
|
||||
"base": "Node2D",
|
||||
"class": &"BattleField",
|
||||
"language": &"GDScript",
|
||||
"path": "res://core/battlefield.gd"
|
||||
|
|
Loading…
Reference in New Issue