X Tutup
Skip to content
This repository was archived by the owner on Jan 4, 2023. It is now read-only.

Commit f36f38d

Browse files
committed
Added support for custom mask color in MergePixels() API
1 parent 244c271 commit f36f38d

File tree

12 files changed

+39
-49
lines changed

12 files changed

+39
-49
lines changed

Disks/PixelVisionOS/System/Libs/pixel-vision-os-title-bar-v2.lua

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -187,7 +187,7 @@ function PixelVisionOS:CreateTitleBarMenu(items, toolTip)
187187
-- Draw the up state
188188
self:DrawTitleBarMenuItem(tmpCanvas, option, 14)
189189

190-
canvas:MergePixels(tmpX, tmpY, tmpCanvas.width, tmpCanvas.height, tmpCanvas:GetPixels(), false, false, 0, true)
190+
canvas:MergePixels(tmpX, tmpY, tmpCanvas.width, tmpCanvas.height, tmpCanvas:GetPixels())
191191

192192
if(option.divider ~= true) then
193193
-- Create over pixel data

Disks/PixelVisionOS/System/Tools/PaintTool/Src/canvas-panel.lua

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -473,9 +473,8 @@ function PaintTool:DrawCanvasPanel()
473473
tmpY + self.viewportRect.Y,
474474
DrawMode.UI,
475475
self.scale,
476-
0,
477-
0,
478476
self.brushColorOffset,
477+
0,
479478
self.brushMaskRect
480479
)
481480

@@ -584,7 +583,8 @@ function PaintTool:DrawCanvasPanel()
584583

585584
local selectionMask = NewRect( 1, 1, tmpW - 2, tmpH -2 )
586585

587-
self.selectedPixelData:DrawPixels(tmpX, tmpY, DrawMode.Sprite, self.scale, -1, -1, self.colorOffset, selectionMask)
586+
-- TODO this was using -1 for the mask previously?
587+
self.selectedPixelData:DrawPixels(tmpX, tmpY, DrawMode.Sprite, self.scale, self.colorOffset, selectionMask)
588588
-- self.tmpLayerCanvas:MergePixels(self.selectRect.X, self.selectRect.Y, self.selectRect.Width, self.selectRect.Height, self.selectedPixelData.Pixels)
589589

590590
end
@@ -603,7 +603,7 @@ function PaintTool:DrawCanvasPanel()
603603

604604
-- Redraw the background of the canvas
605605
if(self.backgroundMode ~= 1) then
606-
self.backgroundLayerCanvas:DrawPixels(self.viewportRect.X, self.viewportRect.Y, DrawMode.TilemapCache, self.scale, 0, 0, 0, self.scaledViewport, false)
606+
self.backgroundLayerCanvas:DrawPixels(self.viewportRect.X, self.viewportRect.Y, DrawMode.TilemapCache, self.scale, 0, 0, self.scaledViewport)
607607
end
608608

609609
if(self.mergerTmpLayer == true and self.mouseState == "released") then
@@ -615,19 +615,20 @@ function PaintTool:DrawCanvasPanel()
615615

616616
end
617617

618-
local tmpMaskId = 1
618+
-- TODO need to tie this into the mask color selection (which is not implemented yet so default to 0)
619+
local tmpMaskId = 0
619620

620621
-- Draw the pixel data in the upper left hand corner of the tool's window
621-
self.imageLayerCanvas:DrawPixels(self.viewportRect.X, self.viewportRect.Y, DrawMode.TilemapCache, self.scale, tmpMaskId, 0, self.colorOffset, self.scaledViewport, self.backgroundMode ~= 1)
622+
self.imageLayerCanvas:DrawPixels(self.viewportRect.X, self.viewportRect.Y, DrawMode.TilemapCache, self.scale, self.colorOffset, tmpMaskId, self.scaledViewport)
622623

623624
-- Only draw the flag layer when we need to
624625
if(self.pickerMode == FlagMode) then
625-
self.flagLayerCanvas:DrawPixels(self.viewportRect.X, self.viewportRect.Y, DrawMode.TilemapCache, self.scale, 0, self.emptyColorID, 0, self.scaledViewport)
626+
self.flagLayerCanvas:DrawPixels(self.viewportRect.X, self.viewportRect.Y, DrawMode.TilemapCache, self.scale, self.colorOffset, tmpMaskId, self.scaledViewport)
626627
end
627628

628629
-- Only draw the temp layer when we need to
629630
if(self.drawTmpLayer == true) then
630-
self.tmpLayerCanvas:DrawPixels(self.viewportRect.X, self.viewportRect.Y, DrawMode.TilemapCache, self.scale, 0, self.emptyColorID, self.colorOffset, self.scaledViewport)
631+
self.tmpLayerCanvas:DrawPixels(self.viewportRect.X, self.viewportRect.Y, DrawMode.TilemapCache, self.scale, self.colorOffset, tmpMaskId, self.scaledViewport)
631632
end
632633

