init
This commit is contained in:
commit
2a91a5efd4
|
@ -0,0 +1,2 @@
|
||||||
|
repico
|
||||||
|
ols.json
|
|
@ -0,0 +1,171 @@
|
||||||
|
package main
|
||||||
|
|
||||||
|
import "core:fmt"
|
||||||
|
import rl "vendor:raylib"
|
||||||
|
import "core:mem"
|
||||||
|
|
||||||
|
W :: 400
|
||||||
|
H :: 300
|
||||||
|
CW :: 160
|
||||||
|
CH :: 205
|
||||||
|
|
||||||
|
width : int = W
|
||||||
|
height : int = H
|
||||||
|
zoom : int = 1
|
||||||
|
|
||||||
|
Cart :: struct {
|
||||||
|
image : rl.Image,
|
||||||
|
texture : rl.Texture,
|
||||||
|
loaded : bool,
|
||||||
|
}
|
||||||
|
|
||||||
|
WrongSizeErrorTimer : i32 = 0
|
||||||
|
|
||||||
|
main :: proc() {
|
||||||
|
when ODIN_DEBUG {
|
||||||
|
track : mem.Tracking_Allocator
|
||||||
|
mem.tracking_allocator_init(&track, context.allocator)
|
||||||
|
context.allocator = mem.tracking_allocator(&track)
|
||||||
|
|
||||||
|
defer {
|
||||||
|
if len(track.allocation_map) > 0 {
|
||||||
|
fmt.eprintf("=== %v allocations not freed: ===\n", len(track.allocation_map))
|
||||||
|
for _, entry in track.allocation_map {
|
||||||
|
fmt.eprintf("- %v bytes @ %v\n", entry.size, entry.location)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if len(track.bad_free_array) > 0 {
|
||||||
|
fmt.eprintf("=== %v incorrect frees: ===\n", len(track.bad_free_array))
|
||||||
|
for entry in track.bad_free_array {
|
||||||
|
fmt.eprintf("- %p @ %v\n", entry.memory, entry.location)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
mem.tracking_allocator_destroy(&track)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
cart := Cart{}
|
||||||
|
target := Cart{}
|
||||||
|
|
||||||
|
rl.InitWindow(W, H, "PicoRepico")
|
||||||
|
rl.SetTargetFPS(60)
|
||||||
|
|
||||||
|
hw : f32 = auto_cast width / 2
|
||||||
|
hh : f32 = auto_cast height / 2
|
||||||
|
|
||||||
|
|
||||||
|
buttonCartRect := rl.Rectangle{
|
||||||
|
x = hw - CW - 20,
|
||||||
|
y = 8,
|
||||||
|
width = CW,
|
||||||
|
height = CH,
|
||||||
|
}
|
||||||
|
buttonTargetRect := rl.Rectangle{
|
||||||
|
x = hw + 20,
|
||||||
|
y = 8,
|
||||||
|
width = CW,
|
||||||
|
height = CH,
|
||||||
|
}
|
||||||
|
convertButtonRect := rl.Rectangle{
|
||||||
|
x = hw - 40,
|
||||||
|
y = auto_cast height - 38,
|
||||||
|
width = 80,
|
||||||
|
height = 30,
|
||||||
|
}
|
||||||
|
|
||||||
|
for !rl.WindowShouldClose() {
|
||||||
|
if WrongSizeErrorTimer > 0 {
|
||||||
|
WrongSizeErrorTimer -= 1
|
||||||
|
}
|
||||||
|
|
||||||
|
mouse := rl.GetMousePosition()
|
||||||
|
if rl.IsFileDropped() {
|
||||||
|
droppedFiles := rl.LoadDroppedFiles()
|
||||||
|
defer rl.UnloadDroppedFiles(droppedFiles)
|
||||||
|
|
||||||
|
if droppedFiles.count == 1 {
|
||||||
|
f := droppedFiles.paths[0]
|
||||||
|
if mouse.x <= hw {
|
||||||
|
fmt.println("Got cart file: ", f)
|
||||||
|
if loadCart(&cart, f) == .Wrong_Size {
|
||||||
|
WrongSizeErrorTimer = 180
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if mouse.x > hw {
|
||||||
|
fmt.println("Got target file: ", f)
|
||||||
|
if loadCart(&target, f) == .Wrong_Size {
|
||||||
|
WrongSizeErrorTimer = 180
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
rl.BeginDrawing()
|
||||||
|
rl.GuiDummyRec(rl.Rectangle{0, 0, auto_cast width, auto_cast height}, "")
|
||||||
|
|
||||||
|
rl.GuiButton(buttonCartRect, "Place here cart")
|
||||||
|
rl.GuiButton(buttonTargetRect, "Place here target")
|
||||||
|
|
||||||
|
if WrongSizeErrorTimer > 0 {
|
||||||
|
rl.GuiLabel(rl.Rectangle{8, auto_cast height - 38, 100, 30}, "WRONG IMAGE SIZE")
|
||||||
|
}
|
||||||
|
|
||||||
|
if cart.loaded {
|
||||||
|
rl.DrawTexture(cart.texture, auto_cast buttonCartRect.x, auto_cast buttonCartRect.y, rl.WHITE)
|
||||||
|
}
|
||||||
|
if target.loaded {
|
||||||
|
rl.DrawTexture(target.texture, auto_cast buttonTargetRect.x, auto_cast buttonTargetRect.y, rl.WHITE)
|
||||||
|
}
|
||||||
|
|
||||||
|
if rl.GuiButton(convertButtonRect, "CONVERT!") { convertCart(&cart, &target) }
|
||||||
|
rl.EndDrawing()
|
||||||
|
}
|
||||||
|
|
||||||
|
unloadCart(&cart)
|
||||||
|
unloadCart(&target)
|
||||||
|
}
|
||||||
|
|
||||||
|
CartLoadError :: enum {
|
||||||
|
None,
|
||||||
|
Wrong_Size,
|
||||||
|
Allocation_Error,
|
||||||
|
}
|
||||||
|
|
||||||
|
loadCart :: proc(target: ^Cart, filename: cstring) -> CartLoadError {
|
||||||
|
unloadCart(target)
|
||||||
|
target.image = rl.LoadImage(filename)
|
||||||
|
if target.image.width != CW || target.image.height != CH {
|
||||||
|
return CartLoadError.Wrong_Size
|
||||||
|
}
|
||||||
|
target.texture = rl.LoadTextureFromImage(target.image)
|
||||||
|
target.loaded = true
|
||||||
|
return CartLoadError.None
|
||||||
|
}
|
||||||
|
|
||||||
|
unloadCart :: proc(target: ^Cart) {
|
||||||
|
if target.loaded {
|
||||||
|
rl.UnloadTexture(target.texture)
|
||||||
|
rl.MemFree(target.image.data)
|
||||||
|
}
|
||||||
|
target.loaded = false
|
||||||
|
}
|
||||||
|
|
||||||
|
convertCart :: proc(cart: ^Cart, target: ^Cart) {
|
||||||
|
newCartImage := rl.ImageCopy(target.image)
|
||||||
|
for x : i32 = 0; x < newCartImage.width; x += 1 {
|
||||||
|
for y : i32 = 0; y < newCartImage.height; y += 1{
|
||||||
|
targetCol := rl.GetImageColor(target.image, x, y)
|
||||||
|
sourceCol := rl.GetImageColor(cart.image, x, y)
|
||||||
|
newCol := rl.Color{
|
||||||
|
targetCol.r & 0b11111100 | sourceCol.r & 0b00000011,
|
||||||
|
targetCol.g & 0b11111100 | sourceCol.g & 0b00000011,
|
||||||
|
targetCol.b & 0b11111100 | sourceCol.b & 0b00000011,
|
||||||
|
targetCol.a & 0b11111100 | sourceCol.a & 0b00000011,
|
||||||
|
}
|
||||||
|
rl.ImageDrawPixel(&newCartImage, x, y, newCol)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
rl.ExportImage(newCartImage, "output.p8.png")
|
||||||
|
fmt.println("DONE!")
|
||||||
|
}
|
Loading…
Reference in New Issue