{
    "name": "twn",

    "procedures": {
        "input_action": {
            "module": "input",
            "symbol": "action",
            "header": "twn_input.h",
            "params": [
                { "name": "name", "type": "char *" },
                { "name": "control", "type": "Control" }
            ]
        },

        "input_action_pressed": {
            "module": "input",
            "symbol": "action_pressed",
            "header": "twn_input.h",
            "params": [
                { "name": "name", "type": "char *" }
            ],
            "return": "bool"
        },

        "input_action_just_pressed": {
            "module": "input",
            "symbol": "action_just_pressed", 
            "header": "twn_input.h",
            "params": [
                { "name": "name", "type": "char *" }
            ],
            "return": "bool"
        },

        "input_action_just_released": {
            "module": "input",
            "symbol": "action_just_released",
            "header": "twn_input.h",
            "params": [
                { "name": "name", "type": "char *" }
            ],
            "return": "bool"
        },

        "input_action_position": {
            "module": "input",
            "symbol": "get_action_position",
            "header": "twn_input.h",
            "params": [
                { "name": "name", "type": "char *" }
            ],
            "return": "Vec2"
        },

        "input_mouse_captured": {
            "module": "input",
            "symbol": "set_mouse_captured",
            "header": "twn_input.h",
            "params": [
                { "name": "enabled", "type": "bool" }
            ]
        },

        "draw_sprite": {
            "module": "draw",
            "symbol": "sprite",
            "header": "twn_draw.h",
            "params": [
                { "name": "path", "type": "char *" },
                { "name": "rect", "type": "Rect" },
                { "name": "texture_region", "type": "Rect *", "default": {} },
                { "name": "color", "type": "Color", "default": { "r": 255, "g": 255, "b": 255, "a": 255 } },
                { "name": "rotation", "type": "float", "default": 0.0 },
                { "name": "flip_x", "type": "bool", "default": false },
                { "name": "flip_y", "type": "bool", "default": false },
                { "name": "stretch", "type": "bool", "default": true }
            ]
        },

        "draw_rectangle": {
            "module": "draw",
            "symbol": "rectangle",
            "header": "twn_draw.h",
            "params": [
                { "name": "rect", "type": "Rect" },
                { "name": "color", "type": "Color", "default": { "r": 255, "g": 255, "b": 255, "a": 255 } }
            ]
        },

        "draw_circle": {
            "module": "draw",
            "symbol": "circle",
            "header": "twn_draw.h",
            "params": [
                { "name": "position", "type": "Vec2" },
                { "name": "radius", "type": "float" },
                { "name": "color", "type": "Color", "default": { "r": 255, "g": 255, "b": 255, "a": 255 } }
            ]
        },

        "draw_text": {
            "module": "draw",
            "symbol": "text",
            "header": "twn_draw.h",
            "params": [
                { "name": "string", "type": "char *" },
                { "name": "position", "type": "Vec2" },
                { "name": "height", "type": "float", "default": 22 },
                { "name": "color", "type": "Color", "default": { "r": 255, "g": 255, "b": 255, "a": 255 } },
                { "name": "font", "type": "char *", "default": {} }
            ]
        },

        "draw_text_width": {
            "module": "draw",
            "symbol": "text_width",
            "header": "twn_draw.h",
            "params": [
                { "name": "string", "type": "char *" },
                { "name": "height", "type": "float", "default": 22 },
                { "name": "font", "type": "char *", "default": {} }
            ],
            "return": "float"
        }
    },

    "types": {
        "Vec2": {
            "fields": [
                { "name": "x", "type": "float" },
                { "name": "y", "type": "float" }
            ]
        },

        "Vec3": {
            "fields": [
                { "name": "x", "type": "float" },
                { "name": "y", "type": "float" },
                { "name": "z", "type": "float" }
            ]
        },

        "Vec4": {
            "fields": [
                { "name": "x", "type": "float" },
                { "name": "y", "type": "float" },
                { "name": "z", "type": "float" },
                { "name": "w", "type": "float" }
            ]
        },

        "Color": {
            "fields": [
                { "name": "r", "type": "uint8_t" },
                { "name": "g", "type": "uint8_t" },
                { "name": "b", "type": "uint8_t" },
                { "name": "a", "type": "uint8_t" }
            ]
        },

        "Rect": {
            "fields": [
                { "name": "x", "type": "float" },
                { "name": "y", "type": "float" },
                { "name": "w", "type": "float" },
                { "name": "h", "type": "float" }
            ]
        },

        "Control": {
            "enums": {
                "A": 4,
                "B": 5,
                "C": 6,
                "D": 7,
                "E": 8,
                "F": 9,
                "G": 10,
                "H": 11,
                "I": 12,
                "J": 13,
                "K": 14,
                "L": 15,
                "M": 16,
                "N": 17,
                "O": 18,
                "P": 19,
                "Q": 20,
                "R": 21,
                "S": 22,
                "T": 23,
                "U": 24,
                "V": 25,
                "W": 26,
                "X": 27,
                "Y": 28,
                "Z": 29,
                "1": 30,
                "2": 31,
                "3": 32,
                "4": 33,
                "5": 34,
                "6": 35,
                "7": 36,
                "8": 37,
                "9": 38,
                "0": 39,
                "RETURN": 40,
                "ESCAPE": 41,
                "BACKSPACE": 42,
                "TAB": 43,
                "SPACE": 44,
                "MINUS": 45,
                "EQUALS": 46,
                "LEFTBRACKET": 47,
                "RIGHTBRACKET": 48,
                "BACKSLASH": 49,
                "NONUSHASH": 50,
                "SEMICOLON": 51,
                "APOSTROPHE": 52,
                "GRAVE": 53,
                "COMMA": 54,
                "PERIOD": 55,
                "SLASH": 56,
                "CAPSLOCK": 57,
                "F1": 58,
                "F2": 59,
                "F3": 60,
                "F4": 61,
                "F5": 62,
                "F6": 63,
                "F7": 64,
                "F8": 65,
                "F9": 66,
                "F10": 67,
                "F11": 68,
                "F12": 69,
                "PRINTSCREEN": 70,
                "SCROLLLOCK": 71,
                "PAUSE": 72,
                "INSERT": 73,
                "HOME": 74,
                "PAGEUP": 75,
                "DELETE": 76,
                "END": 77,
                "PAGEDOWN": 78,
                "RIGHT": 79,
                "LEFT": 80,
                "DOWN": 81,
                "UP": 82,
                "NUMLOCKCLEAR": 83,
                "KP_DIVIDE": 84,
                "KP_MULTIPLY": 85,
                "KP_MINUS": 86,
                "KP_PLUS": 87,
                "KP_ENTER": 88,
                "KP_1": 89,
                "KP_2": 90,
                "KP_3": 91,
                "KP_4": 92,
                "KP_5": 93,
                "KP_6": 94,
                "KP_7": 95,
                "KP_8": 96,
                "KP_9": 97,
                "KP_0": 98,
                "KP_PERIOD": 99,
                "NONUSBACKSLASH": 100,
                "APPLICATION": 101,
                "POWER": 102,
                "KP_EQUALS": 103,
                "F13": 104,
                "F14": 105,
                "F15": 106,
                "F16": 107,
                "F17": 108,
                "F18": 109,
                "F19": 110,
                "F20": 111,
                "F21": 112,
                "F22": 113,
                "F23": 114,
                "F24": 115,
                "EXECUTE": 116,
                "HELP": 117,
                "MENU": 118,
                "SELECT": 119,
                "STOP": 120,
                "AGAIN": 121,
                "UNDO": 122,
                "CUT": 123,
                "COPY": 124,
                "PASTE": 125,
                "FIND": 126,
                "MUTE": 127,
                "VOLUMEUP": 128,
                "VOLUMEDOWN": 129,
                "KP_COMMA": 133,
                "KP_EQUALSAS400": 134,
                "INTERNATIONAL1": 135,
                "INTERNATIONAL2": 136,
                "INTERNATIONAL3": 137,
                "INTERNATIONAL4": 138,
                "INTERNATIONAL5": 139,
                "INTERNATIONAL6": 140,
                "INTERNATIONAL7": 141,
                "INTERNATIONAL8": 142,
                "INTERNATIONAL9": 143,
                "LANG1": 144,
                "LANG2": 145,
                "LANG3": 146,
                "LANG4": 147,
                "LANG5": 148,
                "LANG6": 149,
                "LANG7": 150,
                "LANG8": 151,
                "LANG9": 152,
                "ALTERASE": 153,
                "SYSREQ": 154,
                "CANCEL": 155,
                "CLEAR": 156,
                "PRIOR": 157,
                "RETURN2": 158,
                "SEPARATOR": 159,
                "OUT": 160,
                "OPER": 161,
                "CLEARAGAIN": 162,
                "CRSEL": 163,
                "EXSEL": 164,
                "KP_00": 176,
                "KP_000": 177,
                "THOUSANDSSEPARATOR": 178,
                "DECIMALSEPARATOR": 179,
                "CURRENCYUNIT": 180,
                "CURRENCYSUBUNIT": 181,
                "KP_LEFTPAREN": 182,
                "KP_RIGHTPAREN": 183,
                "KP_LEFTBRACE": 184,
                "KP_RIGHTBRACE": 185,
                "KP_TAB": 186,
                "KP_BACKSPACE": 187,
                "KP_A": 188,
                "KP_B": 189,
                "KP_C": 190,
                "KP_D": 191,
                "KP_E": 192,
                "KP_F": 193,
                "KP_XOR": 194,
                "KP_POWER": 195,
                "KP_PERCENT": 196,
                "KP_LESS": 197,
                "KP_GREATER": 198,
                "KP_AMPERSAND": 199,
                "KP_DBLAMPERSAND": 200,
                "KP_VERTICALBAR": 201,
                "KP_DBLVERTICALBAR": 202,
                "KP_COLON": 203,
                "KP_HASH": 204,
                "KP_SPACE": 205,
                "KP_AT": 206,
                "KP_EXCLAM": 207,
                "KP_MEMSTORE": 208,
                "KP_MEMRECALL": 209,
                "KP_MEMCLEAR": 210,
                "KP_MEMADD": 211,
                "KP_MEMSUBTRACT": 212,
                "KP_MEMMULTIPLY": 213,
                "KP_MEMDIVIDE": 214,
                "KP_PLUSMINUS": 215,
                "KP_CLEAR": 216,
                "KP_CLEARENTRY": 217,
                "KP_BINARY": 218,
                "KP_OCTAL": 219,
                "KP_DECIMAL": 220,
                "KP_HEXADECIMAL": 221,
                "LCTRL": 224,
                "LSHIFT": 225,
                "LALT": 226,
                "LGUI": 227,
                "RCTRL": 228,
                "RSHIFT": 229,
                "RALT": 230,
                "RGUI": 231,
                "MODE": 257,
                "KBDILLUMTOGGLE": 278,
                "KBDILLUMDOWN": 279,
                "KBDILLUMUP": 280,
                "EJECT": 281,
                "SLEEP": 282,
                "APP1": 283,
                "APP2": 284,
                "AUDIOREWIND": 285,
                "AUDIOFASTFORWARD": 286,
                "SOFTLEFT": 287,
                "SOFTRIGHT": 288,
                "CALL": 289,
                "ENDCALL": 290,
                "LEFT_MOUSE": 513,
                "RIGHT_MOUSE": 515,
                "MIDDLE_MOUSE": 514,
                "X1": 516,
                "X2": 517
            }
        }
    }
}