633634
-- if(self.showGrid == true) then
@@ -803,7 +804,7 @@ function PaintTool:RedrawGrid()
803804
end
804805

805806
-- Draw the grid on top of the canvas
806-
self.gridCanvas:DrawPixels(self.viewportRect.X, self.viewportRect.Y, DrawMode.TilemapCache, 1, -1, -1)
807+
self.gridCanvas:DrawPixels(self.viewportRect.X, self.viewportRect.Y, DrawMode.TilemapCache)
807808

808809
end
809810

Disks/PixelVisionOS/System/Tools/PaintTool/Src/picker-panel.lua

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -544,7 +544,7 @@ function PaintTool:GoToPickerPage(value)
544544

545545
self.pickerSampleArea.Y = 16 * self.currentPage
546546

547-
self.currentCanvas:DrawPixels(self.pickerPanelRect.X, self.pickerPanelRect.Y, DrawMode.TilemapCache, 1, 0, 0, 0, self.pickerSampleArea)
547+
self.currentCanvas:DrawPixels(self.pickerPanelRect.X, self.pickerPanelRect.Y, DrawMode.TilemapCache, 1, 0, 0, self.pickerSampleArea)
548548

549549
-- -- TODO clear label area
550550
DrawRect(98, 15, 130, 8, BackgroundColor())

Disks/PixelVisionOS/System/Tools/WorkspaceTool/Src/code-icon-button.lua

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -642,9 +642,7 @@ function PixelVisionOS:UpdateIconGroup(data)
642642
40,
643643
false,
644644
false,
645-
DrawMode.UI,
646-
0,
647-
true
645+
DrawMode.UI
648646
)
649647
-- DrawPixels(btn.cachedPixelData["up"], 0,0)
650648
-- editorUI:NewDraw("DrawPixels", data.drawIconArgs)

SDK/Lua/Chips/Game/LuaGameChip.Display.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ public void RegisterDisplay()
1212

1313
LuaScript.Globals["Clear"] = new Action(Clear);
1414
LuaScript.Globals["Display"] = new Func<Point>(Display);
15-
LuaScript.Globals["DrawPixels"] = new Action<int[], int, int, int, int, bool, bool, DrawMode, int, bool>(DrawPixels);
15+
LuaScript.Globals["DrawPixels"] = new Action<int[], int, int, int, int, bool, bool, DrawMode, int, int>(DrawPixels);
1616
LuaScript.Globals["DrawSprite"] = new Action<int, int, int, bool, bool, DrawMode, int>(DrawSingleSprite);
1717
LuaScript.Globals["DrawText"] = new Action<string, int, int, DrawMode, string, int, int>(DrawText);
1818
LuaScript.Globals["DrawTilemap"] = new Action<int, int, int, int, int?, int?>(DrawTilemap);

SDK/Player/Chips/Game/GameChip.Draw.cs

