diff --git a/src/electron.renderer/data/Level.hx b/src/electron.renderer/data/Level.hx index 39d4719bd..a491ff081 100644 --- a/src/electron.renderer/data/Level.hx +++ b/src/electron.renderer/data/Level.hx @@ -393,6 +393,9 @@ class Level { case CoverDirty: sx = pxWid / baseTileWid; sy = pxHei/ baseTileHei; + + case Repeat: + // Do nothing, tiling shenanigans are handled in createBgTiledTexture. } // Crop tile @@ -412,8 +415,7 @@ class Level { } } - - public function createBgBitmap(?p:h2d.Object) : Null { + public function createBgTiledTexture(?p:h2d.Object) : Null { var bgInf = getBgTileInfos(); if( bgInf==null ) return null; @@ -421,13 +423,18 @@ class Level { var t = h2d.Tile.fromTexture( bgInf.imgData.tex ); t = t.sub(bgInf.tx, bgInf.ty, bgInf.tw, bgInf.th); - var bmp = new h2d.Bitmap(t,p); - bmp.x = bgInf.dispX; - bmp.y = bgInf.dispY; - bmp.scaleX = bgInf.sx; - bmp.scaleY = bgInf.sy; + var tile = (bgPos == ldtk.Json.BgImagePos.Repeat); + + var w = tile ? pxWid : Std.int(bgInf.tw); + var h = tile ? pxHei : Std.int(bgInf.th); + + var tt = new dn.heaps.TiledTexture(w, h, t, p); + tt.x = bgInf.dispX; + tt.y = bgInf.dispY; + tt.scaleX = bgInf.sx; + tt.scaleY = bgInf.sy; - return bmp; + return tt; } diff --git a/src/electron.renderer/display/EntityRender.hx b/src/electron.renderer/display/EntityRender.hx index abf7fa3a8..aad2a1f79 100644 --- a/src/electron.renderer/display/EntityRender.hx +++ b/src/electron.renderer/display/EntityRender.hx @@ -152,7 +152,7 @@ class EntityRender extends dn.Process { bmp.setScale(s); case Repeat: - var tt = new dn.heaps.TiledTexture(t, w,h, wrapper); + var tt = new dn.heaps.TiledTexture(w, h, t, wrapper); tt.alpha = alpha; tt.x = -w*ed.pivotX + (ld==null ? 0 : ld.pxOffsetX); tt.y = -h*ed.pivotY + (ld==null ? 0 : ld.pxOffsetY); @@ -401,4 +401,4 @@ class EntityRender extends dn.Process { } } -} \ No newline at end of file +} diff --git a/src/electron.renderer/display/LayerRender.hx b/src/electron.renderer/display/LayerRender.hx index 17621e15c..932a6e862 100644 --- a/src/electron.renderer/display/LayerRender.hx +++ b/src/electron.renderer/display/LayerRender.hx @@ -231,7 +231,7 @@ class LayerRender { tex.clear( l.getBgColor() ); if( l.bgRelPath!=null ) { - var bmp = l.createBgBitmap(); + var bmp = l.createBgTiledTexture(); bmp.drawTo(tex); } } @@ -318,4 +318,4 @@ class LayerRender { mask = null; } -} \ No newline at end of file +} diff --git a/src/electron.renderer/display/LevelRender.hx b/src/electron.renderer/display/LevelRender.hx index 90d5f051b..a3f15a3b9 100644 --- a/src/electron.renderer/display/LevelRender.hx +++ b/src/electron.renderer/display/LevelRender.hx @@ -19,7 +19,7 @@ class LevelRender extends dn.Process { var layerRenders : Map = new Map(); var bgColor : h2d.Bitmap; - var bgImage : h2d.Bitmap; + var bgImage : dn.heaps.TiledTexture; var bounds : h2d.Graphics; var boundsGlow : h2d.Graphics; var grid : h2d.Graphics; @@ -42,7 +42,8 @@ class LevelRender extends dn.Process { bgColor = new h2d.Bitmap(); root.add(bgColor, Const.DP_BG); - bgImage = new h2d.Bitmap(); + //bgImage = new h2d.Bitmap(); + bgImage = new dn.heaps.TiledTexture(1, 1); root.add(bgImage, Const.DP_BG); bounds = new h2d.Graphics(); @@ -424,15 +425,16 @@ class LevelRender extends dn.Process { bgColor.scaleX = editor.curLevel.pxWid; bgColor.scaleY = editor.curLevel.pxHei; - var bmp = level.createBgBitmap(); - if( bmp!=null ) { - bgImage.tile = bmp.tile; - bgImage.setPosition( bmp.x, bmp.y ); - bgImage.scaleX = bmp.scaleX; - bgImage.scaleY = bmp.scaleY; + var tt = level.createBgTiledTexture(); + if( tt!=null ) { + bgImage.tile = tt.tile; + bgImage.setPosition( tt.x, tt.y ); + bgImage.scaleX = tt.scaleX; + bgImage.scaleY = tt.scaleY; bgImage.visible = true; bgImage.alpha = settings.v.singleLayerMode ? 0.2 : 1; bgImage.filter = settings.v.singleLayerMode ? getSingleLayerModeFilter() : null; + bgImage.resize(tt.width, tt.height); } else { bgImage.tile = null; diff --git a/src/electron.renderer/display/WorldRender.hx b/src/electron.renderer/display/WorldRender.hx index fe1825fc3..16a4bd199 100644 --- a/src/electron.renderer/display/WorldRender.hx +++ b/src/electron.renderer/display/WorldRender.hx @@ -60,7 +60,7 @@ class WorldRender extends dn.Process { worldBg = { wrapper : w, col: new h2d.Bitmap(w), - tex: new dn.heaps.TiledTexture(Assets.elements.getTile("largeStripes"), 1, 1, w), + tex: new dn.heaps.TiledTexture(1, 1, Assets.elements.getTile("largeStripes"), w), } worldBg.col.colorAdd = new h3d.Vector(0,0,0,0); worldBg.tex.alpha = 0.5; @@ -773,7 +773,7 @@ class WorldRender extends dn.Process { col.scaleY = l.pxHei; // Bg image - l.createBgBitmap(wl.bgWrapper); + l.createBgTiledTexture(wl.bgWrapper); // Per-coord limit var doneCoords = new Map(); diff --git a/src/electron.renderer/ui/LevelInstanceForm.hx b/src/electron.renderer/ui/LevelInstanceForm.hx index 68f6b0d38..e0a8cffba 100644 --- a/src/electron.renderer/ui/LevelInstanceForm.hx +++ b/src/electron.renderer/ui/LevelInstanceForm.hx @@ -337,6 +337,7 @@ class LevelInstanceForm { case Contain: Lang.t._("Fit inside (keep aspect ratio)"); case Cover: Lang.t._("Cover level (keep aspect ratio)"); case CoverDirty: Lang.t._("Cover (dirty scaling)"); + case Repeat: Lang.t._("Repeat"); }); } jSelect.val( level.bgPos.getName() ); @@ -374,4 +375,4 @@ class LevelInstanceForm { function updateFieldsForm() { fieldsForm.use( Level(level), project.defs.levelFields, (fd)->level.getFieldInstance(fd, true) ); } -} \ No newline at end of file +}