Skip to content

Commit 658e8fc

Browse files
committed
Merge dynsprite_experiment into main
2 parents dcbb16b + 95eeaae commit 658e8fc

File tree

15 files changed

+127
-19
lines changed

15 files changed

+127
-19
lines changed

gml-outline-shader-drawer.resource_order

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
{"name":"CanvasIsCanvas","order":4,"path":"scripts/CanvasIsCanvas/CanvasIsCanvas.yy",},
1515
{"name":"sprite_to_canvas","order":5,"path":"scripts/sprite_to_canvas/sprite_to_canvas.yy",},
1616
{"name":"DemoPotion","order":6,"path":"objects/DemoPotion/DemoPotion.yy",},
17+
{"name":"sprRedPotionAnim","order":9,"path":"sprites/sprRedPotionAnim/sprRedPotionAnim.yy",},
1718
{"name":"sprHellToHeaven","order":4,"path":"sprites/sprHellToHeaven/sprHellToHeaven.yy",},
1819
{"name":"__CanvasCleanupQueue","order":1,"path":"scripts/__CanvasCleanupQueue/__CanvasCleanupQueue.yy",},
1920
{"name":"__CanvasTrace","order":6,"path":"scripts/__CanvasTrace/__CanvasTrace.yy",},

gml-outline-shader-drawer.yyp

Lines changed: 1 addition & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

objects/DemoPotion/DemoPotion.yy

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

objects/OutlineObjectBaked/Create_0.gml

Lines changed: 25 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,23 @@
11
/// @description bake on first draw
22
event_inherited();
3-
canvas = undefined;
3+
canvas = undefined;
4+
dynsprite = undefined;
5+
origsprite = sprite_index;
6+
7+
__browser_flip = (os_browser != browser_not_a_browser) ? -1 : 1;
48

59
__free = function() {
610
if (canvas != undefined)
711
canvas.free();
12+
13+
if (dynsprite != undefined)
14+
sprite_delete(dynsprite);
815
}
916

1017
/// @function bake()
1118
bake = function() {
12-
if (canvas != undefined) canvas.free();
19+
__free();
20+
origsprite = sprite_index;
1321
show_debug_message("Pre-Baking sprite '{0}' with {1} frames", sprite_get_name(sprite_index), image_number);
1422
var begintime = current_time;
1523
var shader = shd_outline;
@@ -19,7 +27,7 @@ bake = function() {
1927
var u_thickness = shader_get_uniform(shader, "u_vThickness");
2028
var u_vPulse = shader_get_uniform(shader, "u_vPulse");
2129

22-
canvas = sprite_to_canvas(sprite_index, -1, outline_strength + TEXTURE_PAGE_BORDER_SIZE);
30+
canvas = sprite_to_canvas(sprite_index, -1, outliner.outline_strength + TEXTURE_PAGE_BORDER_SIZE);
2331
// now bake it with the outliner
2432
var target = new Canvas(canvas.canvas.GetWidth(), canvas.canvas.GetHeight(), true);
2533
target.Start();
@@ -42,16 +50,26 @@ bake = function() {
4250
canvas.canvas.Free();
4351
// ...and inject the pre-baked
4452
canvas.canvas = target;
53+
54+
dynsprite = canvas.create_sprite();
55+
sprite_set_bbox_mode(dynsprite, bboxmode_manual);
56+
sprite_set_bbox(dynsprite,
57+
sprite_get_bbox_left (sprite_index) + __browser_flip * (2 * outliner.outline_strength + TEXTURE_PAGE_BORDER_SIZE / 2),
58+
sprite_get_bbox_top (sprite_index) + __browser_flip * (2 * outliner.outline_strength + TEXTURE_PAGE_BORDER_SIZE / 2),
59+
sprite_get_bbox_right (sprite_index) + __browser_flip * (2 * outliner.outline_strength + TEXTURE_PAGE_BORDER_SIZE / 2),
60+
sprite_get_bbox_bottom(sprite_index) + __browser_flip * (2 * outliner.outline_strength + TEXTURE_PAGE_BORDER_SIZE / 2));
61+
4562
show_debug_message("Pre-Baking took {0}ms", current_time - begintime);
4663
}
4764

4865
__draw = function() {
4966
if (canvas == undefined) bake();
67+
var before = sprite_index;
68+
sprite_index = (outline_always || (outline_on_mouse_over && mouse_is_over)) ? dynsprite : origsprite;
69+
if (sprite_index != before && (os_browser != browser_not_a_browser)) image_yscale *= __browser_flip;
5070
image_index = canvas.get_image_index(delta_time, image_speed);
51-
if (outline_always || (outline_on_mouse_over && mouse_is_over))
52-
canvas.draw_frame_ext(image_index, x, y, depth, image_xscale, image_yscale, image_angle, image_blend, image_alpha);
53-
else
54-
draw_self();
71+
72+
draw_self();
5573
}
5674

5775
if (sprite_index != -1) bake();

options/html5/options_html5.yy

Lines changed: 3 additions & 3 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

options/windows/options_windows.yy

Lines changed: 3 additions & 3 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

rooms/rmDemo/rmDemo.yy

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

scripts/sprite_to_canvas/sprite_to_canvas.gml

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -71,13 +71,14 @@ function CanvasSprite(_canvas, _image_count, _fps, _xoffset, _yoffset, _bordersi
7171
__matrix = matrix_build(xp, yp, draw_depth, 0, 0, rot * __browser_flip, xscale, yscale * __browser_flip, 1);
7272
matrix_set(matrix_world, __matrix);
7373
//_left, _top, _width, _height, _x, _y, _xscale, _yscale, _rot, _col1, _col2, _col3, _col4, _alpha
74-
canvas.DrawGeneral(subimages[@ frame], 0, image_width, image_height,
74+
canvas.DrawGeneral(subimages[@ frame], 0,
75+
image_width, image_height,
7576
-xoffset - bordersize, -yoffset - bordersize + __render_y,
7677
1, 1, 0, col, col, col, col, alpha);
7778
matrix_set(matrix_world, matrix_build_identity());
7879
}
7980

80-
/// @function get_image_index = function(_elapsed, _image_speed)
81+
/// @function get_image_index(_elapsed, _image_speed)
8182
/// @description Should be called every STEP to ensure continuous correct animation
8283
/// when you draw this sprite manually.
8384
/// Example (STEP event):
@@ -94,7 +95,16 @@ function CanvasSprite(_canvas, _image_count, _fps, _xoffset, _yoffset, _bordersi
9495

9596
return sub_idx;
9697
}
97-
98+
99+
/// @function create_sprite()
100+
/// @description Creates a dynamic sprite out of the frames of this canvas surface
101+
static create_sprite = function() {
102+
var rv = sprite_create_from_surface(canvas.GetSurfaceID(),0,0,image_width,image_height,false,false,xoffset+bordersize,yoffset+bordersize);
103+
for (var i = 1, len = array_length(subimages); i < len; i++)
104+
sprite_add_from_surface(rv,canvas.GetSurfaceID(),subimages[@i],0,image_width,image_height,false,false);
105+
return rv;
106+
}
107+
98108
/// @function free()
99109
/// @description Release the underlying canvas
100110
static free = function() {
Loading
Loading
Loading

sprites/sprRedPotionAnim/sprRedPotionAnim.yy

Lines changed: 78 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)