This commit is contained in:
Bruno Rybársky 2023-11-04 21:08:59 +01:00
parent 8bfbb031a1
commit 856c1b8c48
2 changed files with 269 additions and 1 deletions

79
.idea/workspace.xml Normal file

@ -0,0 +1,79 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="AutoImportSettings">
<option name="autoReloadType" value="ALL" />
</component>
<component name="ChangeListManager">
<list default="true" id="f9d4c5b9-b129-4da9-ba9f-bbb71594fe20" name="Changes" comment="commit" />
<option name="SHOW_DIALOG" value="false" />
<option name="HIGHLIGHT_CONFLICTS" value="true" />
<option name="HIGHLIGHT_NON_ACTIVE_CHANGELIST" value="false" />
<option name="LAST_RESOLUTION" value="IGNORE" />
</component>
<component name="GOROOT" url="file:///usr/lib/go" />
<component name="Git.Settings">
<option name="RECENT_GIT_ROOT_PATH" value="$PROJECT_DIR$" />
</component>
<component name="ProjectColorInfo"><![CDATA[{
"associatedIndex": 3
}]]></component>
<component name="ProjectId" id="2XiP5d8wunfxWu8IyGgYD1Bv1kK" />
<component name="ProjectLevelVcsManager">
<ConfirmationsSetting value="2" id="Add" />
</component>
<component name="ProjectViewState">
<option name="hideEmptyMiddlePackages" value="true" />
<option name="showLibraryContents" value="true" />
</component>
<component name="PropertiesComponent"><![CDATA[{
"keyToString": {
"ASKED_ADD_EXTERNAL_FILES": "true",
"ASKED_SHARE_PROJECT_CONFIGURATION_FILES": "true",
"Go Build.go build asedraw.executor": "Run",
"RunOnceActivity.OpenProjectViewOnStart": "true",
"RunOnceActivity.ShowReadmeOnStart": "true",
"RunOnceActivity.go.formatter.settings.were.checked": "true",
"RunOnceActivity.go.migrated.go.modules.settings": "true",
"RunOnceActivity.go.modules.automatic.dependencies.download": "true",
"RunOnceActivity.go.modules.go.list.on.any.changes.was.set": "true",
"SHARE_PROJECT_CONFIGURATION_FILES": "true",
"git-widget-placeholder": "main",
"go.import.settings.migrated": "true",
"last_opened_file_path": "/home/bruno",
"node.js.detected.package.eslint": "true",
"node.js.selected.package.eslint": "(autodetect)",
"nodejs_package_manager_path": "npm",
"settings.editor.selected.configurable": "preferences.keymap"
}
}]]></component>
<component name="RunManager">
<configuration name="go build asedraw" type="GoApplicationRunConfiguration" factoryName="Go Application" nameIsGenerated="true">
<module name="asedraw" />
<working_directory value="$PROJECT_DIR$" />
<kind value="PACKAGE" />
<package value="asedraw" />
<directory value="$PROJECT_DIR$" />
<filePath value="$PROJECT_DIR$" />
<method v="2" />
</configuration>
</component>
<component name="SharedIndexes">
<attachedChunks>
<set>
<option value="bundled-gosdk-e6de5fef99a4-91e4cb603404-org.jetbrains.plugins.go.sharedIndexes.bundled-GO-233.11148" />
</set>
</attachedChunks>
</component>
<component name="SpellCheckerSettings" RuntimeDictionaries="0" Folders="0" CustomDictionaries="0" DefaultDictionary="application-level" UseSingleDictionary="true" transferred="true" />
<component name="TypeScriptGeneratedFilesManager">
<option name="version" value="3" />
</component>
<component name="VcsManagerConfiguration">
<option name="ADD_EXTERNAL_FILES_SILENTLY" value="true" />
<MESSAGE value="commit" />
<option name="LAST_COMMIT_MESSAGE" value="commit" />
</component>
<component name="VgoProject">
<settings-migrated>true</settings-migrated>
</component>
</project>

@ -1 +0,0 @@
/home/bruno/.config/aseprite/scripts/asedraw_client.lua

