90 lines
5.3 KiB
GDScript
90 lines
5.3 KiB
GDScript
extends RefCounted
|
|
## Expedition field cards: warm canvas, olive paint, brass and scene art.
|
|
const RULES := preload("res://scripts/planets/poi_rules.gd")
|
|
const ORDER := ["deposit","ruins","warehouse","village","cave"]
|
|
const INK := Color("dfd8c3")
|
|
const MUTED := Color("9eaa91")
|
|
const GOLD := Color("d6b477")
|
|
const STORIES := {
|
|
"deposit":["Wśród zwietrzałych skał połyskują drobiny rzadkich minerałów. Wystarczy ostrożnie oddzielić je od podłoża.","Pod cienką warstwą gruntu żyła schodzi głębiej. Odwiert odsłoni bogatszy pokład, jeśli skała pozostanie stabilna.","Wąska szczelina prowadzi do najbogatszej części złoża. Każde uderzenie narzędzia odbija się głuchym echem."],
|
|
"ruins":["Korzenie rozsunęły kamienie przy wejściu. Za progiem spoczywa porzucone urządzenie, pokryte pyłem minionych wieków.","Ciężkie drzwi ustępują. W niszy pośród zatartych reliefów czeka kolejny fragment dawnej technologii.","W sercu budowli ocalał niezwykły mechanizm. Aby go wydobyć, trzeba poruszyć konstrukcję, która od dawna nie powinna stać."],
|
|
"warehouse":["Wiatr przesuwa kurz po podłodze pustego magazynu. Kilka skrzyń wciąż ma nienaruszone zamknięcia.","Za stalową kratą zachowały się regały z wojskowym zaopatrzeniem. Rdza utrudnia dostęp do ciężkich pojemników.","Ostatnie zapasy ukryto pod zawaloną częścią budynku. Belki skrzypią przy każdym kroku."],
|
|
"village":["Między pustymi domami zarosła dawna ścieżka. W pozostawionych schowkach mogą jeszcze leżeć drobne oszczędności.","Na stole ocalały dzienniki mieszkańców. Ich notatki mogą nauczyć cię, jak przetrwać na tej planecie.","Pod zapadniętą podłogą kryje się sejf osady. Dotarcie do niego wymaga wejścia pod niestabilne stropy."],
|
|
"cave":["U podnóża góry otwiera się ciemna szczelina. Przy wilgotnych skałach rosną organizmy warte dokładniejszej analizy.","Korytarz rozszerza się w chłodną grotę. Na wapiennych ścianach widać kolejne skupiska nieznanych form życia.","Daleko od światła powierzchni leży podziemny zbiornik. Wokół niego przetrwały najcenniejsze próbki — i najtrudniejsza droga powrotna."]}
|
|
|
|
static func panel_style(panel: PanelContainer) -> void:
|
|
var style := StyleBoxFlat.new()
|
|
style.bg_color = Color("22271f")
|
|
style.border_color = Color("756d50")
|
|
style.set_border_width_all(1)
|
|
style.set_corner_radius_all(8)
|
|
style.set_content_margin_all(14)
|
|
style.shadow_color = Color(0,0,0,0.45)
|
|
style.shadow_size = 14
|
|
panel.add_theme_stylebox_override("panel",style)
|
|
|
|
static func text(parent: Node, content: String, font_size := 14, color := INK) -> Label:
|
|
var label := Label.new()
|
|
label.text = content
|
|
label.autowrap_mode = TextServer.AUTOWRAP_WORD_SMART
|
|
label.add_theme_font_size_override("font_size",font_size)
|
|
label.add_theme_font_override("font",ThemeDB.fallback_font)
|
|
label.add_theme_color_override("font_color",color)
|
|
parent.add_child(label)
|
|
return label
|
|
|
|
static func button(parent: Node, content: String, action: Callable, primary := false) -> Button:
|
|
var node := Button.new()
|
|
node.text = content
|
|
node.autowrap_mode = TextServer.AUTOWRAP_WORD_SMART
|
|
node.custom_minimum_size.y = 36
|
|
node.mouse_default_cursor_shape = Control.CURSOR_POINTING_HAND
|
|
node.add_theme_font_size_override("font_size",14)
|
|
node.add_theme_font_override("font",ThemeDB.fallback_font)
|
|
node.add_theme_color_override("font_color",INK)
|
|
for state in ["normal","hover","pressed","disabled","focus"]:
|
|
var style := StyleBoxFlat.new()
|
|
style.bg_color = Color("4b5639") if primary else Color("30382b")
|
|
if state == "hover": style.bg_color = Color("626b46")
|
|
if state == "pressed": style.bg_color = Color("3c442c")
|
|
if state == "disabled": style.bg_color = Color("292c25")
|
|
style.border_color = GOLD if primary else Color("687054")
|
|
style.set_border_width_all(1)
|
|
style.set_corner_radius_all(4)
|
|
style.content_margin_left = 10
|
|
style.content_margin_right = 10
|
|
style.content_margin_top = 7
|
|
style.content_margin_bottom = 7
|
|
node.add_theme_stylebox_override(state,style)
|
|
node.pressed.connect(action)
|
|
parent.add_child(node)
|
|
return node
|
|
|
|
static func header(parent: VBoxContainer, kind: String, stage: int, complete: bool) -> void:
|
|
var atlas: Texture2D = load("res://assets/planets/poi/expedition_atlas.png")
|
|
var image := AtlasTexture.new()
|
|
image.atlas = atlas
|
|
# Painted atlas rows have slightly different heights; crop inside each scene.
|
|
var row := ORDER.find(kind)
|
|
var rows := [0.0,0.198,0.394,0.589,0.776,1.0]
|
|
var extent := Vector2(atlas.get_size())
|
|
image.region = Rect2(Vector2(stage/3.0,rows[row])*extent+Vector2(3,3),Vector2(extent.x/3.0,(rows[row+1]-rows[row])*extent.y)-Vector2(6,6))
|
|
image.filter_clip = true
|
|
var frame := PanelContainer.new()
|
|
frame.custom_minimum_size.y = 164
|
|
frame.clip_contents = true
|
|
frame.add_theme_stylebox_override("panel",StyleBoxEmpty.new())
|
|
var art := TextureRect.new()
|
|
art.texture = image
|
|
art.expand_mode = TextureRect.EXPAND_IGNORE_SIZE
|
|
art.stretch_mode = TextureRect.STRETCH_KEEP_ASPECT_COVERED
|
|
art.texture_filter = CanvasItem.TEXTURE_FILTER_LINEAR_WITH_MIPMAPS
|
|
frame.add_child(art)
|
|
parent.add_child(frame)
|
|
text(parent,"DZIENNIK WYPRAWY / %s" % ("ZAKOŃCZONO" if complete else "ETAP %02d / 03" % (stage+1)),11,MUTED)
|
|
text(parent,str(RULES.NAMES[kind]),23,GOLD)
|
|
text(parent,STORIES[kind][stage],14)
|
|
var line := HSeparator.new()
|
|
line.modulate = Color("7b8062")
|
|
parent.add_child(line)
|