9. Money System

Bouw een economy systeem met MoneyManager autoload en UI display

Overzicht

In dit hoofdstuk leer je:

  • MoneyManager.cs autoload singleton maken

  • Signal-based architecture (MoneyChanged signal)

  • TrySpend() pattern voor purchases

  • AddMoney() voor income

  • MoneyDisplay.cs Label component

  • Signal subscriptions in UI

  • Building costs via BasePlacer.BuildCost

circle-info

Wat is een Economy System?

Een economy system geeft gameplay depth door resource management:

  • Spelers besteden geld aan infrastructure (buildings, roads)

  • Cars genereren geld door trips te voltooien (hoofdstuk 11)

  • Balans: genoeg infrastructuur bouwen om trips mogelijk te maken, maar niet te veel uitgeven

Singleton pattern: Godot's AutoLoad system maakt MoneyManager globally toegankelijk via /root/MoneyManager. Elke script kan geld toevoegen/uitgeven zonder referenties door te geven.

MoneyManager script aanmaken

Maak een singleton die het geld beheert.

Nieuwe Godot-specifieke elementen:

  • [Signal]arrow-up-right - Attribuut om C# events als Godot signals te exposeren

    • [Signal] attribuut vertelt Godot: "dit is een signal"

    • delegate void NaamEventHandler(params) = C# event type

    • Convention: naam eindigt met EventHandler

    • Signal naam wordt automatisch MoneyChanged (zonder "EventHandler" suffix)

  • delegatearrow-up-right - C# event type definitie

  • EmitSignal()arrow-up-right - Fired een signal naar alle subscribers

circle-check

_Ready implementeren

Initialiseer het startbedrag en fire een initiële signal.

circle-check

CanAfford implementeren

Maak een helper method om te checken of de speler iets kan betalen. We gebruiken hiervoor een expression-body, gelijkaardig als je in Javascript of Typescript kan doen.

  • Korte syntax voor simple returns

  • => expression is hetzelfde als { return expression; }

circle-check

TrySpend implementeren

Maak een method om geld uit te geven met validation.

circle-check

AddMoney implementeren

Maak een method om geld toe te voegen (car revenue).

circle-check

MoneyManager als AutoLoad toevoegen

Configureer MoneyManager als singleton.

circle-check

BasePlacer updaten met kosten

Voeg building costs toe aan de BasePlacer, zodat de RoadPlacer en BuildingPlacer dat ook automatisch bevatten.

circle-check

BuildingPlacer Build() method updaten

Nu update je de Build() method, zodat je de buildingCost ook gebruikt.

circle-check

RoadPlacer updaten met kosten

Voeg road costs toe aan de RoadPlacer.

circle-check

MoneyDisplay UI toevoegen

Voeg een label toe aan de Main scene voor de money display.

circle-check

MoneyDisplay script aanmaken

Maak een UI label die het geldbedrag toont.

circle-check

_Ready implementeren (MoneyDisplay)

Subscribe naar de MoneyChanged signal.

circle-check

OnMoneyChanged implementeren

Maak een callback die de label text update.

circle-check

Testen

Test het money systeem.

circle-check

Veelgemaakte fouten

  • MoneyManager niet gevonden: AutoLoad is niet correct ingesteld. Check Project Settings → Globals → AutoLoad en verify dat MoneyManager daar staat met exact die naam.

  • MoneyDisplay toont niks: Script is niet attached OF Label.Text wordt niet geset. Check Inspector script attachment en debug print in OnMoneyChanged.

  • Signal fired maar callback niet aangeroepen: Event handler syntax verkeerd (= ipv +=) OF method signature komt niet overeen (moet void MethodName(int) zijn).

  • Money display niet readable: Font size te klein OF kleur contrast te laag. Maak groter (32+) en gebruik bright color (geel/groen/wit).

  • BuildingPlacer/RoadPlacer cost werkt niet: Check of de TrySpend() call VOOR SetCellItem() staat. Early return moet gebeuren als niet genoeg geld.

Volledige scripts

chevron-rightKlik hier voor het volledige MoneyManager.cs scripthashtag
chevron-rightKlik hier voor het volledige MoneyDisplay.cs scripthashtag

Laatst bijgewerkt