Proper color handling
This commit is contained in:
+3
-3
@@ -223,17 +223,17 @@ export fn main() void = {
|
|||||||
const x = ev.motion.x / scale: f32;
|
const x = ev.motion.x / scale: f32;
|
||||||
const y = ev.motion.y / scale: f32;
|
const y = ev.motion.y / scale: f32;
|
||||||
uxn::set_mouse_motion(x: u16,y: u16,state);
|
uxn::set_mouse_motion(x: u16,y: u16,state);
|
||||||
uxn::uxn_eval(state.mouse_vector,state)!;
|
if(state.mouse_vector != 0 ) uxn::uxn_eval(state.mouse_vector,state)!;
|
||||||
case sdl3::EventType::MOUSE_BUTTON_DOWN =>
|
case sdl3::EventType::MOUSE_BUTTON_DOWN =>
|
||||||
// fmt::printfln("Mouse Down: 0x{:x}", ev.button.button: u8 )!;
|
// fmt::printfln("Mouse Down: 0x{:x}", ev.button.button: u8 )!;
|
||||||
const b = 1 << (ev.button.button: u8 - 1);
|
const b = 1 << (ev.button.button: u8 - 1);
|
||||||
uxn::set_mouse_down(b,state);
|
uxn::set_mouse_down(b,state);
|
||||||
uxn::uxn_eval(state.mouse_vector,state)!;
|
if(state.mouse_vector != 0 ) uxn::uxn_eval(state.mouse_vector,state)!;
|
||||||
case sdl3::EventType::MOUSE_BUTTON_UP =>
|
case sdl3::EventType::MOUSE_BUTTON_UP =>
|
||||||
// fmt::printfln("Mouse Up: 0x{:x}", ev.button.button: u8 )!;
|
// fmt::printfln("Mouse Up: 0x{:x}", ev.button.button: u8 )!;
|
||||||
const b = 1 << (ev.button.button: u8 - 1);
|
const b = 1 << (ev.button.button: u8 - 1);
|
||||||
uxn::set_mouse_up(b,state);
|
uxn::set_mouse_up(b,state);
|
||||||
uxn::uxn_eval(state.mouse_vector,state)!;
|
if(state.mouse_vector != 0 ) uxn::uxn_eval(state.mouse_vector,state)!;
|
||||||
case sdl3::EventType::MOUSE_WHEEL =>
|
case sdl3::EventType::MOUSE_WHEEL =>
|
||||||
fmt::printfln("Mouse Wheel!")!;
|
fmt::printfln("Mouse Wheel!")!;
|
||||||
case sdl3::EventType::WINDOW_EXPOSED =>
|
case sdl3::EventType::WINDOW_EXPOSED =>
|
||||||
|
|||||||
+15
-13
@@ -34,6 +34,12 @@ export type uxn_screen = ([MAXWIDTH][MAXHEIGHT]u8, [MAXWIDTH][MAXHEIGHT]u8);
|
|||||||
|
|
||||||
const reset_vector: u16 = 0x0100;
|
const reset_vector: u16 = 0x0100;
|
||||||
|
|
||||||
|
const colormodes: [4][16] u8 = [
|
||||||
|
[0, 0, 0, 0, 1, 0, 1, 1, 2, 2, 0, 2, 3, 3, 3, 0],
|
||||||
|
[0, 1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3],
|
||||||
|
[1, 2, 3, 1, 1, 2, 3, 1, 1, 2, 3, 1, 1, 2, 3, 1],
|
||||||
|
[2, 3, 1, 2, 2, 3, 1, 2, 2, 3, 1, 2, 2, 3, 1, 2]];
|
||||||
|
|
||||||
fn initialize_uxn_mem() *uxn = {
|
fn initialize_uxn_mem() *uxn = {
|
||||||
return alloc(uxn{
|
return alloc(uxn{
|
||||||
pc = reset_vector,
|
pc = reset_vector,
|
||||||
@@ -298,12 +304,8 @@ fn copy_sprite_to_screen(bpp2: bool, colors: u8, x: u16, y: u16, addr: u16, flip
|
|||||||
else {yield get_pixels_from_1bpp_sprite(addr,state);};
|
else {yield get_pixels_from_1bpp_sprite(addr,state);};
|
||||||
|
|
||||||
for(let p .. pixels){
|
for(let p .. pixels){
|
||||||
const color = if(!bpp2){
|
const color = colormodes[p][colors];
|
||||||
yield if(p == 0) { yield 0:u8;} else {yield colors: u8; };
|
|
||||||
|
|
||||||
} else {
|
|
||||||
yield p;
|
|
||||||
};
|
|
||||||
if((x < MAXWIDTH) && (y < MAXHEIGHT)){
|
if((x < MAXWIDTH) && (y < MAXHEIGHT)){
|
||||||
if(layer1) { state.screen.1[x+xoff][y+yoff] = color; }
|
if(layer1) { state.screen.1[x+xoff][y+yoff] = color; }
|
||||||
else {state.screen.0[x+xoff][y+yoff] = color; };
|
else {state.screen.0[x+xoff][y+yoff] = color; };
|
||||||
@@ -350,14 +352,14 @@ fn get_pixels_from_2bpp_sprite(addr: u16, state: *uxn) []u8 = {
|
|||||||
for(let i = 0; i < 8; i+=1){
|
for(let i = 0; i < 8; i+=1){
|
||||||
const data1: u8 = state.ram[addr + i: u16];
|
const data1: u8 = state.ram[addr + i: u16];
|
||||||
const data2: u8 = state.ram[addr + i:u16 + 8];
|
const data2: u8 = state.ram[addr + i:u16 + 8];
|
||||||
pixels[i*8 +0] = ((data1 & 0b10000000) >> 6) | ((data2 & 0b10000000) >> 7);
|
pixels[i*8 +0] = ((data2 & 0b10000000) >> 6) | ((data1 & 0b10000000) >> 7);
|
||||||
pixels[i*8 +1] = ((data1 & 0b01000000) >> 5) | ((data2 & 0b01000000) >> 6);
|
pixels[i*8 +1] = ((data2 & 0b01000000) >> 5) | ((data1 & 0b01000000) >> 6);
|
||||||
pixels[i*8 +2] = ((data1 & 0b00100000) >> 4) | ((data2 & 0b00100000) >> 5);
|
pixels[i*8 +2] = ((data2 & 0b00100000) >> 4) | ((data1 & 0b00100000) >> 5);
|
||||||
pixels[i*8 +3] = ((data1 & 0b00010000) >> 3) | ((data2 & 0b00010000) >> 4);
|
pixels[i*8 +3] = ((data2 & 0b00010000) >> 3) | ((data1 & 0b00010000) >> 4);
|
||||||
pixels[i*8 +4] = ((data1 & 0b00001000) >> 2) | ((data2 & 0b00001000) >> 3);
|
pixels[i*8 +4] = ((data2 & 0b00001000) >> 2) | ((data1 & 0b00001000) >> 3);
|
||||||
pixels[i*8 +5] = ((data1 & 0b00000100) >> 1) | ((data2 & 0b00000100) >> 2);
|
pixels[i*8 +5] = ((data2 & 0b00000100) >> 1) | ((data1 & 0b00000100) >> 2);
|
||||||
pixels[i*8 +6] = ((data1 & 0b00000010) >> 0) | ((data2 & 0b00000010) >> 1);
|
pixels[i*8 +6] = ((data2 & 0b00000010) >> 0) | ((data1 & 0b00000010) >> 1);
|
||||||
pixels[i*8 +7] = ((data1 & 0b00000001) << 1) | ((data2 & 0b00000001) >> 0);
|
pixels[i*8 +7] = ((data2 & 0b00000001) << 1) | ((data1 & 0b00000001) >> 0);
|
||||||
};
|
};
|
||||||
return pixels;
|
return pixels;
|
||||||
};
|
};
|
||||||
|
|||||||
Reference in New Issue
Block a user