190
asedraw_client.lua Normal file

@ -0,0 +1,190 @@
local dlg = Dialog()
dlg:entry{ id="url", label="Server:", text="http://127.0.0.1:8797" }
dlg:button{ id="yes", text="Connect" }
dlg:button{ id="no", text="Cancel" }
dlg:show()
local data = dlg.data
local connected = false
local images = {}
local function getimage(image)
img = {}
for x=0,image.width do
tmp = {}
for y=0,image.height do
tmp[y] = image:getPixel(x, y)
end
img[x] = tmp
end
return img
end
local function send(data)
if connected then
ws:sendText(json.encode(data))
end
end
local function handleMessage(mt, datain)
if mt == WebSocketMessageType.OPEN then
send({
event = "connect",
version = tostring(app.version),
image = getimage(app.image)
})
connected = true
elseif mt == WebSocketMessageType.TEXT then
local data = json.decode(datain)
if data.event == "imagesetbytes" then
app.image.bytes = data.image
elseif data.event == "imagesetarray" then
for x,column in ipairs(data.image) do
for y,pixel in ipairs(column) do
app.image:drawPixel(x, y, pixel)
end
end
elseif data.event == "setpixel" then
app.image:drawPixel(data.x, data.y, data.value)
end
elseif mt == WebSocketMessageType.CLOSE then
connected = false
ws:connect()
end
end
local function wsinit()
ws = WebSocket{
onreceive = handleMessage,
url = data.url,
deflate = true
}
end
app.events:on('sitechange',
function()
send({
event = "sitechange"
})
end)
app.events:on('fgcolorchange',
function()
send({
event = "fgcolorchange",
color = app.fgColor.rgbaPixel
})
end)
app.events:on('bgcolorchange',
function()
send({
event = "bgcolorchange",
color = app.bgColor.rgbaPixel
})
end)
app.events:on('beforecommand',
function(ev)
send({
event = "beforecommand",
name = ev.name,
params = ev.params
})
end)
app.events:on('aftercommand',
function(ev)
send({
event = "aftercommand",
name = ev.name,
params = ev.params
})
end)
local function filenamechanged(ev)
send({
event = "filenamechange",
filename = app.sprite.filename
})
end
local function spritechanged(ev)
if images[app.image.id] == nil then
images[app.image.id] = {
version = app.image.version,
bytes = app.image.bytes,
data = getimage(app.image),
width = app.image.width,
height = app.image.height,
colormode = app.image.colorMode,
rowstride = app.image.rowStride
}
elseif images[app.image.id].version ~= app.image.version then
out["version"] = app.image.version
images[app.image.id] = app.image.version
elseif images[app.image.id].bytes ~= app.image.bytes and images[app.image.id].width == app.image.width and images[app.image.id].height == app.image.height then
local currentImage = getimage(app.image)
local changes = {}
for x,column in ipairs(currentImage.data) do
for y,pixel in ipairs(column) do
if images[app.image.id].data[x][y] ~= pixel then
table.insert(changes, {
x = x,
y = y,
value = pixel
})
end
end
end
send({
event = "change",
changes = changes,
id = app.image.id
})
elseif images[app.image.id].width ~= app.image.width or images[app.image.id].height ~= app.image.height then
send({
event = "sizechange",
width = app.image.width,
height = app.image.height,
image = getimage(app.image),
id = app.image.id
})
elseif images[app.image.id].colorMode ~= app.image.colorMode then
images[app.image.id].colorMode = app.image.colorMode
send({
event = "colormodechange",
colormode = app.image.colorMode,
id = app.image.id
})
elseif images[app.image.id].rowStride ~= app.image.rowStride then
images[app.image.id].rowStride = app.image.rowStride
send({
event = "rowstridechange",
rowstride = app.image.rowStride,
id = app.image.id
})
end
end
local function registerspriteevents(sprite)
sprite.events:on("filenamechange", filenamechanged)
sprite.events:on("change", spritechanged)
end
if data.yes then
wsinit()
ws:connect()
end