Lines changed: 8 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,7 @@ public partial class GameChip
7676
/// to each int, in the pixel data array, allowing you to simulate palette shifting.
7777
/// </param>
7878
public void DrawPixels(int[] pixelData, int x, int y, int blockWidth, int blockHeight, bool flipH = false,
79-
bool flipV = false, DrawMode drawMode = DrawMode.Sprite, int colorOffset = 0, bool ignoreTransparent = false)
79+
bool flipV = false, DrawMode drawMode = DrawMode.Sprite, int colorOffset = 0, int maskId = Constants.EmptyPixel)
8080
{
8181
switch (drawMode)
8282
{
@@ -86,19 +86,16 @@ public void DrawPixels(int[] pixelData, int x, int y, int blockWidth, int blockH
8686

8787
case DrawMode.TilemapCache:
8888

89-
// if (_tmpPixelData.Width != blockWidth || _tmpPixelData.Height != blockHeight)
90-
// _tmpPixelData.Resize(blockWidth, blockHeight);
91-
9289
_tmpPixelData.SetPixels(pixelData, blockWidth, blockHeight);
93-
90+
9491
// Copy pixel data directly into the tilemap chip's texture
95-
Utilities.MergePixels(_tmpPixelData, 0, 0, blockWidth, blockHeight, TilemapChip.PixelData, x, y, flipH, flipV, colorOffset, ignoreTransparent);
92+
Utilities.MergePixels(_tmpPixelData, 0, 0, blockWidth, blockHeight, TilemapChip.PixelData, x, y, flipH, flipV, colorOffset, maskId);
9693

9794
break;
9895

9996
default:
10097

101-
DisplayChip.NewDrawCall(pixelData, x, y, blockWidth, blockHeight, (byte) drawMode, flipH, flipV, colorOffset, 0, 0, ignoreTransparent);
98+
DisplayChip.NewDrawCall(pixelData, x, y, blockWidth, blockHeight, (byte) drawMode, flipH, flipV, colorOffset, 0, 0, maskId);
10299

103100
break;
104101
}
@@ -144,9 +141,7 @@ public void DrawPixels(int[] pixelData, int x, int y, int blockWidth, int blockH
144141
/// tilemap by default. When rendering below the tilemap, the sprite is visible in the transparent area of the tile
145142
/// above the background color.
146143
/// </param>
147-
public void DrawSprite(int id, int x, int y, bool flipH = false,
148-
bool flipV = false,
149-
DrawMode drawMode = DrawMode.Sprite, int colorOffset = 0, SpriteChip srcChip = null)
144+
public void DrawSprite(int id, int x, int y, bool flipH = false, bool flipV = false, DrawMode drawMode = DrawMode.Sprite, int colorOffset = 0, SpriteChip srcChip = null)
150145
{
151146
// Only apply the max sprite count to sprite draw modes
152147

@@ -163,8 +158,7 @@ public void DrawSprite(int id, int x, int y, bool flipH = false,
163158
{
164159
srcChip.ReadSpriteAt(id, ref _tmpSpriteData);
165160

166-
DrawPixels(_tmpSpriteData, x, y, SpriteWidth, SpriteHeight, flipH, flipV, drawMode,
167-
colorOffset, true);
161+
DrawPixels(_tmpSpriteData, x, y, SpriteWidth, SpriteHeight, flipH, flipV, drawMode, colorOffset); // TODO sprites will always use 0 as the default maskId, should this be allowed to be passed in?
168162
}
169163
else
170164
{
@@ -174,8 +168,7 @@ public void DrawSprite(int id, int x, int y, bool flipH = false,
174168
pos.X *= SpriteWidth;
175169
pos.Y *= SpriteHeight;
176170

177-
DisplayChip.NewDrawCall(srcChip, x, y, SpriteWidth, SpriteHeight,
178-
(byte) drawMode, flipH, flipV, colorOffset, pos.X, pos.Y);
171+
DisplayChip.NewDrawCall(srcChip, x, y, SpriteWidth, SpriteHeight, (byte) drawMode, flipH, flipV, colorOffset, pos.X, pos.Y);
179172

180173
Player.SpriteCounter++;
181174
// }
@@ -213,7 +206,7 @@ public void DrawRect(int x, int y, int width, int height, int colorOffset = 0,
213206
// }
214207

215208
// TODO is there a faster way to do this?
216-
DrawPixels(pixels, x, y, width, height, false, false, drawMode, Constants.FirstColorId + colorOffset, false);
209+
DrawPixels(pixels, x, y, width, height, false, false, drawMode, Constants.FirstColorId + colorOffset); // This is always set to ignore transparency?
217210
}
218211

219212

SDK/Player/Chips/Graphics/DisplayChip.cs

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -102,7 +102,7 @@ public void Draw()
102102
_drawRequest.FlipH,
103103
_drawRequest.FlipV,
104104
_drawRequest.ColorOffset,
105-
_drawRequest.IgnoreTransparent
105+
_drawRequest.MaskId
106106
);
107107

108108
}
@@ -128,9 +128,9 @@ public void Clear()
128128

129129
public void NewDrawCall(int[] pixels, int destX, int destY, int blockWidth, int blockHeight, byte layer = 0,
130130
bool flipH = false,
131-
bool flipV = false, int colorOffset = 0, int srcX = 0, int srcY = 0, bool ignoreTransparent = true)
131+
bool flipV = false, int colorOffset = 0, int srcX = 0, int srcY = 0, int maskId = -1)
132132
{
133-
NextDrawRequest(destX, destY, layer, flipH, flipV, colorOffset, ignoreTransparent);
133+
NextDrawRequest(destX, destY, layer, flipH, flipV, colorOffset, maskId);
134134

135135
if (_nextDrawRequest)
136136
{
@@ -162,9 +162,9 @@ public void NewDrawCall(int[] pixels, int destX, int destY, int blockWidth, int
162162
/// <param name="layerOrder"></param>
163163
public void NewDrawCall(IDisplay src, int destX, int destY, int blockWidth, int blockHeight, byte layer = 0,
164164
bool flipH = false,
165-
bool flipV = false, int colorOffset = 0, int srcX = 0, int srcY = 0, bool ignoreTransparent = true)
165+
bool flipV = false, int colorOffset = 0, int srcX = 0, int srcY = 0, int maskId = 0)
166166
{
167-
NextDrawRequest(destX, destY, layer, flipH, flipV, colorOffset, ignoreTransparent);
167+
NextDrawRequest(destX, destY, layer, flipH, flipV, colorOffset, maskId);
168168

169169
if (_nextDrawRequest)
170170
{
@@ -218,7 +218,7 @@ public void ResetDrawCalls()
218218
}
219219

220220
public void NextDrawRequest(int destX, int destY, byte layer = 0, bool flipH = false, bool flipV = false,
221-
int colorOffset = 0, bool ignoreTransparent = true)
221+
int colorOffset = 0, int maskId = -1)
222222
{
223223
_drawRequestCounter++;
224224

@@ -235,7 +235,7 @@ public void NextDrawRequest(int destX, int destY, byte layer = 0, bool flipH = f
235235
_drawRequest.FlipH = flipH;
236236
_drawRequest.FlipV = flipV;
237237
_drawRequest.ColorOffset = colorOffset;
238-
_drawRequest.IgnoreTransparent = ignoreTransparent;
238+
_drawRequest.MaskId = maskId;
239239
}
240240
}
241241

SDK/Player/Chips/Graphics/TilemapChip.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -226,7 +226,7 @@ private void RebuildCache()
226226
// Draw the pixel data into the cachedTilemap
227227
Utilities.MergePixels(_tmpPixelData, 0, 0, _tileSize.Width, _tileSize.Height, _tilemapCache,
228228
_pos.X * _tileSize.Width, _pos.Y * _tileSize.Height, _tile.FlipH,
229-
_tile.FlipV, _tile.ColorOffset, false);
229+
_tile.FlipV, _tile.ColorOffset, -1); // TODO this will always ignore the mask?
230230
}
231231
}
232232

SDK/Player/Data/Canvas/Canvas.Merge.cs

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -28,20 +28,19 @@ public sealed partial class Canvas
2828
/// Allows you to merge the pixel data of another canvas into this one without compleatly overwritting it.
2929
/// </summary>
3030
/// <param name="canvas"></param>
31-
public void MergeCanvas(Canvas canvas, int colorOffset = 0, bool ignoreTransparent = false) => MergePixels(0, 0,
32-
canvas.Width, canvas.Height, canvas.GetPixels(), false, false, colorOffset, ignoreTransparent);
31+
public void MergeCanvas(Canvas canvas, int colorOffset = 0, int maskId = -1) => MergePixels(0, 0,
32+
canvas.Width, canvas.Height, canvas.GetPixels(), false, false, colorOffset, maskId);
3333

3434

3535
public void MergePixels(int x, int y, int blockWidth, int blockHeight, int[] pixels,
36-
bool flipH = false, bool flipV = false, int colorOffset = 0, bool ignoreTransparent = true)
36+
bool flipH = false, bool flipV = false, int colorOffset = 0, int maskId = Constants.EmptyPixel)
3737
{
3838
// Flatten the canvas
3939
Draw();
4040

4141
_tmpPixelData.SetPixels(pixels, blockWidth, blockHeight);
4242

43-
Utilities.MergePixels(_tmpPixelData, 0, 0, blockWidth, blockHeight, defaultLayer, x, y, flipH, flipV,
44-
colorOffset, ignoreTransparent);
43+
Utilities.MergePixels(_tmpPixelData, 0, 0, blockWidth, blockHeight, defaultLayer, x, y, flipH, flipV, colorOffset, maskId);
4544
}
4645
}
4746
}

SDK/Player/Data/Canvas/Canvas.cs

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -149,8 +149,7 @@ public void SetPixels(int x, int y, int blockWidth, int blockHeight, int[] pixel
149149
/// <param name="maskColor"></param>
150150
/// <param name="maskColorID"></param>
151151
/// <param name="viewport"></param>
152-
public void DrawPixels(int x = 0, int y = 0, DrawMode drawMode = DrawMode.TilemapCache, float scale = 1f,
153-
int maskColor = Constants.EmptyPixel, int maskColorID = Constants.EmptyPixel, int colorOffset = 0, Rectangle? viewport = null, bool ignoreTransparency = true)
152+
public void DrawPixels(int x = 0, int y = 0, DrawMode drawMode = DrawMode.TilemapCache, float scale = 1f, int colorOffset = 0, int maskId = Constants.EmptyPixel, Rectangle? viewport = null)
154153
{
155154
// This only works when the canvas has a reference to the gameChip
156155
if (gameChip == null) return;
@@ -180,7 +179,7 @@ public void DrawPixels(int x = 0, int y = 0, DrawMode drawMode = DrawMode.Tilema
180179

181180
var destPixels = ResizePixels(srcPixels, tmpW, tmpH, newWidth, newHeight);
182181

183-
gameChip.DrawPixels(destPixels, x, y, newWidth, newHeight, false, false, drawMode, colorOffset, ignoreTransparency);
182+
gameChip.DrawPixels(destPixels, x, y, newWidth, newHeight, false, false, drawMode, colorOffset, maskId);
184183
}
185184

186185
public int[] GetPixels()

0 commit comments

Comments
 (0)
X Tutup