class_name FieldView extends Control ## Das gemeinsame Feld: je Element vier Ladepunkte, bei vollen Punkten kippt das Feld. ## Das aktive Feld steht farbig mit seinem Bonus da. var element := "" var charge := {} func _init(rect: Rect2) -> void: position = rect.position size = rect.size mouse_filter = Control.MOUSE_FILTER_IGNORE func update_from(g: Game) -> void: element = g.field_element charge = g.field_charge.duplicate() queue_redraw() ## Der Inhalt als Text (Tests, Protokoll). func text() -> String: var parts: Array[String] = [] for e in Cards.ELEMENTS: if e == element: parts.append("%s: +1 %s" % [tr(Cards.FIELD_NAMES[e]), tr("Angriff")]) else: parts.append("%s %d/%d" % [tr(e), int(charge.get(e, 0)), Cards.FIELD_CHARGE]) return " ยท ".join(parts) func _draw() -> void: var w := size.x / Cards.ELEMENTS.size() for i in Cards.ELEMENTS.size(): var e: String = Cards.ELEMENTS[i] var col: Color = Cards.ELEMENT_COLORS[e] var x0 := i * w var cy := size.y / 2 if e == element: draw_style_box(Style.box(Color(col, 0.35), 6, col, 2), Rect2(x0 + 2, 0, w - 4, size.y)) Style.text(self, "%s +1 %s" % [tr(Cards.FIELD_NAMES[e]), tr("Angriff")], 13, Style.lighter(col, 0.4), Vector2(x0 + w / 2, cy), "center", true) continue Style.text(self, tr(e), 13, Style.MUTED, Vector2(x0 + 12, cy), "midleft") var n := int(charge.get(e, 0)) var px := x0 + 12 + Style.FONT.get_string_size(tr(e), HORIZONTAL_ALIGNMENT_LEFT, -1, Style.fs(13)).x + 14 for k in Cards.FIELD_CHARGE: var c := Vector2(px + k * 13, cy) if k < n: draw_circle(c, 4.5, col) else: draw_circle(c, 4.5, Color(0, 0, 0, 0.35)) draw_arc(c, 4.5, 0, TAU, 16, Color(col, 0.6), 1.0)