From 8b1565956a94d9490e6d567637538ca53343c9c7 Mon Sep 17 00:00:00 2001 From: Lojemiru <33508026+Lojemiru@users.noreply.github.com> Date: Sun, 8 Jan 2023 21:22:26 -0600 Subject: [PATCH 01/12] Initial changes for flips --- app/assets/css/app.scss | 8 +++ app/assets/tpl/entityInstanceEditor.html | 10 +++- .../data/inst/EntityInstance.hx | 10 +++- .../ui/EntityInstanceEditor.hx | 53 ++++++++++++++++++- 4 files changed, 77 insertions(+), 4 deletions(-) diff --git a/app/assets/css/app.scss b/app/assets/css/app.scss index 15842d6e7..4a93acbb9 100644 --- a/app/assets/css/app.scss +++ b/app/assets/css/app.scss @@ -6055,6 +6055,14 @@ canvas#webgl { color: $orange; } } + + &.flips { + align-items: center; + input { + padding: 3px; + font-size: 0.8em; + } + } } } } diff --git a/app/assets/tpl/entityInstanceEditor.html b/app/assets/tpl/entityInstanceEditor.html index 1f1f6a0d1..fd27da0fa 100644 --- a/app/assets/tpl/entityInstanceEditor.html +++ b/app/assets/tpl/entityInstanceEditor.html @@ -30,6 +30,14 @@ +
+ Flips + How this Entity instance is oriented on the X and Y axes. +
+
+ X Y +
+
References to this entity This is a list of all other Entities having a Reference field pointing to this Entity. @@ -44,4 +52,4 @@
-
\ No newline at end of file +
diff --git a/src/electron.renderer/data/inst/EntityInstance.hx b/src/electron.renderer/data/inst/EntityInstance.hx index a36dbef75..d45003f1a 100644 --- a/src/electron.renderer/data/inst/EntityInstance.hx +++ b/src/electron.renderer/data/inst/EntityInstance.hx @@ -15,6 +15,7 @@ class EntityInstance { public var worldY(get,never) : Int; public var customWidth : Null; public var customHeight: Null; + public var flips : Int; public var width(get,never) : Int; inline function get_width() return customWidth!=null ? customWidth : def.width; @@ -30,11 +31,12 @@ class EntityInstance { public var bottom(get,never) : Int; inline function get_bottom() return top + height; - public function new(p:Project, li:LayerInstance, entityDefUid:Int, iid:String) { + public function new(p:Project, li:LayerInstance, entityDefUid:Int, iid:String, flips:Int = 0) { _project = p; _li = li; defUid = entityDefUid; this.iid = iid; + this.flips = flips; } @:keep public function toString() { @@ -68,6 +70,7 @@ class EntityInstance { height: height, defUid: defUid, px: [x,y], + f: flips, fieldInstances: { var all = []; for(fd in def.fieldDefs) @@ -88,6 +91,7 @@ class EntityInstance { layer: _li.def.identifier, x : x, y : y, + f: flips, width: width, height: height, color: getSmartColor(false), @@ -109,6 +113,8 @@ class EntityInstance { ei.x = JsonTools.readInt( json.px[0], 0 ); ei.y = JsonTools.readInt( json.px[1], 0 ); + ei.flips = JsonTools.readInt( json.f, 0 ); + ei.customWidth = JsonTools.readNullableInt( json.width ); if( ei.customWidth==ei.def.width ) ei.customWidth = null; @@ -363,4 +369,4 @@ class EntityInstance { } -} \ No newline at end of file +} diff --git a/src/electron.renderer/ui/EntityInstanceEditor.hx b/src/electron.renderer/ui/EntityInstanceEditor.hx index 0b8f4764f..f7c256220 100644 --- a/src/electron.renderer/ui/EntityInstanceEditor.hx +++ b/src/electron.renderer/ui/EntityInstanceEditor.hx @@ -262,6 +262,57 @@ class EntityInstanceEditor extends dn.Process { if( UNIT_GRID ) i.setUnit(ei._li.def.gridSize); + // Flip block + var jFlips = jPropsForm.find(".flips"); + var jUnit2 = jFlips.find(".unit"); + jUnit2.text( UNIT_GRID ? "cells" : "px" ); + jUnit2.click( _->{ + UNIT_GRID = !UNIT_GRID; + updateInstancePropsForm(); + }); + + // X + var i = new form.input.BoolInput( + jFlips.find("[name=x]"), + ()->(ei.flips == 1 || ei.flips == 3), + (v)->{ + switch (ei.flips) { + case 0: + ei.flips = 1; + case 1: + ei.flips = 0; + case 2: + ei.flips = 3; + case 3: + ei.flips = 2; + } + } + ); + i.setEnabled( ei.def.resizableX ); + i.linkEvent( EntityInstanceChanged(ei) ); + i.onChange = ()->onEntityFieldChanged(); + + // Y + var i = new form.input.BoolInput( + jFlips.find("[name=y]"), + ()->(ei.flips == 2 || ei.flips == 3), + (v)->{ + switch (ei.flips) { + case 0: + ei.flips = 2; + case 2: + ei.flips = 0; + case 1: + ei.flips = 3; + case 3: + ei.flips = 1; + } + } + ); + i.setEnabled( ei.def.resizableY ); + i.linkEvent( EntityInstanceChanged(ei) ); + i.onChange = ()->onEntityFieldChanged(); + // References to this var refs = project.getEntityInstancesReferingTo(ei); @@ -313,4 +364,4 @@ class EntityInstanceEditor extends dn.Process { if( !isOccupied && jWindow.hasClass("faded") ) jWindow.removeClass("faded"); } -} \ No newline at end of file +} From 616932ec60a6531acdbbd47329e1b94b22fad422 Mon Sep 17 00:00:00 2001 From: Lojemiru <33508026+Lojemiru@users.noreply.github.com> Date: Tue, 10 Jan 2023 02:21:53 -0600 Subject: [PATCH 02/12] Add EntityDefs integration, add rough visuals --- app/assets/tpl/editEntityDefs.html | 12 ++++++++++++ app/assets/tpl/entityInstanceEditor.html | 2 +- src/electron.renderer/data/def/EntityDef.hx | 9 ++++++++- src/electron.renderer/display/EntityRender.hx | 19 +++++++++++++++---- .../ui/EntityInstanceEditor.hx | 4 ++-- .../ui/modal/panel/EditEntityDefs.hx | 6 ++++++ 6 files changed, 44 insertions(+), 8 deletions(-) diff --git a/app/assets/tpl/editEntityDefs.html b/app/assets/tpl/editEntityDefs.html index cd55ba0ec..8b69604fe 100644 --- a/app/assets/tpl/editEntityDefs.html +++ b/app/assets/tpl/editEntityDefs.html @@ -80,6 +80,18 @@

Project entities

Keep aspect ratio +
+ Flippable: + + + +
diff --git a/app/assets/tpl/entityInstanceEditor.html b/app/assets/tpl/entityInstanceEditor.html index fd27da0fa..a354ed946 100644 --- a/app/assets/tpl/entityInstanceEditor.html +++ b/app/assets/tpl/entityInstanceEditor.html @@ -35,7 +35,7 @@ How this Entity instance is oriented on the X and Y axes.
- X Y + Horizontal Vertical
diff --git a/src/electron.renderer/data/def/EntityDef.hx b/src/electron.renderer/data/def/EntityDef.hx index abb409062..5403530ad 100644 --- a/src/electron.renderer/data/def/EntityDef.hx +++ b/src/electron.renderer/data/def/EntityDef.hx @@ -29,6 +29,8 @@ class EntityDef { public var resizableX : Bool; public var resizableY : Bool; + public var flippableX : Bool; + public var flippableY : Bool; public var keepAspectRatio : Bool; public var pivotX(default,set) : Float; public var pivotY(default,set) : Float; @@ -58,6 +60,7 @@ class EntityDef { identifier = "Entity"+uid; setPivot(0.5,1); resizableX = resizableY = false; + flippableX = flippableY = false; keepAspectRatio = false; hollow = false; tags = new Tags(); @@ -140,6 +143,8 @@ class EntityDef { o.height = JsonTools.readInt( json.height, 16 ); o.resizableX = JsonTools.readBool( json.resizableX, false ); o.resizableY = JsonTools.readBool( json.resizableY, false ); + o.flippableX = JsonTools.readBool( json.flippableX, false ); + o.flippableY = JsonTools.readBool( json.flippableY, false ); o.keepAspectRatio = JsonTools.readBool( json.keepAspectRatio, false ); o.hollow = JsonTools.readBool( json.hollow, false ); @@ -188,6 +193,8 @@ class EntityDef { height: height, resizableX: resizableX, resizableY: resizableY, + flippableX: flippableX, + flippableY: flippableY, keepAspectRatio: keepAspectRatio, tileOpacity: JsonTools.writeFloat(tileOpacity), fillOpacity: JsonTools.writeFloat(fillOpacity), @@ -305,4 +312,4 @@ class EntityDef { for(fd in fieldDefs) fd.tidy(p); } -} \ No newline at end of file +} diff --git a/src/electron.renderer/display/EntityRender.hx b/src/electron.renderer/display/EntityRender.hx index abf7fa3a8..3c889c09f 100644 --- a/src/electron.renderer/display/EntityRender.hx +++ b/src/electron.renderer/display/EntityRender.hx @@ -98,6 +98,8 @@ class EntityRender extends dn.Process { var w = ei!=null ? ei.width : ed.width; var h = ei!=null ? ei.height : ed.height; + var axisX = (ei!=null && (ei.flips==1 || ei.flips==3)) ? -1 : 1; + var axisY = (ei!=null && (ei.flips==2 || ei.flips==3)) ? -1 : 1; var color = ei!=null ? ei.getSmartColor(false) : ed.color; var wrapper = new h2d.Object(); @@ -138,8 +140,8 @@ class EntityRender extends dn.Process { bmp.tile.setCenterRatio(ed.pivotX, ed.pivotY); bmp.alpha = alpha; - bmp.scaleX = w / bmp.tile.width; - bmp.scaleY = h / bmp.tile.height; + bmp.scaleX = w / bmp.tile.width * axisX; + bmp.scaleY = h / bmp.tile.height * axisY; case FitInside: var bmp = new h2d.Bitmap(t, wrapper); @@ -150,12 +152,15 @@ class EntityRender extends dn.Process { var s = M.fmin(w / bmp.tile.width, h / bmp.tile.height); bmp.setScale(s); + bmp.scaleX *= axisX; + bmp.scaleY *= axisY; case Repeat: var tt = new dn.heaps.TiledTexture(t, w,h, wrapper); tt.alpha = alpha; tt.x = -w*ed.pivotX + (ld==null ? 0 : ld.pxOffsetX); tt.y = -h*ed.pivotY + (ld==null ? 0 : ld.pxOffsetY); + // TODO: axis flips are gonna be messy here :( case Cover: var bmp = new h2d.Bitmap(wrapper); @@ -173,6 +178,8 @@ class EntityRender extends dn.Process { ); bmp.tile.setCenterRatio(ed.pivotX, ed.pivotY); bmp.setScale(s); + bmp.scaleX *= axisX; + bmp.scaleY *= axisY; case FullSizeCropped: var bmp = new h2d.Bitmap(wrapper); @@ -187,6 +194,8 @@ class EntityRender extends dn.Process { ); bmp.tile.setCenterRatio(ed.pivotX, ed.pivotY); bmp.alpha = alpha; + bmp.scaleX *= axisX; + bmp.scaleY *= axisY; case FullSizeUncropped: var bmp = new h2d.Bitmap(t, wrapper); @@ -195,6 +204,8 @@ class EntityRender extends dn.Process { bmp.tile.setCenterRatio(ed.pivotX, ed.pivotY); bmp.alpha = alpha; + bmp.scaleX *= axisX; + bmp.scaleY *= axisY; case NineSlice: var sg = new h2d.ScaleGrid( @@ -209,7 +220,7 @@ class EntityRender extends dn.Process { sg.height = h; sg.x = -w*ed.pivotX + (ld==null ? 0 : ld.pxOffsetX); sg.y = -h*ed.pivotY + (ld==null ? 0 : ld.pxOffsetY); - + // TODO: I don't think h2d supports flipping nineslice renders. Do we even want to cause that? } } } @@ -401,4 +412,4 @@ class EntityRender extends dn.Process { } } -} \ No newline at end of file +} diff --git a/src/electron.renderer/ui/EntityInstanceEditor.hx b/src/electron.renderer/ui/EntityInstanceEditor.hx index f7c256220..0dd377b6d 100644 --- a/src/electron.renderer/ui/EntityInstanceEditor.hx +++ b/src/electron.renderer/ui/EntityInstanceEditor.hx @@ -288,7 +288,7 @@ class EntityInstanceEditor extends dn.Process { } } ); - i.setEnabled( ei.def.resizableX ); + i.setEnabled( ei.def.flippableX ); i.linkEvent( EntityInstanceChanged(ei) ); i.onChange = ()->onEntityFieldChanged(); @@ -309,7 +309,7 @@ class EntityInstanceEditor extends dn.Process { } } ); - i.setEnabled( ei.def.resizableY ); + i.setEnabled( ei.def.flippableY ); i.linkEvent( EntityInstanceChanged(ei) ); i.onChange = ()->onEntityFieldChanged(); diff --git a/src/electron.renderer/ui/modal/panel/EditEntityDefs.hx b/src/electron.renderer/ui/modal/panel/EditEntityDefs.hx index f0e654c82..5d73b2a2c 100644 --- a/src/electron.renderer/ui/modal/panel/EditEntityDefs.hx +++ b/src/electron.renderer/ui/modal/panel/EditEntityDefs.hx @@ -204,6 +204,12 @@ class EditEntityDefs extends ui.modal.Panel { i.onChange = editor.ge.emit.bind(EntityDefChanged); i.setEnabled( curEntity.resizableX && curEntity.resizableY ); + // Flippable + var i = Input.linkToHtmlInput( curEntity.flippableX, jEntityForm.find("input#flippableX") ); + i.onChange = editor.ge.emit.bind(EntityDefChanged); + var i = Input.linkToHtmlInput( curEntity.flippableY, jEntityForm.find("input#flippableY") ); + i.onChange = editor.ge.emit.bind(EntityDefChanged); + var i = Input.linkToHtmlInput( curEntity.height, jEntityForm.find("input[name='height']") ); i.setBounds(1,2048); i.onChange = editor.ge.emit.bind(EntityDefChanged); From 1531bc06cafc6e423d8d1d4d38cf300690e154e8 Mon Sep 17 00:00:00 2001 From: Lojemiru <33508026+Lojemiru@users.noreply.github.com> Date: Wed, 11 Jan 2023 04:16:55 -0600 Subject: [PATCH 03/12] Cleanup, add hotkeys, add cursor display --- src/electron.renderer/display/EntityRender.hx | 22 ++++-------- src/electron.renderer/tool/lt/EntityTool.hx | 34 +++++++++++++++++-- .../ui/EntityInstanceEditor.hx | 26 +++----------- 3 files changed, 43 insertions(+), 39 deletions(-) diff --git a/src/electron.renderer/display/EntityRender.hx b/src/electron.renderer/display/EntityRender.hx index 3c889c09f..7949e86bd 100644 --- a/src/electron.renderer/display/EntityRender.hx +++ b/src/electron.renderer/display/EntityRender.hx @@ -95,11 +95,11 @@ class EntityRender extends dn.Process { if( ed==null ) ed = ei.def; + var flipX = (ei!=null && M.hasBit(ei.flips,0)); + var flipY = (ei!=null && M.hasBit(ei.flips,1)); var w = ei!=null ? ei.width : ed.width; var h = ei!=null ? ei.height : ed.height; - var axisX = (ei!=null && (ei.flips==1 || ei.flips==3)) ? -1 : 1; - var axisY = (ei!=null && (ei.flips==2 || ei.flips==3)) ? -1 : 1; var color = ei!=null ? ei.getSmartColor(false) : ed.color; var wrapper = new h2d.Object(); @@ -131,17 +131,19 @@ class EntityRender extends dn.Process { // Texture var td = Editor.ME.project.defs.getTilesetDef(rect.tilesetUid); var t = td.getTileRect(rect); + if (flipX) t.flipX(); + if (flipY) t.flipY(); var alpha = ed.tileOpacity; switch mode { case Stretch: var bmp = new h2d.Bitmap(t, wrapper); if( ld!=null ) - bmp.setPosition(ld.pxOffsetX, ld.pxOffsetY); + bmp.setPosition(ld.pxOffsetX, ld.pxOffsetY); // + (offX*bmp.tile.width) + (offY*bmp.tile.height) bmp.tile.setCenterRatio(ed.pivotX, ed.pivotY); bmp.alpha = alpha; - bmp.scaleX = w / bmp.tile.width * axisX; - bmp.scaleY = h / bmp.tile.height * axisY; + bmp.scaleX = w / bmp.tile.width; + bmp.scaleY = h / bmp.tile.height; case FitInside: var bmp = new h2d.Bitmap(t, wrapper); @@ -152,15 +154,12 @@ class EntityRender extends dn.Process { var s = M.fmin(w / bmp.tile.width, h / bmp.tile.height); bmp.setScale(s); - bmp.scaleX *= axisX; - bmp.scaleY *= axisY; case Repeat: var tt = new dn.heaps.TiledTexture(t, w,h, wrapper); tt.alpha = alpha; tt.x = -w*ed.pivotX + (ld==null ? 0 : ld.pxOffsetX); tt.y = -h*ed.pivotY + (ld==null ? 0 : ld.pxOffsetY); - // TODO: axis flips are gonna be messy here :( case Cover: var bmp = new h2d.Bitmap(wrapper); @@ -178,8 +177,6 @@ class EntityRender extends dn.Process { ); bmp.tile.setCenterRatio(ed.pivotX, ed.pivotY); bmp.setScale(s); - bmp.scaleX *= axisX; - bmp.scaleY *= axisY; case FullSizeCropped: var bmp = new h2d.Bitmap(wrapper); @@ -194,8 +191,6 @@ class EntityRender extends dn.Process { ); bmp.tile.setCenterRatio(ed.pivotX, ed.pivotY); bmp.alpha = alpha; - bmp.scaleX *= axisX; - bmp.scaleY *= axisY; case FullSizeUncropped: var bmp = new h2d.Bitmap(t, wrapper); @@ -204,8 +199,6 @@ class EntityRender extends dn.Process { bmp.tile.setCenterRatio(ed.pivotX, ed.pivotY); bmp.alpha = alpha; - bmp.scaleX *= axisX; - bmp.scaleY *= axisY; case NineSlice: var sg = new h2d.ScaleGrid( @@ -220,7 +213,6 @@ class EntityRender extends dn.Process { sg.height = h; sg.x = -w*ed.pivotX + (ld==null ? 0 : ld.pxOffsetX); sg.y = -h*ed.pivotY + (ld==null ? 0 : ld.pxOffsetY); - // TODO: I don't think h2d supports flipping nineslice renders. Do we even want to cause that? } } } diff --git a/src/electron.renderer/tool/lt/EntityTool.hx b/src/electron.renderer/tool/lt/EntityTool.hx index cf6099800..20d9a49c8 100644 --- a/src/electron.renderer/tool/lt/EntityTool.hx +++ b/src/electron.renderer/tool/lt/EntityTool.hx @@ -4,6 +4,9 @@ class EntityTool extends tool.LayerTool { public var curEntityDef(get,never) : Null; static var PREV_CHAINABLE_EI: Null; + public var flipX = false; + public var flipY = false; + public function new() { super(); @@ -41,7 +44,14 @@ class EntityTool extends tool.LayerTool { inline function get_curEntityDef() return project.defs.getEntityDef( getSelectedValue() ); override function selectValue(v:Int) { + var lastEntityDef = curEntityDef; super.selectValue(v); + + // Clear flip values ONLY if we have changed entity defs. + if ( lastEntityDef!=curEntityDef ) { + flipX = false; + flipY = false; + } } override function canEdit():Bool { @@ -113,7 +123,9 @@ class EntityTool extends tool.LayerTool { // editor.cursor.overrideNativeCursor("grab"); case _: - editor.cursor.set( Entity(curLayerInstance, curEntityDef, getPlacementX(m), getPlacementY(m), false) ); + // Create dummy EntityInstance so that we can draw it with transforms for flips. + var dummyEi = new data.inst.EntityInstance(project, null, curEntityDef.uid, "", M.makeBitsFromBools(flipX, flipY)); + editor.cursor.set( Entity(curLayerInstance, curEntityDef, dummyEi, getPlacementX(m), getPlacementY(m), false) ); } ev.cancel = true; updateChainRefPreview(m); @@ -192,6 +204,7 @@ class EntityTool extends tool.LayerTool { // Finalize entity ei.x = getPlacementX(m); ei.y = getPlacementY(m); + ei.flips = M.makeBitsFromBools(flipX, flipY); onEditAnything(); stopUsing(m); if( ei.def.isResizable() ) { @@ -405,4 +418,21 @@ class EntityTool extends tool.LayerTool { if( PREV_CHAINABLE_EI!=null && PREV_CHAINABLE_EI._li!=null && !PREV_CHAINABLE_EI._li.containsEntity(PREV_CHAINABLE_EI) ) cancelRefChaining(); } -} \ No newline at end of file + + override function onKeyPress(keyId:Int) { + super.onKeyPress(keyId); + + if ( !Editor.ME.hasInputFocus() ) + switch keyId { + case K.X if ( curEntityDef!=null && curEntityDef.flippableX && !App.ME.hasAnyToggleKeyDown() ): + flipX = !flipX; + N.quick("X-flip: "+L.onOff(flipX)); + customCursor(new hxd.Event(EMove), lastMouse); + + case K.Y if ( curEntityDef!=null && curEntityDef.flippableY && !App.ME.hasAnyToggleKeyDown() ): + flipY = !flipY; + N.quick("Y-flip: "+L.onOff(flipY)); + customCursor(new hxd.Event(EMove), lastMouse); + } + } +} diff --git a/src/electron.renderer/ui/EntityInstanceEditor.hx b/src/electron.renderer/ui/EntityInstanceEditor.hx index 0dd377b6d..12686177a 100644 --- a/src/electron.renderer/ui/EntityInstanceEditor.hx +++ b/src/electron.renderer/ui/EntityInstanceEditor.hx @@ -274,18 +274,9 @@ class EntityInstanceEditor extends dn.Process { // X var i = new form.input.BoolInput( jFlips.find("[name=x]"), - ()->(ei.flips == 1 || ei.flips == 3), + ()->(M.hasBit(ei.flips,0)), (v)->{ - switch (ei.flips) { - case 0: - ei.flips = 1; - case 1: - ei.flips = 0; - case 2: - ei.flips = 3; - case 3: - ei.flips = 2; - } + ei.flips = M.makeBitsFromBools(!M.hasBit(ei.flips, 0), M.hasBit(ei.flips, 1)); } ); i.setEnabled( ei.def.flippableX ); @@ -295,18 +286,9 @@ class EntityInstanceEditor extends dn.Process { // Y var i = new form.input.BoolInput( jFlips.find("[name=y]"), - ()->(ei.flips == 2 || ei.flips == 3), + ()->(M.hasBit(ei.flips,1)), (v)->{ - switch (ei.flips) { - case 0: - ei.flips = 2; - case 2: - ei.flips = 0; - case 1: - ei.flips = 3; - case 3: - ei.flips = 1; - } + ei.flips = M.makeBitsFromBools(M.hasBit(ei.flips, 0), !M.hasBit(ei.flips, 1)); } ); i.setEnabled( ei.def.flippableY ); From 46c232667d491eb5d5b72d5e976feac771ae49e2 Mon Sep 17 00:00:00 2001 From: Lojemiru <33508026+Lojemiru@users.noreply.github.com> Date: Thu, 12 Jan 2023 00:04:35 -0600 Subject: [PATCH 04/12] Cleanup, UI polish. --- app/assets/css/app.scss | 8 -------- app/assets/tpl/entityInstanceEditor.html | 10 +++++++++- src/electron.renderer/ui/EntityInstanceEditor.hx | 6 ------ 3 files changed, 9 insertions(+), 15 deletions(-) diff --git a/app/assets/css/app.scss b/app/assets/css/app.scss index 4a93acbb9..15842d6e7 100644 --- a/app/assets/css/app.scss +++ b/app/assets/css/app.scss @@ -6055,14 +6055,6 @@ canvas#webgl { color: $orange; } } - - &.flips { - align-items: center; - input { - padding: 3px; - font-size: 0.8em; - } - } } } } diff --git a/app/assets/tpl/entityInstanceEditor.html b/app/assets/tpl/entityInstanceEditor.html index a354ed946..3cc96b7a4 100644 --- a/app/assets/tpl/entityInstanceEditor.html +++ b/app/assets/tpl/entityInstanceEditor.html @@ -35,7 +35,15 @@ How this Entity instance is oriented on the X and Y axes.
- Horizontal Vertical + + +
diff --git a/src/electron.renderer/ui/EntityInstanceEditor.hx b/src/electron.renderer/ui/EntityInstanceEditor.hx index 12686177a..7dc4bfc09 100644 --- a/src/electron.renderer/ui/EntityInstanceEditor.hx +++ b/src/electron.renderer/ui/EntityInstanceEditor.hx @@ -264,12 +264,6 @@ class EntityInstanceEditor extends dn.Process { // Flip block var jFlips = jPropsForm.find(".flips"); - var jUnit2 = jFlips.find(".unit"); - jUnit2.text( UNIT_GRID ? "cells" : "px" ); - jUnit2.click( _->{ - UNIT_GRID = !UNIT_GRID; - updateInstancePropsForm(); - }); // X var i = new form.input.BoolInput( From b57382244c4bc10667eae1775c10484d2d6acc34 Mon Sep 17 00:00:00 2001 From: Lojemiru <33508026+Lojemiru@users.noreply.github.com> Date: Fri, 13 Jan 2023 16:56:28 -0600 Subject: [PATCH 05/12] Fix cover bounds and full size cropped Entity renders --- setup.hxml | 1 + src/electron.renderer/display/EntityRender.hx | 9 +++++++-- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/setup.hxml b/setup.hxml index 92530e6f2..b0092fc4c 100644 --- a/setup.hxml +++ b/setup.hxml @@ -23,6 +23,7 @@ --next --cmd haxelib git deepnightLibs https://github.com/deepnight/deepnightLibs.git --always +--cmd haxelib git ldtk-haxe-api https://github.com/Lojemiru/ldtk-haxe-api.git EntityFlips --always --next --cmd haxelib git ldtk-haxe-api https://github.com/deepnight/ldtk-haxe-api.git --always diff --git a/src/electron.renderer/display/EntityRender.hx b/src/electron.renderer/display/EntityRender.hx index 7949e86bd..e4d391da8 100644 --- a/src/electron.renderer/display/EntityRender.hx +++ b/src/electron.renderer/display/EntityRender.hx @@ -131,8 +131,8 @@ class EntityRender extends dn.Process { // Texture var td = Editor.ME.project.defs.getTilesetDef(rect.tilesetUid); var t = td.getTileRect(rect); - if (flipX) t.flipX(); - if (flipY) t.flipY(); + t.xFlip = flipX; + t.yFlip = flipY; var alpha = ed.tileOpacity; switch mode { case Stretch: @@ -157,6 +157,7 @@ class EntityRender extends dn.Process { case Repeat: var tt = new dn.heaps.TiledTexture(t, w,h, wrapper); + tt.alpha = alpha; tt.x = -w*ed.pivotX + (ld==null ? 0 : ld.pxOffsetX); tt.y = -h*ed.pivotY + (ld==null ? 0 : ld.pxOffsetY); @@ -175,6 +176,8 @@ class EntityRender extends dn.Process { t.height*ed.pivotY - fh*ed.pivotY, fw,fh ); + bmp.tile.xFlip = t.xFlip; + bmp.tile.yFlip = t.yFlip; bmp.tile.setCenterRatio(ed.pivotX, ed.pivotY); bmp.setScale(s); @@ -189,6 +192,8 @@ class EntityRender extends dn.Process { t.height*ed.pivotY - fh*ed.pivotY, fw, fh ); + bmp.tile.xFlip = t.xFlip; + bmp.tile.yFlip = t.yFlip; bmp.tile.setCenterRatio(ed.pivotX, ed.pivotY); bmp.alpha = alpha; From 29ce77a2085ec42687a757140ccb8b242c1fd757 Mon Sep 17 00:00:00 2001 From: Lojemiru <33508026+Lojemiru@users.noreply.github.com> Date: Sat, 14 Jan 2023 01:51:27 -0600 Subject: [PATCH 06/12] Update pivot display for flipped Entities --- src/electron.renderer/display/EntityRender.hx | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/src/electron.renderer/display/EntityRender.hx b/src/electron.renderer/display/EntityRender.hx index e4d391da8..a7a151b4a 100644 --- a/src/electron.renderer/display/EntityRender.hx +++ b/src/electron.renderer/display/EntityRender.hx @@ -258,11 +258,18 @@ class EntityRender extends dn.Process { } // Pivot + + // Adjust pivot rendering position based on our flip statuses. + var pivotX = (flipX ? ((w - 1) / w) - ed.pivotX : ed.pivotX); + var pivotY = (flipY ? ((h - 1) / h) - ed.pivotY : ed.pivotY); + g.lineStyle(0); + // Draw pivot background. g.beginFill(0x0, 0.4); - g.drawRect(w*ed.pivotX-1, h*ed.pivotY-1, 3,3); + g.drawRect(w*pivotX-1, h*pivotY-1, 3,3); + // Draw pivot foreground. g.beginFill(color, 1); - g.drawRect(w*ed.pivotX, h*ed.pivotY, 1,1); + g.drawRect(w*pivotX, h*pivotY, 1,1); return { wrapper: wrapper, From 5af212618dba976c512a1b331bfb4b553b205685 Mon Sep 17 00:00:00 2001 From: Lojemiru <33508026+Lojemiru@users.noreply.github.com> Date: Mon, 16 Jan 2023 02:32:36 -0600 Subject: [PATCH 07/12] Base pivot flipping changes, start visual rollout --- .../data/inst/EntityInstance.hx | 20 +++++++--- src/electron.renderer/display/EntityRender.hx | 40 ++++++++++--------- src/electron.renderer/ui/Cursor.hx | 6 +-- 3 files changed, 39 insertions(+), 27 deletions(-) diff --git a/src/electron.renderer/data/inst/EntityInstance.hx b/src/electron.renderer/data/inst/EntityInstance.hx index d45003f1a..e070371f5 100644 --- a/src/electron.renderer/data/inst/EntityInstance.hx +++ b/src/electron.renderer/data/inst/EntityInstance.hx @@ -25,9 +25,9 @@ class EntityInstance { public var fieldInstances : Map = new Map(); - public var left(get,never) : Int; inline function get_left() return M.round( x - width*def.pivotX ); + public var left(get,never) : Int; inline function get_left() return M.round( x - width*getAdjustedPivotX() ); public var right(get,never) : Int; inline function get_right() return left + width; - public var top(get,never) : Int; inline function get_top() return M.round( y - height*def.pivotY ); + public var top(get,never) : Int; inline function get_top() return M.round( y - height*getAdjustedPivotY() ); public var bottom(get,never) : Int; inline function get_bottom() return top + height; @@ -43,8 +43,8 @@ class EntityInstance { return 'EntityInst "${def.identifier}" @$x,$y'; } - inline function get_centerX() return M.round( x + (0.5-def.pivotX)*width ); - inline function get_centerY() return M.round( y + (0.5-def.pivotY)*height ); + inline function get_centerX() return M.round( x + (0.5-getAdjustedPivotX())*width ); + inline function get_centerY() return M.round( y + (0.5-getAdjustedPivotY())*height ); inline function get_worldX() return Std.int( x + _li.level.worldX ); inline function get_worldY() return Std.int( y + _li.level.worldY ); @@ -131,12 +131,20 @@ class EntityInstance { return ei; } + public inline function getAdjustedPivotX() { + return M.hasBit(flips, 0) ? 1 - def.pivotX : def.pivotX; + } + + public inline function getAdjustedPivotY() { + return M.hasBit(flips, 1) ? 1 - def.pivotY : def.pivotY; + } + public inline function getCx(ld:data.def.LayerDef) { - return Std.int( ( x + (def.pivotX==1 ? -1 : 0) ) / ld.gridSize ); + return Std.int( ( x + (getAdjustedPivotX()==1 ? -1 : 0) ) / ld.gridSize ); } public inline function getCy(ld:data.def.LayerDef) { - return Std.int( ( y + (def.pivotY==1 ? -1 : 0) ) / ld.gridSize ); + return Std.int( ( y + (getAdjustedPivotY()==1 ? -1 : 0) ) / ld.gridSize ); } public inline function getPointOriginX(ld:data.def.LayerDef) { diff --git a/src/electron.renderer/display/EntityRender.hx b/src/electron.renderer/display/EntityRender.hx index a7a151b4a..33c035db4 100644 --- a/src/electron.renderer/display/EntityRender.hx +++ b/src/electron.renderer/display/EntityRender.hx @@ -95,18 +95,22 @@ class EntityRender extends dn.Process { if( ed==null ) ed = ei.def; - var flipX = (ei!=null && M.hasBit(ei.flips,0)); - var flipY = (ei!=null && M.hasBit(ei.flips,1)); + var w = ei!=null ? ei.width : ed.width; var h = ei!=null ? ei.height : ed.height; var color = ei!=null ? ei.getSmartColor(false) : ed.color; + var flipX = (ei!=null && M.hasBit(ei.flips,0)); + var flipY = (ei!=null && M.hasBit(ei.flips,1)); + var pivotX = ei!=null ? ei.getAdjustedPivotX() : ed.pivotX; + var pivotY = ei!=null ? ei.getAdjustedPivotY() : ed.pivotY; + var wrapper = new h2d.Object(); var g = new h2d.Graphics(wrapper); - g.x = Std.int( -w*ed.pivotX + (ld!=null ? ld.pxOffsetX : 0) ); - g.y = Std.int( -h*ed.pivotY + (ld!=null ? ld.pxOffsetY : 0) ); + g.x = Std.int( -w*pivotX + (ld!=null ? ld.pxOffsetX : 0)); + g.y = Std.int( -h*pivotY + (ld!=null ? ld.pxOffsetY : 0)); var zoomScale = 1 / Editor.ME.camera.adjustedZoom; @@ -138,8 +142,8 @@ class EntityRender extends dn.Process { case Stretch: var bmp = new h2d.Bitmap(t, wrapper); if( ld!=null ) - bmp.setPosition(ld.pxOffsetX, ld.pxOffsetY); // + (offX*bmp.tile.width) + (offY*bmp.tile.height) - bmp.tile.setCenterRatio(ed.pivotX, ed.pivotY); + bmp.setPosition(ld.pxOffsetX, ld.pxOffsetY); + bmp.tile.setCenterRatio(pivotX, pivotY); bmp.alpha = alpha; bmp.scaleX = w / bmp.tile.width; @@ -149,7 +153,7 @@ class EntityRender extends dn.Process { var bmp = new h2d.Bitmap(t, wrapper); if( ld!=null ) bmp.setPosition(ld.pxOffsetX, ld.pxOffsetY); - bmp.tile.setCenterRatio(ed.pivotX, ed.pivotY); + bmp.tile.setCenterRatio(pivotX, pivotY); bmp.alpha = alpha; var s = M.fmin(w / bmp.tile.width, h / bmp.tile.height); @@ -159,8 +163,8 @@ class EntityRender extends dn.Process { var tt = new dn.heaps.TiledTexture(t, w,h, wrapper); tt.alpha = alpha; - tt.x = -w*ed.pivotX + (ld==null ? 0 : ld.pxOffsetX); - tt.y = -h*ed.pivotY + (ld==null ? 0 : ld.pxOffsetY); + tt.x = -w*pivotX + (ld==null ? 0 : ld.pxOffsetX); + tt.y = -h*pivotY + (ld==null ? 0 : ld.pxOffsetY); case Cover: var bmp = new h2d.Bitmap(wrapper); @@ -172,13 +176,13 @@ class EntityRender extends dn.Process { final fw = M.fmin(w, t.width*s) / s; final fh = M.fmin(h, t.height*s) / s; bmp.tile = t.sub( - t.width*ed.pivotX - fw*ed.pivotX, - t.height*ed.pivotY - fh*ed.pivotY, + t.width*pivotX - fw*pivotX, + t.height*pivotY - fh*pivotY, fw,fh ); bmp.tile.xFlip = t.xFlip; bmp.tile.yFlip = t.yFlip; - bmp.tile.setCenterRatio(ed.pivotX, ed.pivotY); + bmp.tile.setCenterRatio(pivotX, pivotY); bmp.setScale(s); case FullSizeCropped: @@ -188,13 +192,13 @@ class EntityRender extends dn.Process { final fw = M.fmin(w, t.width); final fh = M.fmin(h, t.height); bmp.tile = t.sub( - t.width*ed.pivotX - fw*ed.pivotX, - t.height*ed.pivotY - fh*ed.pivotY, + t.width*pivotX - fw*pivotX, + t.height*pivotY - fh*pivotY, fw, fh ); bmp.tile.xFlip = t.xFlip; bmp.tile.yFlip = t.yFlip; - bmp.tile.setCenterRatio(ed.pivotX, ed.pivotY); + bmp.tile.setCenterRatio(pivotX, pivotY); bmp.alpha = alpha; case FullSizeUncropped: @@ -202,7 +206,7 @@ class EntityRender extends dn.Process { if( ld!=null ) bmp.setPosition(ld.pxOffsetX, ld.pxOffsetY); - bmp.tile.setCenterRatio(ed.pivotX, ed.pivotY); + bmp.tile.setCenterRatio(pivotX, pivotY); bmp.alpha = alpha; case NineSlice: @@ -216,8 +220,8 @@ class EntityRender extends dn.Process { sg.tileCenter = true; sg.width = w; sg.height = h; - sg.x = -w*ed.pivotX + (ld==null ? 0 : ld.pxOffsetX); - sg.y = -h*ed.pivotY + (ld==null ? 0 : ld.pxOffsetY); + sg.x = -w*pivotX + (ld==null ? 0 : ld.pxOffsetX); + sg.y = -h*pivotY + (ld==null ? 0 : ld.pxOffsetY); } } } diff --git a/src/electron.renderer/ui/Cursor.hx b/src/electron.renderer/ui/Cursor.hx index 274a7bdfd..383b91f9e 100644 --- a/src/electron.renderer/ui/Cursor.hx +++ b/src/electron.renderer/ui/Cursor.hx @@ -203,14 +203,14 @@ class Cursor { final ry = ei.height*0.5; g.lineStyle(1, 0xffcc00, 1); g.drawEllipse( - (0.5-def.pivotX)*ei.width, (0.5-def.pivotY)*ei.height, + (0.5-ei.getAdjustedPivotX())*ei.width, (0.5-ei.getAdjustedPivotY())*ei.height, rx+pad, ry+pad, 0, rx<=16 && ry<=16 ? 24 : 0 ); case Rectangle, Tile: g.lineStyle(1, 0xffcc00, 1); - renderBeveledRect(g, -def.pivotX*ei.width-pad, -def.pivotY*ei.height-pad, ei.width+pad*2, ei.height+pad*2); + renderBeveledRect(g, -ei.getAdjustedPivotX()*ei.width-pad, -ei.getAdjustedPivotY()*ei.height-pad, ei.width+pad*2, ei.height+pad*2); } } @@ -363,4 +363,4 @@ class Cursor { render(); } } -} \ No newline at end of file +} From 29b82dbe9a1886a18ec1d4d05e746da95e0a44db Mon Sep 17 00:00:00 2001 From: Lojemiru <33508026+Lojemiru@users.noreply.github.com> Date: Tue, 24 Jan 2023 00:20:17 -0600 Subject: [PATCH 08/12] Revert "Base pivot flipping changes, start visual rollout" This reverts commit 5af212618dba976c512a1b331bfb4b553b205685. --- .../data/inst/EntityInstance.hx | 20 +++------- src/electron.renderer/display/EntityRender.hx | 40 +++++++++---------- src/electron.renderer/ui/Cursor.hx | 6 +-- 3 files changed, 27 insertions(+), 39 deletions(-) diff --git a/src/electron.renderer/data/inst/EntityInstance.hx b/src/electron.renderer/data/inst/EntityInstance.hx index e070371f5..d45003f1a 100644 --- a/src/electron.renderer/data/inst/EntityInstance.hx +++ b/src/electron.renderer/data/inst/EntityInstance.hx @@ -25,9 +25,9 @@ class EntityInstance { public var fieldInstances : Map = new Map(); - public var left(get,never) : Int; inline function get_left() return M.round( x - width*getAdjustedPivotX() ); + public var left(get,never) : Int; inline function get_left() return M.round( x - width*def.pivotX ); public var right(get,never) : Int; inline function get_right() return left + width; - public var top(get,never) : Int; inline function get_top() return M.round( y - height*getAdjustedPivotY() ); + public var top(get,never) : Int; inline function get_top() return M.round( y - height*def.pivotY ); public var bottom(get,never) : Int; inline function get_bottom() return top + height; @@ -43,8 +43,8 @@ class EntityInstance { return 'EntityInst "${def.identifier}" @$x,$y'; } - inline function get_centerX() return M.round( x + (0.5-getAdjustedPivotX())*width ); - inline function get_centerY() return M.round( y + (0.5-getAdjustedPivotY())*height ); + inline function get_centerX() return M.round( x + (0.5-def.pivotX)*width ); + inline function get_centerY() return M.round( y + (0.5-def.pivotY)*height ); inline function get_worldX() return Std.int( x + _li.level.worldX ); inline function get_worldY() return Std.int( y + _li.level.worldY ); @@ -131,20 +131,12 @@ class EntityInstance { return ei; } - public inline function getAdjustedPivotX() { - return M.hasBit(flips, 0) ? 1 - def.pivotX : def.pivotX; - } - - public inline function getAdjustedPivotY() { - return M.hasBit(flips, 1) ? 1 - def.pivotY : def.pivotY; - } - public inline function getCx(ld:data.def.LayerDef) { - return Std.int( ( x + (getAdjustedPivotX()==1 ? -1 : 0) ) / ld.gridSize ); + return Std.int( ( x + (def.pivotX==1 ? -1 : 0) ) / ld.gridSize ); } public inline function getCy(ld:data.def.LayerDef) { - return Std.int( ( y + (getAdjustedPivotY()==1 ? -1 : 0) ) / ld.gridSize ); + return Std.int( ( y + (def.pivotY==1 ? -1 : 0) ) / ld.gridSize ); } public inline function getPointOriginX(ld:data.def.LayerDef) { diff --git a/src/electron.renderer/display/EntityRender.hx b/src/electron.renderer/display/EntityRender.hx index 33c035db4..a7a151b4a 100644 --- a/src/electron.renderer/display/EntityRender.hx +++ b/src/electron.renderer/display/EntityRender.hx @@ -95,22 +95,18 @@ class EntityRender extends dn.Process { if( ed==null ) ed = ei.def; - + var flipX = (ei!=null && M.hasBit(ei.flips,0)); + var flipY = (ei!=null && M.hasBit(ei.flips,1)); var w = ei!=null ? ei.width : ed.width; var h = ei!=null ? ei.height : ed.height; var color = ei!=null ? ei.getSmartColor(false) : ed.color; - var flipX = (ei!=null && M.hasBit(ei.flips,0)); - var flipY = (ei!=null && M.hasBit(ei.flips,1)); - var pivotX = ei!=null ? ei.getAdjustedPivotX() : ed.pivotX; - var pivotY = ei!=null ? ei.getAdjustedPivotY() : ed.pivotY; - var wrapper = new h2d.Object(); var g = new h2d.Graphics(wrapper); - g.x = Std.int( -w*pivotX + (ld!=null ? ld.pxOffsetX : 0)); - g.y = Std.int( -h*pivotY + (ld!=null ? ld.pxOffsetY : 0)); + g.x = Std.int( -w*ed.pivotX + (ld!=null ? ld.pxOffsetX : 0) ); + g.y = Std.int( -h*ed.pivotY + (ld!=null ? ld.pxOffsetY : 0) ); var zoomScale = 1 / Editor.ME.camera.adjustedZoom; @@ -142,8 +138,8 @@ class EntityRender extends dn.Process { case Stretch: var bmp = new h2d.Bitmap(t, wrapper); if( ld!=null ) - bmp.setPosition(ld.pxOffsetX, ld.pxOffsetY); - bmp.tile.setCenterRatio(pivotX, pivotY); + bmp.setPosition(ld.pxOffsetX, ld.pxOffsetY); // + (offX*bmp.tile.width) + (offY*bmp.tile.height) + bmp.tile.setCenterRatio(ed.pivotX, ed.pivotY); bmp.alpha = alpha; bmp.scaleX = w / bmp.tile.width; @@ -153,7 +149,7 @@ class EntityRender extends dn.Process { var bmp = new h2d.Bitmap(t, wrapper); if( ld!=null ) bmp.setPosition(ld.pxOffsetX, ld.pxOffsetY); - bmp.tile.setCenterRatio(pivotX, pivotY); + bmp.tile.setCenterRatio(ed.pivotX, ed.pivotY); bmp.alpha = alpha; var s = M.fmin(w / bmp.tile.width, h / bmp.tile.height); @@ -163,8 +159,8 @@ class EntityRender extends dn.Process { var tt = new dn.heaps.TiledTexture(t, w,h, wrapper); tt.alpha = alpha; - tt.x = -w*pivotX + (ld==null ? 0 : ld.pxOffsetX); - tt.y = -h*pivotY + (ld==null ? 0 : ld.pxOffsetY); + tt.x = -w*ed.pivotX + (ld==null ? 0 : ld.pxOffsetX); + tt.y = -h*ed.pivotY + (ld==null ? 0 : ld.pxOffsetY); case Cover: var bmp = new h2d.Bitmap(wrapper); @@ -176,13 +172,13 @@ class EntityRender extends dn.Process { final fw = M.fmin(w, t.width*s) / s; final fh = M.fmin(h, t.height*s) / s; bmp.tile = t.sub( - t.width*pivotX - fw*pivotX, - t.height*pivotY - fh*pivotY, + t.width*ed.pivotX - fw*ed.pivotX, + t.height*ed.pivotY - fh*ed.pivotY, fw,fh ); bmp.tile.xFlip = t.xFlip; bmp.tile.yFlip = t.yFlip; - bmp.tile.setCenterRatio(pivotX, pivotY); + bmp.tile.setCenterRatio(ed.pivotX, ed.pivotY); bmp.setScale(s); case FullSizeCropped: @@ -192,13 +188,13 @@ class EntityRender extends dn.Process { final fw = M.fmin(w, t.width); final fh = M.fmin(h, t.height); bmp.tile = t.sub( - t.width*pivotX - fw*pivotX, - t.height*pivotY - fh*pivotY, + t.width*ed.pivotX - fw*ed.pivotX, + t.height*ed.pivotY - fh*ed.pivotY, fw, fh ); bmp.tile.xFlip = t.xFlip; bmp.tile.yFlip = t.yFlip; - bmp.tile.setCenterRatio(pivotX, pivotY); + bmp.tile.setCenterRatio(ed.pivotX, ed.pivotY); bmp.alpha = alpha; case FullSizeUncropped: @@ -206,7 +202,7 @@ class EntityRender extends dn.Process { if( ld!=null ) bmp.setPosition(ld.pxOffsetX, ld.pxOffsetY); - bmp.tile.setCenterRatio(pivotX, pivotY); + bmp.tile.setCenterRatio(ed.pivotX, ed.pivotY); bmp.alpha = alpha; case NineSlice: @@ -220,8 +216,8 @@ class EntityRender extends dn.Process { sg.tileCenter = true; sg.width = w; sg.height = h; - sg.x = -w*pivotX + (ld==null ? 0 : ld.pxOffsetX); - sg.y = -h*pivotY + (ld==null ? 0 : ld.pxOffsetY); + sg.x = -w*ed.pivotX + (ld==null ? 0 : ld.pxOffsetX); + sg.y = -h*ed.pivotY + (ld==null ? 0 : ld.pxOffsetY); } } } diff --git a/src/electron.renderer/ui/Cursor.hx b/src/electron.renderer/ui/Cursor.hx index 383b91f9e..274a7bdfd 100644 --- a/src/electron.renderer/ui/Cursor.hx +++ b/src/electron.renderer/ui/Cursor.hx @@ -203,14 +203,14 @@ class Cursor { final ry = ei.height*0.5; g.lineStyle(1, 0xffcc00, 1); g.drawEllipse( - (0.5-ei.getAdjustedPivotX())*ei.width, (0.5-ei.getAdjustedPivotY())*ei.height, + (0.5-def.pivotX)*ei.width, (0.5-def.pivotY)*ei.height, rx+pad, ry+pad, 0, rx<=16 && ry<=16 ? 24 : 0 ); case Rectangle, Tile: g.lineStyle(1, 0xffcc00, 1); - renderBeveledRect(g, -ei.getAdjustedPivotX()*ei.width-pad, -ei.getAdjustedPivotY()*ei.height-pad, ei.width+pad*2, ei.height+pad*2); + renderBeveledRect(g, -def.pivotX*ei.width-pad, -def.pivotY*ei.height-pad, ei.width+pad*2, ei.height+pad*2); } } @@ -363,4 +363,4 @@ class Cursor { render(); } } -} +} \ No newline at end of file From ae17777c688ada3054415e1ebc0391425c2f34a8 Mon Sep 17 00:00:00 2001 From: Lojemiru <33508026+Lojemiru@users.noreply.github.com> Date: Tue, 24 Jan 2023 00:23:59 -0600 Subject: [PATCH 09/12] Revert "Update pivot display for flipped Entities" This reverts commit 29ce77a2085ec42687a757140ccb8b242c1fd757. --- src/electron.renderer/display/EntityRender.hx | 11 ++--------- 1 file changed, 2 insertions(+), 9 deletions(-) diff --git a/src/electron.renderer/display/EntityRender.hx b/src/electron.renderer/display/EntityRender.hx index a7a151b4a..e4d391da8 100644 --- a/src/electron.renderer/display/EntityRender.hx +++ b/src/electron.renderer/display/EntityRender.hx @@ -258,18 +258,11 @@ class EntityRender extends dn.Process { } // Pivot - - // Adjust pivot rendering position based on our flip statuses. - var pivotX = (flipX ? ((w - 1) / w) - ed.pivotX : ed.pivotX); - var pivotY = (flipY ? ((h - 1) / h) - ed.pivotY : ed.pivotY); - g.lineStyle(0); - // Draw pivot background. g.beginFill(0x0, 0.4); - g.drawRect(w*pivotX-1, h*pivotY-1, 3,3); - // Draw pivot foreground. + g.drawRect(w*ed.pivotX-1, h*ed.pivotY-1, 3,3); g.beginFill(color, 1); - g.drawRect(w*pivotX, h*pivotY, 1,1); + g.drawRect(w*ed.pivotX, h*ed.pivotY, 1,1); return { wrapper: wrapper, From c5fd76745d400b4d7a4e22951796045cd65f2c15 Mon Sep 17 00:00:00 2001 From: Lojemiru <33508026+Lojemiru@users.noreply.github.com> Date: Tue, 24 Jan 2023 01:26:36 -0600 Subject: [PATCH 10/12] Revert broken tile flipping in Repeat mode --- src/electron.renderer/display/EntityRender.hx | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/electron.renderer/display/EntityRender.hx b/src/electron.renderer/display/EntityRender.hx index e4d391da8..1d3aedc9e 100644 --- a/src/electron.renderer/display/EntityRender.hx +++ b/src/electron.renderer/display/EntityRender.hx @@ -156,6 +156,9 @@ class EntityRender extends dn.Process { bmp.setScale(s); case Repeat: + // Invert flips to prevent broken rendering. + t.xFlip = false; + t.yFlip = false; var tt = new dn.heaps.TiledTexture(t, w,h, wrapper); tt.alpha = alpha; From 98baf34d5a3f3fbc787e7acd10a32a8d3744dc7e Mon Sep 17 00:00:00 2001 From: Lojemiru <33508026+Lojemiru@users.noreply.github.com> Date: Tue, 24 Jan 2023 01:31:49 -0600 Subject: [PATCH 11/12] Revert errant change to setup.hxml --- setup.hxml | 1 - 1 file changed, 1 deletion(-) diff --git a/setup.hxml b/setup.hxml index b0092fc4c..92530e6f2 100644 --- a/setup.hxml +++ b/setup.hxml @@ -23,7 +23,6 @@ --next --cmd haxelib git deepnightLibs https://github.com/deepnight/deepnightLibs.git --always ---cmd haxelib git ldtk-haxe-api https://github.com/Lojemiru/ldtk-haxe-api.git EntityFlips --always --next --cmd haxelib git ldtk-haxe-api https://github.com/deepnight/ldtk-haxe-api.git --always From 9b2583c53fed26a3d2b2d99575d50c0608dc0350 Mon Sep 17 00:00:00 2001 From: Lojemiru <33508026+Lojemiru@users.noreply.github.com> Date: Tue, 24 Jan 2023 01:32:54 -0600 Subject: [PATCH 12/12] Final cleanup --- src/electron.renderer/display/EntityRender.hx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/electron.renderer/display/EntityRender.hx b/src/electron.renderer/display/EntityRender.hx index 1d3aedc9e..027e4de9f 100644 --- a/src/electron.renderer/display/EntityRender.hx +++ b/src/electron.renderer/display/EntityRender.hx @@ -138,7 +138,7 @@ class EntityRender extends dn.Process { case Stretch: var bmp = new h2d.Bitmap(t, wrapper); if( ld!=null ) - bmp.setPosition(ld.pxOffsetX, ld.pxOffsetY); // + (offX*bmp.tile.width) + (offY*bmp.tile.height) + bmp.setPosition(ld.pxOffsetX, ld.pxOffsetY); bmp.tile.setCenterRatio(ed.pivotX, ed.pivotY); bmp.alpha = alpha;