Skip to content

ChrisPHP/osignals

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

5 Commits
 
 
 
 
 
 
 
 

Repository files navigation

osignals

A lightweight package that implements Godot-style signals to enable the observer pattern in Odin

Example Usage

HealthStruct :: struct {
    health: int,
    max: int,
    damage_taken: int
}

Player :: struct {
    health: int,
    max: int,

    health_changed: osignals.Signal(HealthStruct)
}

player_init :: proc(p: ^Player) {
    p.health = 100
    p.max = 100

    osignals.signal_init(&p.health_changed)
}

player_destroy :: proc(p: ^Player) {
    osignals.signal_destroy(&p.health_changed)
}

player_take_damage :: proc(p: ^Player, amount: int) {
    old_health := p.health
    p.health = max(0, p.health - amount)

    data := HealthStruct{
        health = p.health,
        max = p.max,
        damage_taken = amount,
    }

    osignals.signal_emit(&p.health_changed, data)
}

player_health_updated :: proc(data: HealthStruct) {
    fmt.println("Current health: ", data.health)
    fmt.println("Damage Taken: ", data.damage_taken)
}

main :: proc() {
    player: Player
    player_init(&player)
    defer player_destroy(&player)

    osignals.signal_connect(&player.health_changed, player_health_updated)

    player_take_damage(&player, 10)
}

About

A lightweight package that implements Godot-style signals to enable the observer pattern in Odin

Resources

License

Stars

1 star

Watchers

0 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages