+ 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;