Skip to content

Instantly share code, notes, and snippets.

@tinkerer-red
Created October 12, 2023 07:07
Show Gist options
  • Save tinkerer-red/b30d0033348a5b32e72a155e96efec95 to your computer and use it in GitHub Desktop.
Save tinkerer-red/b30d0033348a5b32e72a155e96efec95 to your computer and use it in GitHub Desktop.
GML: Room to struct boiler plate code
function current_room_to_struct() {
var _room = {
"Controls" : {
//"room_goto" : room_goto(),
//"room_goto_next" : room_goto_next(),
//"room_goto_previous" : room_goto_previous(),
//"room_restart" : room_restart(),
},
"Room Settings" : {
"Read Only" : {
"Room ID" : room,
"Room Name" : room_get_name(room),
},
"room_persistent" : room_persistent,
"room_speed" : room_speed,
"room_height" : room_height,
"room_width" : room_width,
},
"Viewports and Cameras" : {
"Enable Viewports" : view_enabled,
"Default Camera" : camera_get_default(), //camera_set_default(_value)
},
"Room Physics" : {
"Currently Not Possible to Access at Runtime" : true,
},
"Layers" : {
"Global" : {
"Force Draw Depth" : {
"Enabled" : layer_get_forced_depth(), //layer_force_draw_depth(_bool, layer_is_draw_depth_forced())
"Depth" : layer_is_draw_depth_forced(), //layer_force_draw_depth(layer_get_forced_depth(), _depth)
},
},
},
}
//populate the Viewports
var _viewports = _room[$ "Viewports and Cameras"];
var _i=0; repeat(8) {
_viewports[$ "Viewport "+string(_i)] = viewport_to_struct(_i);
_i+=1;}//end repeat loop
//populate the Layers
var _layers_struct = _room[$ "Layers"];
var _layers = layer_get_all();
log(["_layers", _layers])
var _i=0; repeat(array_length(_layers)) {
var _layer = _layers[_i];
log("Adding Layer : "+layer_get_name(_layer))
_layers_struct[$ layer_get_name(_layer)] = layer_to_struct(_layer);
_i+=1;}//end repeat loop
return _room;
}
function viewport_to_struct(_view) {
var _viewport = {
"view_visible" : view_get_visible(_view), //view_set_visible(_view, _bool)
"view_surface_id" : view_get_surface_id(_view), //view_set_surface_id(_view, _surface_id)
"Camera Properties" : camera_to_struct(view_get_camera(_view)), //view_set_camera(_view, _cam)
"Viewport Properties" : {
"view_xport" : view_get_xport(_view), //view_set_xport(_view, _value)
"view_yport" : view_get_yport(_view), //view_set_yport(_view, _value)
"view_wport" : view_get_wport(_view), //view_set_wport(_view, _value)
"view_hport" : view_get_hport(_view), //view_set_hport(_view, _value)
},
"Object Following" : {
"View Target" : camera_get_view_target(_view), //camera_set_view_target(_cam, _obj)
"Horizontal Border" : camera_get_view_border_x(_view), //camera_set_view_border(_cam, _value, camera_get_view_border_y(_cam))
"Vertical Border" : camera_get_view_border_y(_view), //camera_set_view_border(_cam, camera_get_view_border_x(_cam), _value)
"Horizontal Speed" : camera_get_view_speed_x(_view), //camera_set_view_speed(_cam, _value, camera_get_view_speed_y(_cam))
"Vertical Speed" : camera_get_view_speed_y(_view), //camera_set_view_speed(_cam, camera_get_view_speed_x(_cam), _value)
},
}
return _viewport;
}
function camera_to_struct(_cam) {
var _camera = {
"X Pos" : camera_get_view_x(_cam), //camera_set_view_pos(_cam, _value, camera_get_view_y(_cam))
"Y Pos" : camera_get_view_y(_cam), //camera_set_view_pos(_cam, camera_get_view_x(_cam), _value)
"Width" : camera_get_view_width(_cam), //camera_set_view_size(_cam, _value, camera_get_view_height(_cam))
"Height" : camera_get_view_height(_cam), //camera_set_view_size(_cam, camera_get_view_width(_cam), _value)
"Angle" : camera_get_view_angle(_cam), //camera_set_view_angle(_cam, _angle)
"Scripts" : {
"Update Script" : camera_get_update_script(_cam), //camera_set_update_script(_cam, _func)
"Begin Script" : camera_get_begin_script(_cam), //camera_set_begin_script(_cam, _func)
"End Script" : camera_get_end_script(_cam), //camera_set_end_script(_cam, _func)
},
"Advanced" : {
"View Matrix" : camera_get_view_mat(_cam), //camera_set_view_mat(_cam, _matrix_arr)
"Projection Matrix" : camera_get_proj_mat(_cam), //camera_set_proj_mat(_cam, _matrix_arr)
}
}
return _camera;
}
function layer_to_struct(_layer_id) {
var _layer = {
"Read Only" : {
"id" : _layer_id,
},
"Elements" : {
},
"Properties" : {
"x" : layer_get_x(_layer_id), //layer_x(_layer_id, _value)
"y" : layer_get_y(_layer_id), //layer_y(_layer_id, _value)
"hspeed" : layer_get_hspeed(_layer_id), //layer_hspeed(_layer_id, _value)
"vspeed" : layer_get_vspeed(_layer_id), //layer_vspeed(_layer_id, _value)
"visible" : layer_get_visible(_layer_id), //layer_set_visible(_layer_id, _bool)
"depth" : layer_get_depth(_layer_id), //layer_depth(_layer_id)
"script_begin" : layer_get_script_begin(_layer_id), //layer_script_begin(_layer_id, _script)
"script_end" : layer_get_script_end(_layer_id), //layer_script_end(_layer_id, _script)
"shader" : layer_get_shader(_layer_id), //layer_shader(_layer_id, _shader)
},
"Filters & Effects" : {
"Enabled" : layer_fx_is_enabled(_layer_id), //layer_enable_fx(_bool)
},
};
var _elements = layer_get_all_elements(_layer_id)
log(["_elements", _elements])
var _i=0; repeat(array_length(_elements)) {
_layer[$ "Elements"][$ "<"+string(_elements[_i])+">"] = layer_element_to_struct(_elements[_i]);
_i+=1;}//end repeat loop
if (layer_get_fx(_layer_id) != -1) {
var _fx_folder = _layer[$ "Filters & Effects"]
_fx_folder[$ layer_fx_get_readable_name(fx_get_name(layer_get_fx(_layer_id)))] = layer_fx_to_struct(layer_get_fx(_layer_id));
}
return _layer;
}
function layer_element_to_struct(_layer_elem) {
var _type = layer_get_element_type(_layer_elem);
var _element = {
"Read Obly" : {
"Type" : _type,
},
};
switch (_type) {
case layerelementtype_background: {
_element[$ "visible"] = layer_background_get_visible(_layer_elem); //layer_background_visible(_layer_elem, _bool)
_element[$ "sprite"] = layer_background_get_sprite(_layer_elem); //layer_background_sprite(_layer_elem, _sprite)
_element[$ "htiled"] = layer_background_get_htiled(_layer_elem); //layer_background_htiled(_layer_elem, _bool)
_element[$ "vtiled"] = layer_background_get_vtiled(_layer_elem); //layer_background_vtiled(_layer_elem, _bool)
_element[$ "stretch"] = layer_background_get_stretch(_layer_elem); //layer_background_stretch(_layer_elem, _bool)
_element[$ "blend"] = layer_background_get_blend(_layer_elem); //layer_background_blend(_layer_elem, _color)
_element[$ "alpha"] = layer_background_get_alpha(_layer_elem); //layer_background_alpha(_layer_elem, _float)
_element[$ "index"] = layer_background_get_index(_layer_elem); //layer_background_index(_layer_elem, _real)
_element[$ "speed"] = layer_background_get_speed(_layer_elem); //layer_background_speed(_layer_elem, _real)
_element[$ "xscale"] = layer_background_get_xscale(_layer_elem); //layer_background_xscale(_layer_elem, _real)
_element[$ "yscale"] = layer_background_get_yscale(_layer_elem); //layer_background_yscale(_layer_elem, _real)
break;}
case layerelementtype_instance: {
break;}
case layerelementtype_sprite: {
_element[$ "sprite"] = layer_sprite_get_sprite(_layer_elem); //layer_sprite_change(_layer_elem, _sprite)
_element[$ "index"] = layer_sprite_get_index(_layer_elem); //layer_sprite_index(_layer_elem, _real)
_element[$ "speed"] = layer_sprite_get_speed(_layer_elem); //layer_sprite_speed(_layer_elem, _real)
_element[$ "xscale"] = layer_sprite_get_xscale(_layer_elem); //layer_sprite_xscale(_layer_elem, _real)
_element[$ "yscale"] = layer_sprite_get_yscale(_layer_elem); //layer_sprite_yscale(_layer_elem, _real)
_element[$ "angle"] = layer_sprite_get_angle(_layer_elem); //layer_sprite_angle(_layer_elem, _angle)
_element[$ "blend"] = layer_sprite_get_blend(_layer_elem); //layer_sprite_blend(_layer_elem, _color)
_element[$ "angle"] = layer_sprite_get_alpha(_layer_elem); //layer_sprite_alpha(_layer_elem, _float)
_element[$ "x"] = layer_sprite_get_x(_layer_elem); //layer_sprite_x(_layer_elem, _real)
_element[$ "y"] = layer_sprite_get_y(_layer_elem); //layer_sprite_y(_layer_elem, _real)
break;}
case layerelementtype_tilemap:
case layerelementtype_oldtilemap:
case layerelementtype_tile: {
_element[$ "tileset"] = tilemap_get_tileset(_layer_elem); //tilemap_tileset(_layer_elem, _tileset)
_element[$ "x"] = tilemap_get_x(_layer_elem); //tilemap_x(_layer_elem, _real)
_element[$ "y"] = tilemap_get_y(_layer_elem); //tilemap_y(_layer_elem, _real)
_element[$ "mask"] = tilemap_get_mask(_layer_elem); //tilemap_set_mask(_layer_elem, _real)
//_element[$ "mask"] = tilemap_get_global_mask(_layer_elem); //tilemap_set_global_mask(_layer_elem, _real)
_element[$ "width"] = tilemap_get_width(_layer_elem); //tilemap_set_width(_layer_elem, _real)
_element[$ "height"] = tilemap_get_height(_layer_elem); //tilemap_set_height(_layer_elem, _real)
/// NO WAY TO SET IT _element[$ "frame"] = tilemap_get_frame(_layer_elem);
break;}
case layerelementtype_particlesystem: {
break;}
case layerelementtype_sequence: {
_element[$ "playing"] = layer_sequence_is_paused(_layer_elem); //function(_layer_elem, _bool){ return (_bool) ? layer_sequence_play(_layer_elem) : layer_sequence_pause(_layer_elem) }
_element[$ "x"] = layer_sequence_get_x(_layer_elem); //layer_sequence_x(_layer_elem, _real)
_element[$ "y"] = layer_sequence_get_y(_layer_elem); //layer_sequence_y(_layer_elem, _real)
_element[$ "angle"] = layer_sequence_get_angle(_layer_elem); //layer_sequence_angle(_layer_elem, _real)
_element[$ "xscale"] = layer_sequence_get_xscale(_layer_elem); //layer_sequence_xscale(_layer_elem, _real)
_element[$ "yscale"] = layer_sequence_get_yscale(_layer_elem); //layer_sequence_yscale(_layer_elem, _real)
_element[$ "headpos"] = layer_sequence_get_headpos(_layer_elem); //layer_sequence_headpos(_layer_elem, _real)
_element[$ "headdir"] = layer_sequence_get_headdir(_layer_elem); //layer_sequence_headdir(_layer_elem, _real)
_element[$ "speedscale"] = layer_sequence_get_speedscale(_layer_elem); //layer_sequence_speedscale(_layer_elem)
break;}
case layerelementtype_undefined: {
break;}
}
return _element
}
function layer_fx_to_struct(_filter_or_effect) {
var _fx = {
"Single Layer" : fx_get_single_layer(_filter_or_effect), //fx_set_single_layer(_filter_or_effect, _bool)
"Effect Type" : fx_get_name(_filter_or_effect), //layer_set_fx(fx_create(_string))
"expanded tools for FX coming soon" : 0.5 //bool
};
var _args = fx_get_parameter_names(_filter_or_effect);
var _i=0; repeat(array_length(_args)) {
var _name = _args[_i];
_fx[$ _name] = fx_get_parameter(_filter_or_effect, _name) //fx_set_parameter(_filter_or_effect)
_i+=1;}//end repeat loop
return _fx;
}
function layer_fx_get_readable_name(_name) {
#region Readable formatted names
static _readable_name_lookup = {
#region Filters
"_filter_blocks": "Blocks Background",
"_filter_boxes": "Boxes",
"_filter_clouds": "Clouds",
"_filter_colour_balance": "Colour Balance",
"_filter_tintfilter": "Colour Tint",
"_filter_colourise": "Colourise",
"_filter_contrast": "Constrast",
"_filter_greyscale": "Desaturate",
"_filter_distort": "Distort",
"_filter_dots": "Dots Background",
"_filter_edgedetect": "Edge Detect",
"_filter_fractal_noise": "Fractal Noise",
"_filter_gradient": "Gradient",
"_filter_heathaze": "Heat Haze",
"_filter_hue": "Hue",
"_filter_large_blur": "Large Blur",
"_filter_linear_blur": "Linear Blur",
"_filter_lut_colour": "LUT Colour Grading",
"_filter_mask": "Mask",
"_filter_old_film": "Old Film",
"_filter_outline": "Outline",
"_filter_panorama": "Panorama Background",
"_filter_parallax": "Parallax Background",
"_filter_pixelate": "Pixelate",
"_filter_posterise": "Posterise",
"_filter_rgbnoise": "RGB Noise",
"_filter_ripples": "Ripples",
"_filter_screenshake": "Screen Shake",
"_filter_stripes": "Stripes Background",
"_filter_twirl_distort": "Twirl Distort",
"_filter_twist_blur": "Twist Blur",
"_filter_underwater": "Underwater",
"_filter_vignette": "Vignette",
"_filter_whitenoise": "White Noise",
"_filter_zoom_blur": "Zoom Blur",
#endregion
#region Effects
"_effect_blend": "Blend",
"_effect_blend_ext": "Blend Ext",
"_effect_glow": "Glow",
"_effect_recursive_blur": "Recursive Blur",
"_effect_windblown_particles": "Windblown Particles",
#endregion
}
#endregion
return _readable_name_lookup[$ _name];
}
@xChillax
Copy link

Just letting you know but in line 149 (layer_element_to_struct) "Read Only" is mispelled as "Read Obly".

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment