{
    "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"
        },

        "draw_sprite": {
            "module": "draw",
            "symbol": "sprite",
            "header": "twn_draw.h",
            "params": [
                { "name": "texture", "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"
        },

        "draw_nine_slice": {
            "module": "draw",
            "symbol": "nine_slice",
            "header": "twn_draw.h",
            "params": [
                { "name": "texture", "type": "char *" },
                { "name": "corners", "type": "Vec2" },
                { "name": "rect", "type": "Rect" },
                { "name": "border_thickness", "type": "float", "default": 0 },
                { "name": "color", "type": "Color", "default": { "r": 255, "g": 255, "b": 255, "a": 255 } }
            ]
        },

        "draw_line": {
            "module": "draw",
            "symbol": "line",
            "header": "twn_draw.h",
            "params": [
                { "name": "start", "type": "Vec2" },
                { "name": "finish", "type": "Vec2" },
                { "name": "thickness", "type": "float", "default": 1 },
                { "name": "color", "type": "Color", "default": { "r": 255, "g": 255, "b": 255, "a": 255 } }
            ]
        },

        "draw_triangle": {
            "module": "draw",
            "symbol": "triangle",
            "header": "twn_draw.h",
            "params": [
                { "name": "texture", "type": "char *" },
                { "name": "v0", "type": "Vec3" },
                { "name": "v1", "type": "Vec3" },
                { "name": "v2", "type": "Vec3" },
                { "name": "uv0", "type": "Vec2" },
                { "name": "uv1", "type": "Vec2" },
                { "name": "uv2", "type": "Vec2" },
                { "name": "c0", "type": "Color", "default": { "r": 255, "g": 255, "b": 255, "a": 255 } },
                { "name": "c1", "type": "Color", "default": { "r": 255, "g": 255, "b": 255, "a": 255 } },
                { "name": "c2", "type": "Color", "default": { "r": 255, "g": 255, "b": 255, "a": 255 } }
            ]
        },

        "draw_quad": {
            "module": "draw",
            "symbol": "quad",
            "header": "twn_draw.h",
            "params": [
                { "name": "texture", "type": "char *" },
                { "name": "v0", "type": "Vec3" },
                { "name": "v1", "type": "Vec3" },
                { "name": "v2", "type": "Vec3" },
                { "name": "v3", "type": "Vec3" },
                { "name": "texture_region", "type": "Rect" },
                { "name": "color", "type": "Color", "default": { "r": 255, "g": 255, "b": 255, "a": 255 } }
            ]
        },

        "draw_billboard": {
            "module": "draw",
            "symbol": "billboard",
            "header": "twn_draw.h",
            "params": [
                { "name": "texture", "type": "char *" },
                { "name": "position", "type": "Vec3" },
                { "name": "size", "type": "Vec2" },
                { "name": "color", "type": "Color", "default": { "r": 255, "g": 255, "b": 255, "a": 255 } },
                { "name": "cylindrical", "type": "bool", "default": false }
            ]
        },

        "draw_camera": {
            "module": "draw",
            "symbol": "camera",
            "header": "twn_draw.h",
            "params": [
                { "name": "position", "type": "Vec3" },
                { "name": "direction", "type": "Vec3", "default": { "x": 0, "y": 0, "z": -1 } },
                { "name": "up", "type": "Vec3", "default": { "x": 0, "y": 1, "z": 0 } },
                { "name": "fov", "type": "float", "default": 1.57079632679 },
                { "name": "zoom", "type": "float", "default": 1 }
            ]
        },

        "draw_camera_from_principal_axes": {
            "module": "draw",
            "symbol": "camera_from_principal_axes",
            "header": "twn_draw.h",
            "params": [
                { "name": "position", "type": "Vec3" },
                { "name": "roll", "type": "float", "default": 0 },
                { "name": "pitch", "type": "float", "default": 0 },
                { "name": "yaw", "type": "float", "default": 0 },
                { "name": "fov", "type": "float", "default": 1.57079632679 },
                { "name": "zoom", "type": "float", "default": 1 }
            ],
            "return": {
                "fields": [
                    { "name": "direction", "type": "Vec3" },
                    { "name": "up", "type": "Vec3" }
                ],
                "c_type": "DrawCameraFromPrincipalAxesResult"
            }
        },

        "draw_skybox": {
            "module": "draw",
            "symbol": "skybox",
            "header": "twn_draw.h",
            "params": [
                { "name": "textures", "type": "char *", "default": {} }
            ]
        },

        "audio_play": {
            "module": "audio",
            "symbol": "play",
            "header": "twn_audio.h",
            "params": [
                { "name": "audio", "type": "char *" },
                { "name": "channel", "type": "char *", "default": {} },
                { "name": "loops", "type": "bool", "default": false },
                { "name": "volume", "type": "float", "default": 1.0 },
                { "name": "panning", "type": "float", "default": 0.0 }
            ]
        },

        "audio_parameter": {
            "module": "audio",
            "symbol": "parameter",
            "header": "twn_audio.h",
            "params": [
                { "name": "channel", "type": "char *" },
                { "name": "parameter", "type": "char *" },
                { "name": "value", "type": "float" }
            ]
        },

        "log_vec2": {
            "module": "util",
            "symbol": "log_vec2",
            "header": "twn_util.h",
            "params": [
                { "name": "value", "type": "Vec2" },
                { "name": "identity", "type": "char *" }
            ]
        },

        "log_vec3": {
            "module": "util",
            "symbol": "log_vec3",
            "header": "twn_util.h",
            "params": [
                { "name": "value", "type": "Vec3" },
                { "name": "identity", "type": "char *" }
            ]
        },

        "log_rect": {
            "module": "util",
            "symbol": "log_rect",
            "header": "twn_util.h",
            "params": [
                { "name": "value", "type": "Rect" },
                { "name": "identity", "type": "char *" }
            ]
        },

        "profile_start": {
            "module": "util",
            "symbol": "profile_start",
            "header": "twn_util.h",
            "params": [
                { "name": "profile", "type": "char *" }
            ]
        },

        "profile_end": {
            "module": "util",
            "symbol": "profile_end",
            "header": "twn_util.h",
            "params": [
                { "name": "profile", "type": "char *" }
            ]
        }
    },

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

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

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

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

        "Context": {
            "fields": [
                { "name": "frame_number", "type": "float" },
                { "name": "frame_duration", "type": "float" },
                { "name": "fog_density", "type": "float" },
                { "name": "fog_color", "type": "Color" },
                { "name": "resolution", "type": "Vec2" },
                { "name": "mouse_position", "type": "Vec2" },
                { "name": "mouse_movement", "type": "Vec2" },
                { "name": "random_seed", "type": "float" },
                { "name": "debug", "type": "bool" },
                { "name": "initialization_needed", "type": "bool" },
                { "name": "mouse_capture", "type": "bool" }
            ],
            "c_type": "Context"
        },

        "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
            }
        }
    }
}