Skip to content

Commit

Permalink
feat: add loading and other map improvements (#83)
Browse files Browse the repository at this point in the history
  • Loading branch information
EehMauro authored Oct 29, 2024
1 parent 5e98ea0 commit f243e3a
Show file tree
Hide file tree
Showing 7 changed files with 172 additions and 53 deletions.
Binary file added godot-visualizer/resources/loader.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
34 changes: 34 additions & 0 deletions godot-visualizer/resources/loader.png.import
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
[remap]

importer="texture"
type="CompressedTexture2D"
uid="uid://dqpu7ll4k1fs1"
path="res://.godot/imported/loader.png-f55b428229f66841f7c0c72bed1df893.ctex"
metadata={
"vram_texture": false
}

[deps]

source_file="res://resources/loader.png"
dest_files=["res://.godot/imported/loader.png-f55b428229f66841f7c0c72bed1df893.ctex"]

[params]

compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/hdr_compression=1
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
38 changes: 27 additions & 11 deletions godot-visualizer/scenes/main.tscn
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
[gd_scene load_steps=36 format=3 uid="uid://b5ypw8og4vdle"]
[gd_scene load_steps=37 format=3 uid="uid://b5ypw8og4vdle"]

[ext_resource type="Script" path="res://scripts/main.gd" id="1_4dsde"]
[ext_resource type="PackedScene" uid="uid://ch6xqejnd1rqf" path="res://scenes/map.tscn" id="1_quhpi"]
Expand Down Expand Up @@ -27,6 +27,7 @@
[ext_resource type="StyleBox" uid="uid://cuqtwls2gtt0v" path="res://resources/textures/tooltip.tres" id="25_q05r4"]
[ext_resource type="FontFile" uid="uid://2ctrem352y4" path="res://resources/fonts/JetBrainsMono.ttf" id="26_btrf2"]
[ext_resource type="FontFile" uid="uid://b7vayqoopjyv" path="res://resources/fonts/DMSans.ttf" id="27_u6i6b"]
[ext_resource type="Texture2D" uid="uid://dqpu7ll4k1fs1" path="res://resources/loader.png" id="28_wxhmh"]

[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_gt7hn"]
bg_color = Color(1, 1, 1, 1)
Expand Down Expand Up @@ -64,7 +65,6 @@ follow_viewport_enabled = true
layer = 2

[node name="Tooltip" type="Panel" parent="GUICanvasLayer"]
visible = false
custom_minimum_size = Vector2(560, 392)
offset_right = 560.0
offset_bottom = 392.0
Expand All @@ -91,7 +91,7 @@ layout_mode = 2
theme_override_colors/font_color = Color(1, 1, 1, 1)
theme_override_fonts/font = ExtResource("26_btrf2")
theme_override_font_sizes/font_size = 36
text = "SHIP"
text = "TITLE"
horizontal_alignment = 1
text_overrun_behavior = 3
uppercase = true
Expand All @@ -101,36 +101,36 @@ custom_minimum_size = Vector2(0, 1)
layout_mode = 2
theme_override_styles/panel = SubResource("StyleBoxFlat_gt7hn")

[node name="Position" type="Label" parent="GUICanvasLayer/Tooltip/MarginContainer/VBoxContainer"]
[node name="Label1" type="Label" parent="GUICanvasLayer/Tooltip/MarginContainer/VBoxContainer"]
layout_mode = 2
theme_override_colors/font_color = Color(0.694118, 0.694118, 0.694118, 1)
theme_override_fonts/font = ExtResource("27_u6i6b")
theme_override_font_sizes/font_size = 32
text = "Position | 0, 0"
text = "LABEL1"
text_overrun_behavior = 3

[node name="Address" type="Label" parent="GUICanvasLayer/Tooltip/MarginContainer/VBoxContainer"]
[node name="Label2" type="Label" parent="GUICanvasLayer/Tooltip/MarginContainer/VBoxContainer"]
layout_mode = 2
theme_override_colors/font_color = Color(0.694118, 0.694118, 0.694118, 1)
theme_override_fonts/font = ExtResource("27_u6i6b")
theme_override_font_sizes/font_size = 32
text = "Address | ***1234"
text = "LABEL2"
text_overrun_behavior = 3

[node name="Fuel" type="Label" parent="GUICanvasLayer/Tooltip/MarginContainer/VBoxContainer"]
[node name="Label3" type="Label" parent="GUICanvasLayer/Tooltip/MarginContainer/VBoxContainer"]
layout_mode = 2
theme_override_colors/font_color = Color(0.694118, 0.694118, 0.694118, 1)
theme_override_fonts/font = ExtResource("27_u6i6b")
theme_override_font_sizes/font_size = 32
text = "Fuel | 0/0"
text = "LABEL3"
text_overrun_behavior = 3

[node name="Coins" type="Label" parent="GUICanvasLayer/Tooltip/MarginContainer/VBoxContainer"]
[node name="Label4" type="Label" parent="GUICanvasLayer/Tooltip/MarginContainer/VBoxContainer"]
layout_mode = 2
theme_override_colors/font_color = Color(0.694118, 0.694118, 0.694118, 1)
theme_override_fonts/font = ExtResource("27_u6i6b")
theme_override_font_sizes/font_size = 32
text = "Coins | 0/0"
text = "LABEL4"
text_overrun_behavior = 3

[node name="HBoxContainer" type="HBoxContainer" parent="GUICanvasLayer"]
Expand Down Expand Up @@ -467,11 +467,27 @@ theme_override_styles/focus = SubResource("StyleBoxEmpty_iitb5")
text = "-"
flat = true

[node name="CenterContainer" type="CenterContainer" parent="GUICanvasLayer"]
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
mouse_filter = 2

[node name="Loader" type="TextureRect" parent="GUICanvasLayer/CenterContainer"]
layout_mode = 2
mouse_filter = 2
texture = ExtResource("28_wxhmh")
expand_mode = 1
stretch_mode = 3

[connection signal="dataset_updated" from="." to="MapCanvasLayer/Map" method="_on_main_dataset_updated"]
[connection signal="dataset_updated" from="." to="GUICanvasLayer/HBoxContainer/VBoxContainerStart/MarginContainer/VBoxContainer/MarginContainer/MarginContainer/Minimap" method="_on_main_dataset_updated"]
[connection signal="camera_position_changed" from="MapCanvasLayer/Map" to="GUICanvasLayer/HBoxContainer/VBoxContainerStart/MarginContainer/VBoxContainer/MarginContainer/MarginContainer/Minimap" method="_on_map_camera_position_changed"]
[connection signal="camera_zoom_changed" from="MapCanvasLayer/Map" to="GUICanvasLayer/HBoxContainer/VBoxContainerStart/MarginContainer/VBoxContainer/MarginContainer/MarginContainer/Minimap" method="_on_map_camera_zoom_changed"]
[connection signal="hide_tooltip" from="MapCanvasLayer/Map" to="." method="_on_map_hide_tooltip"]
[connection signal="show_asteria_tooltip" from="MapCanvasLayer/Map" to="." method="_on_map_show_asteria_tooltip"]
[connection signal="show_fuel_tooltip" from="MapCanvasLayer/Map" to="." method="_on_map_show_fuel_tooltip"]
[connection signal="show_ship_tooltip" from="MapCanvasLayer/Map" to="." method="_on_map_show_ship_tooltip"]
[connection signal="minimap_position_changed" from="GUICanvasLayer/HBoxContainer/VBoxContainerStart/MarginContainer/VBoxContainer/MarginContainer/MarginContainer/Minimap" to="MapCanvasLayer/Map" method="_on_minimap_minimap_position_changed"]
Expand Down
38 changes: 28 additions & 10 deletions godot-visualizer/scripts/global.gd
Original file line number Diff line number Diff line change
Expand Up @@ -3,22 +3,34 @@ extends Node
const grid_size = 200
const cell_size = 128

var ships: Array[Ship] = []
var fuels: Array[Fuel] = []
var asteria: Asteria = null
var ships: Array[ShipData] = []
var fuels: Array[FuelData] = []
var asteria: AsteriaData = null


func init_data(data: Variant):
ships = []
fuels = []
asteria = null

for item in data["data"]["objectsInRadius"]:

var position = Vector2(item["position"]["x"], item["position"]["y"])

if item["__typename"] == "Ship":
ships.append(Ship.new(item["id"], Vector2(item["position"]["x"], item["position"]["y"])))
ships.append(ShipData.new(
item["id"],
item["fuel"],
position,
item["shipTokenName"]["name"],
item["pilotTokenName"]["name"]
))

if item["__typename"] == "Fuel":
fuels.append(Fuel.new(item["fuel"], Vector2(item["position"]["x"], item["position"]["y"])))
fuels.append(FuelData.new(item["fuel"], position))

if item["__typename"] == "Asteria":
asteria = Asteria.new(item["totalRewards"], Vector2(item["position"]["x"], item["position"]["y"]))
asteria = AsteriaData.new(item["totalRewards"], position)

func get_ships():
return ships
Expand All @@ -36,16 +48,22 @@ func get_cell_size():
return cell_size


class Ship:
class ShipData:
var id: String = ""
var fuel: int = 0
var position: Vector2 = Vector2(0, 0)
var shipTokenName: String = ""
var pilotTokenName: String = ""

func _init(_id: String, _position: Vector2):
func _init(_id: String, _fuel: int, _position: Vector2, _shipTokenName: String, _pilotTokenName: String):
id = _id
fuel = _fuel
position = _position
shipTokenName = _shipTokenName
pilotTokenName = _pilotTokenName


class Fuel:
class FuelData:
var fuel: int = 0
var position: Vector2 = Vector2(0, 0)

Expand All @@ -54,7 +72,7 @@ class Fuel:
position = _position


class Asteria:
class AsteriaData:
var totalRewards: int = 0
var position: Vector2 = Vector2(0, 0)

Expand Down
81 changes: 57 additions & 24 deletions godot-visualizer/scripts/main.gd
Original file line number Diff line number Diff line change
Expand Up @@ -10,41 +10,56 @@ const query = """
{
objectsInRadius(center: { x: 0, y: 0 }, radius: %s) {
__typename,
position {
x,
y
},
... on Ship {
id,
position {
x,
y
fuel,
shipTokenName {
name
},
pilotTokenName {
name
}
},
... on Fuel {
fuel,
position {
x,
y
}
fuel
},
... on Asteria {
totalRewards,
position {
x,
y
}
totalRewards
}
}
}
""" % radius


func _process(delta: float) -> void:
$GUICanvasLayer/CenterContainer/Loader.rotation += delta * 10


func _ready():
$HTTPRequest.request_completed.connect(_on_request_completed)
$HTTPRequest.request(url, headers, HTTPClient.METHOD_POST, JSON.stringify({ "query": query }))

var request_timer = Timer.new()
request_timer.wait_time = 20
request_timer.autostart = true
request_timer.one_shot = false
request_timer.connect("timeout", _on_request_timer_timeout)
add_child(request_timer)


func _on_request_completed(result, response_code, headers, body):
var json = JSON.parse_string(body.get_string_from_utf8())
Global.init_data(json)
dataset_updated.emit()
$GUICanvasLayer/CenterContainer/Loader.visible = false


func _on_request_timer_timeout():
$HTTPRequest.request(url, headers, HTTPClient.METHOD_POST, JSON.stringify({ "query": query }))


func update_tooltip_position(position: Vector2) -> void:
Expand Down Expand Up @@ -75,18 +90,36 @@ func _on_map_hide_tooltip() -> void:
$GUICanvasLayer/Tooltip.visible = false


func _on_map_show_ship_tooltip(position: Vector2, address: String) -> void:
func _on_map_show_ship_tooltip(ship: Global.ShipData) -> void:
$GUICanvasLayer/Tooltip/MarginContainer/VBoxContainer/Title.text = "SHIP"
$GUICanvasLayer/Tooltip/MarginContainer/VBoxContainer/Position.text = "Position | %d, %d" % [position.x, position.y]
$GUICanvasLayer/Tooltip/MarginContainer/VBoxContainer/Address.text = "Address | %s" % address
$GUICanvasLayer/Tooltip/MarginContainer/VBoxContainer/Address.visible = true
$GUICanvasLayer/Tooltip/MarginContainer/VBoxContainer/Coins.visible = true
update_tooltip_position(position)
$GUICanvasLayer/Tooltip/MarginContainer/VBoxContainer/Label1.text = "Position | %d, %d" % [ship.position.x, ship.position.y]
$GUICanvasLayer/Tooltip/MarginContainer/VBoxContainer/Label2.text = "Ship Token | %s" % ship.shipTokenName
$GUICanvasLayer/Tooltip/MarginContainer/VBoxContainer/Label3.text = "Pilot Token | %s" % ship.pilotTokenName
$GUICanvasLayer/Tooltip/MarginContainer/VBoxContainer/Label4.text = "Fuel | %s" % ship.fuel
$GUICanvasLayer/Tooltip/MarginContainer/VBoxContainer/Label1.visible = true
$GUICanvasLayer/Tooltip/MarginContainer/VBoxContainer/Label2.visible = true
$GUICanvasLayer/Tooltip/MarginContainer/VBoxContainer/Label3.visible = true
$GUICanvasLayer/Tooltip/MarginContainer/VBoxContainer/Label4.visible = true
update_tooltip_position(ship.position)


func _on_map_show_fuel_tooltip(position: Vector2) -> void:
func _on_map_show_fuel_tooltip(fuel: Global.FuelData) -> void:
$GUICanvasLayer/Tooltip/MarginContainer/VBoxContainer/Title.text = "FUEL PELLET"
$GUICanvasLayer/Tooltip/MarginContainer/VBoxContainer/Position.text = "Position | %d, %d" % [position.x, position.y]
$GUICanvasLayer/Tooltip/MarginContainer/VBoxContainer/Address.visible = false
$GUICanvasLayer/Tooltip/MarginContainer/VBoxContainer/Coins.visible = false
update_tooltip_position(position)
$GUICanvasLayer/Tooltip/MarginContainer/VBoxContainer/Label1.text = "Position | %d, %d" % [fuel.position.x, fuel.position.y]
$GUICanvasLayer/Tooltip/MarginContainer/VBoxContainer/Label2.text = "Fuel | %s" % fuel.fuel
$GUICanvasLayer/Tooltip/MarginContainer/VBoxContainer/Label1.visible = true
$GUICanvasLayer/Tooltip/MarginContainer/VBoxContainer/Label2.visible = true
$GUICanvasLayer/Tooltip/MarginContainer/VBoxContainer/Label3.visible = false
$GUICanvasLayer/Tooltip/MarginContainer/VBoxContainer/Label4.visible = false
update_tooltip_position(fuel.position)


func _on_map_show_asteria_tooltip(asteria: Global.AsteriaData) -> void:
$GUICanvasLayer/Tooltip/MarginContainer/VBoxContainer/Title.text = "ASTERIA"
$GUICanvasLayer/Tooltip/MarginContainer/VBoxContainer/Label1.text = "Position | %d, %d" % [asteria.position.x, asteria.position.y]
$GUICanvasLayer/Tooltip/MarginContainer/VBoxContainer/Label2.text = "Total rewards | %s" % asteria.totalRewards
$GUICanvasLayer/Tooltip/MarginContainer/VBoxContainer/Label1.visible = true
$GUICanvasLayer/Tooltip/MarginContainer/VBoxContainer/Label2.visible = true
$GUICanvasLayer/Tooltip/MarginContainer/VBoxContainer/Label3.visible = false
$GUICanvasLayer/Tooltip/MarginContainer/VBoxContainer/Label4.visible = false
update_tooltip_position(asteria.position)
21 changes: 14 additions & 7 deletions godot-visualizer/scripts/map.gd
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
extends Node2D

@export var ship_scene: PackedScene
@export var fuel_scene: PackedScene
@export var token_scene: PackedScene
@export var asteria_scene: PackedScene
Expand All @@ -10,8 +9,9 @@ signal camera_zoom_changed(zoom: Vector2)
signal minimap_position_changed(position: Vector2)
signal mouse_hover_gui(is_hover: bool)
signal hide_tooltip()
signal show_ship_tooltip(position: Vector2, address: String)
signal show_fuel_tooltip(position: Vector2)
signal show_ship_tooltip(ship: Global.ShipData)
signal show_fuel_tooltip(fuel: Global.FuelData)
signal show_asteria_tooltip(asteria: Global.AsteriaData)

var mouse_entered_sidebar = false
var mouse_entered_minimap = false
Expand All @@ -23,8 +23,11 @@ func _on_main_dataset_updated() -> void:
const center = Vector2(0, 0)
var cell_size = Vector2(Global.get_cell_size(), Global.get_cell_size())

for child in $Entities.get_children():
child.free()

for ship_data in Global.get_ships():
var ship = ship_scene.instantiate()
var ship = Ship.new_ship(ship_data)
ship.position = ship_data.position * cell_size
ship.rotation = ship.position.angle_to_point(center) + PI/2
$Entities.add_child(ship)
Expand All @@ -48,15 +51,19 @@ func _process(delta: float) -> void:
var cell_position = round((mouse_position - Vector2(get_viewport_rect().size / $Camera.zoom) / 2 + $Camera.position) / cell_size)
$Cell.position = cell_position * cell_size

var asteria = Global.get_asteria()
var ships = Global.get_ships().filter(func(ship): return ship.position == cell_position)
var fuels = Global.get_fuels().filter(func(fuel): return fuel.position == cell_position)

if ships.size() > 0:
if asteria and asteria.position == cell_position:
$Cell.animation = "filled"
show_asteria_tooltip.emit(asteria)
elif ships.size() > 0:
$Cell.animation = "filled"
show_ship_tooltip.emit(ships[0].position, ships[0].id)
show_ship_tooltip.emit(ships[0])
elif fuels.size() > 0:
$Cell.animation = "filled"
show_fuel_tooltip.emit(fuels[0].position)
show_fuel_tooltip.emit(fuels[0])
else:
$Cell.animation = "empty"
hide_tooltip.emit()
Expand Down
Loading

0 comments on commit f243e3a

Please sign in to comment.