tiny-game-framework 0.0.163

Tiny game framework for creating games!
Documentation
#![allow(deref_nullptr)]

#[macro_export]
macro_rules! gen_attrib_pointers {
    ($struct_name:ident, $($index:expr => $field_name:ident: $dimension:expr),*) => {
        $(
            let offset = &((*std::ptr::null::<$struct_name>()).$field_name) as *const _ as *const std::ffi::c_void;
            EnableVertexAttribArray($index);
            VertexAttribPointer($index, $dimension, FLOAT, FALSE, std::mem::size_of::<$struct_name>() as GLsizei, offset);
        )*
    };
}

#[macro_export]
macro_rules! bind_buffer {
    ($buffer_type:expr, $buffer:expr, $data:expr) => {{
        BindBuffer($buffer_type, $buffer);
        let size = ($data.len() * std::mem::size_of_val(&$data[0])) as isize;
        let data_ptr = &$data[0] as *const _ as *const std::ffi::c_void;
        BufferData($buffer_type, size, data_ptr, STATIC_DRAW);
    }};
}

#[macro_export]
macro_rules! im_debug {
    ($name:expr, $data:expr, $frame:expr) => {{
        let name = $name;
        let increase_indent = ['(', '{', '[', ':', ','];
        let decrease_indent = [')', '}', ']'];

        let mut result = String::new();
        let mut indent_level = 0;
        
        let data_str = format!("{:?}", $data);

        for part in data_str.split(|c| increase_indent.contains(&c) || decrease_indent.contains(&c)) {
            let trimmed_part = part.trim();
            if trimmed_part.is_empty() {
                continue;
            }

            if let Some(first_char) = trimmed_part.chars().next() {
                if decrease_indent.contains(&first_char) && indent_level > 0 {
                    indent_level -= 1;
                }
            }

            let indentation = "    ".repeat(indent_level);
            result.push_str(&indentation);
            result.push_str(trimmed_part);
            result.push_str("\n");
            
            if let Some(last_char) = trimmed_part.chars().last() {
                if increase_indent.contains(&last_char) {
                    indent_level += 1;
                }
            }
        }

        $frame.text(format!("{}:\n{}", name, result));
    }};
}