spwn 0.0.6

A language for Geometry Dash triggers
Documentation
#[no_std, cache_output]
constants = import "constants.spwn"

extract constants.obj_props

type @event

impl @event {
    on: #[desc("Triggers a function every time an event fires") example("
on(touch(), !{
    10g.move(10, 0)
})
    ")] (
        #[desc("Event to trigger on")] event: @event,
        #[desc("Function to trigger")] function: @trigger_function
    ){
        event.on_triggered(function)
    }
}

return {

    touch: #[desc("Implementation of the touch trigger (returns an event)") example("
on(touch(), !{
    10g.move(10, 0)
})
    ")] (
        #[desc("Dual mode (only check for touch on the dual side)")] dual_side: @bool = false
    ) {
        return @event::{
            on_triggered: (function) => $.add( trigger{
                OBJ_ID: 1595,
                HOLD_MODE: true,
                TOGGLE_MODE: 1,
                TARGET: function,
                DUAL_MODE: dual_side,

            })
        }

    },

    touch_end: #[desc("Returns an event for when a touch ends") example("
on(touch_end(), !{
    10g.move(-10, 0)
})
    ")] (
        #[desc("Dual mode (only check for touch on the dual side)")] dual_side: @bool = false
    ) {
        return @event::{
            on_triggered: (function) => $.add( trigger{
                OBJ_ID: 1595,
                HOLD_MODE: true,
                TOGGLE_MODE: 2,
                TARGET: function,
                DUAL_MODE: dual_side,

            })
        }

    },

    collision: #[desc("Implementation of the collision trigger (returns an event)") example("
on(collision(1b, 2b), !{
    BG.set(255, 0, 0)
})
    ")] (
        #[desc("Block A ID")] a: @block,
        #[desc("Block B ID")] b: @block
    ) {
        return @event::{
            on_triggered: (function) => $.add( trigger{
                OBJ_ID: 1815,
                BLOCK_A: a,
                BLOCK_B: b,
                ACTIVATE_GROUP: true,
                ACTIVATE_ON_EXIT: false,
                TARGET: function,

            })
        }

    },

    collision_exit: #[desc("Returns an event for when a collision exits") example("
on(collision_exit(1b, 2b), !{
    BG.set(0, 0, 0)
})
    ")] (
        #[desc("Block A ID")] a: @block,
        #[desc("Block B ID")] b: @block
    ) {
        return @event::{
            on_triggered: (function) => $.add( trigger{
                OBJ_ID: 1815,
                BLOCK_A: a,
                BLOCK_B: b,
                ACTIVATE_GROUP: true,
                ACTIVATE_ON_EXIT: true,
                TARGET: function,

            })
        }
    },


    death: #[desc("Returns an event for when the player dies") example("
on(death(), !{
    BG.set(0, 0, 0)
})
    ")] (){
        return @event::{
            on_triggered: (function) => $.add( trigger{
                OBJ_ID: 1812,
                ACTIVATE_GROUP: true,
                TARGET: function
            })
        }
    }
}