Complete CCS results and rating flow
This commit is contained in:
@@ -9,6 +9,8 @@ var references: VBoxContainer
|
||||
var report_dialog: Control
|
||||
var report_button: Button
|
||||
var current_attempt := {}
|
||||
var status: Label
|
||||
var starting_case := false
|
||||
|
||||
func _ready() -> void:
|
||||
set_anchors_preset(Control.PRESET_FULL_RECT); add_theme_constant_override("separation", 10)
|
||||
@@ -26,13 +28,17 @@ func _ready() -> void:
|
||||
CCSService.attempt_changed.connect(_refresh_loaded_attempt); CCSService.report_submitted.connect(_report_submitted)
|
||||
report_dialog = preload("res://scripts/ui/ccs_report_dialog.gd").new(); add_child(report_dialog)
|
||||
var row := HBoxContainer.new(); add_child(row)
|
||||
var cases := Button.new(); cases.text = "More cases"; Style.style_primary_button(cases); cases.pressed.connect(func(): main.show_screen("ccs_hub")); row.add_child(cases)
|
||||
var history := Button.new(); history.text = "Case history"; history.pressed.connect(func(): main.show_screen("ccs_history")); row.add_child(history)
|
||||
var cases := Button.new(); cases.text = "Another Case"; Style.style_primary_button(cases); cases.pressed.connect(_another_case); row.add_child(cases)
|
||||
var back := Button.new(); back.text = "Back to Step 3 Modes"; back.pressed.connect(func(): main.show_screen("selection", "step3")); row.add_child(back)
|
||||
status = Label.new(); Style.set_label(status, 14, Style.RED); row.add_child(status)
|
||||
CCSService.request_failed.connect(_request_failed)
|
||||
|
||||
func _study_label(region: String) -> RichTextLabel:
|
||||
var label := RichTextLabel.new(); label.bbcode_enabled = true; label.fit_content = true; label.selection_enabled = true; label.set_meta("ccs_region", region); label.gui_input.connect(_text_input.bind(label)); return label
|
||||
|
||||
func on_show(payload: Variant = null) -> void:
|
||||
starting_case = false
|
||||
if status != null: status.text = ""
|
||||
if typeof(payload) == TYPE_STRING: CCSService.load_attempt(str(payload)); return
|
||||
current_attempt = payload if typeof(payload) == TYPE_DICTIONARY else CCSService.attempt
|
||||
if current_attempt.is_empty(): return
|
||||
@@ -41,9 +47,17 @@ func on_show(payload: Variant = null) -> void:
|
||||
_render_text(); _render_references(); _apply_text_scale()
|
||||
|
||||
func _score_plain() -> String:
|
||||
var lines: Array[String] = ["Scoring review"]
|
||||
var score: Dictionary = current_attempt.get("score", {})
|
||||
var lines: Array[String] = ["Case result: %d/%d points (%.0f%%)" % [score.get("earnedPoints", 0), score.get("possiblePoints", 0), score.get("percent", 0)]]
|
||||
var rating: Dictionary = current_attempt.get("rating", {})
|
||||
if bool(rating.get("rated", false)):
|
||||
lines.append("CCS ELO: %d (%+d)" % [rating.get("userElo", 1000), rating.get("userEloDelta", 0)])
|
||||
else:
|
||||
lines.append("CCS ELO unchanged: this case was not rating-eligible.")
|
||||
for criterion in current_attempt.get("score", {}).get("criteria", []):
|
||||
lines.append("%s %s%d\n%s" % [str(criterion.get("status", "missed")).capitalize(), "+" if int(criterion.get("points", 0)) >= 0 else "", criterion.get("points", 0), criterion.get("rationale", "")])
|
||||
var observed := str(criterion.get("observedAction", "Not performed"))
|
||||
if criterion.get("observedMinute", null) != null: observed += " at minute %d" % criterion.get("observedMinute", 0)
|
||||
lines.append("%s: %s %s%d\nExpected: %s\nObserved: %s\n%s" % [criterion.get("title", criterion.get("criterionId", "Criterion")), str(criterion.get("status", "missed")).capitalize(), "+" if int(criterion.get("points", 0)) >= 0 else "", criterion.get("points", 0), criterion.get("expectedAction", ""), observed, criterion.get("rationale", "")])
|
||||
return "\n\n".join(lines)
|
||||
|
||||
func _timeline_plain() -> String:
|
||||
@@ -76,8 +90,8 @@ func _zoom(delta: float) -> void:
|
||||
CCSService.adjust_text_scale(delta); _apply_text_scale(); _render_references()
|
||||
|
||||
func _apply_text_scale() -> void:
|
||||
var size := int(round(18.0 * CCSService.text_scale))
|
||||
for label in [score_body, timeline_body]: label.add_theme_font_size_override("normal_font_size", size); label.add_theme_font_size_override("bold_font_size", size)
|
||||
var font_size := int(round(18.0 * CCSService.text_scale))
|
||||
for label in [score_body, timeline_body]: label.add_theme_font_size_override("normal_font_size", font_size); label.add_theme_font_size_override("bold_font_size", font_size)
|
||||
|
||||
func _clear_highlights() -> void:
|
||||
CCSService.clear_highlights(str(current_attempt.get("id", ""))); _render_text()
|
||||
@@ -85,4 +99,18 @@ func _clear_highlights() -> void:
|
||||
func _report() -> void: report_dialog.show_for(str(current_attempt.get("id", "")))
|
||||
func _report_submitted(_id: String) -> void: Style.style_chip(report_button, Style.RED); report_button.tooltip_text = "Report submitted; report another issue"
|
||||
func _refresh_loaded_attempt() -> void:
|
||||
if visible and str(CCSService.attempt.get("state", "")) == "completed": on_show(CCSService.attempt)
|
||||
if not visible: return
|
||||
if starting_case and str(CCSService.attempt.get("state", "")) in ["active", "final_orders"]:
|
||||
starting_case = false; main.show_screen("ccs_player"); return
|
||||
if str(CCSService.attempt.get("state", "")) == "completed": on_show(CCSService.attempt)
|
||||
|
||||
func _another_case() -> void:
|
||||
if starting_case: return
|
||||
starting_case = true
|
||||
status.text = "Loading a random timed case..."
|
||||
CCSService.create_attempt("", "timed")
|
||||
|
||||
func _request_failed(message: String) -> void:
|
||||
if not visible or not starting_case: return
|
||||
starting_case = false
|
||||
status.text = message
|
||||
|
||||
Reference in New Issue
Block a user