Skip to content

Instantly share code, notes, and snippets.

@Southclaws
Created May 31, 2014 22:59
Show Gist options
  • Save Southclaws/9dc3e084370e6998ec08 to your computer and use it in GitHub Desktop.
Save Southclaws/9dc3e084370e6998ec08 to your computer and use it in GitHub Desktop.
Virtual canvas for translating resolutions to world coordinates.
/*
Virtual Canvas
For scaling squares and stuff like that.
It literally has 3 functions work it out.
*/
#if !defined MAX_VIRTUAL_CANVAS
#define MAX_VIRTUAL_CANVAS (VirtualCanvas:32)
#endif
#define INVALID_VIRTUAL_CANVAS (VirtualCanvas:-1)
enum E_VIRTUAL_CANVAS_DATA
{
Float: canv_minX,
Float: canv_maxX,
Float: canv_minY,
Float: canv_maxY,
canv_resX,
canv_resY
}
static
canv_Data[MAX_VIRTUAL_CANVAS][E_VIRTUAL_CANVAS_DATA],
Iterator: canv_Index<_:MAX_VIRTUAL_CANVAS>;
stock VirtualCanvas:CreateVirtualCanvas(Float:minx, Float:maxx, Float:miny, Float:maxy, resolution_x, resolution_y)
{
new VirtualCanvas:id = VirtualCanvas:Iter_Free(canv_Index);
if(id == INVALID_VIRTUAL_CANVAS)
return INVALID_VIRTUAL_CANVAS;
canv_Data[id][canv_minX] = minx;
canv_Data[id][canv_maxX] = maxx;
canv_Data[id][canv_minY] = miny;
canv_Data[id][canv_maxY] = maxy;
canv_Data[id][canv_resX] = resolution_x;
canv_Data[id][canv_resY] = resolution_y;
Iter_Add(canv_Index, _:id);
return id;
}
stock DestroyVirtualCanvas(VirtualCanvas:virtualcanvas)
{
if(!Iter_Contains(canv_Index, _:virtualcanvas))
return 0;
canv_Data[id][canv_minX] = 0.0;
canv_Data[id][canv_maxX] = 0.0;
canv_Data[id][canv_minY] = 0.0;
canv_Data[id][canv_maxY] = 0.0;
canv_Data[id][canv_resX] = 0;
canv_Data[id][canv_resY] = 0;
Iter_Remove(canv_Index, _:virtualcanvas);
return 1;
}
stock GetVirtualCanvasPos(VirtualCanvas:virtualcanvas, res_x, res_y, &Float:x, &Float:y)
{
if(!Iter_Contains(canv_Index, _:virtualcanvas))
return 0;
x = canv_Data[virtualcanvas][canv_minX] + (((canv_Data[virtualcanvas][canv_maxX] - canv_Data[virtualcanvas][canv_minX]) / canv_Data[virtualcanvas][canv_resX]) * float(res_x));
y = canv_Data[virtualcanvas][canv_minY] + (((canv_Data[virtualcanvas][canv_maxY] - canv_Data[virtualcanvas][canv_minY]) / canv_Data[virtualcanvas][canv_resY]) * float(res_y));
return 1;
}
// canv_minX
// canv_maxX
// canv_minY
// canv_maxY
// canv_resX
// canv_resY
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment