forked from KolibriOS/kolibrios
update voxel editor:
1) can draw and erase in parent level with [Shift] pressed 2) modify brush git-svn-id: svn://kolibrios.org@3047 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
parent
881c591f08
commit
43c00f1c99
@ -16,7 +16,7 @@ include '../../../dll.inc'
|
|||||||
include 'vox_draw.inc'
|
include 'vox_draw.inc'
|
||||||
|
|
||||||
@use_library_mem mem.Alloc,mem.Free,mem.ReAlloc,dll.Load
|
@use_library_mem mem.Alloc,mem.Free,mem.ReAlloc,dll.Load
|
||||||
caption db 'Voxel editor 01.10.12',0 ;¯®¤¯¨áì ®ª
|
caption db 'Voxel editor 16.11.12',0 ;¯®¤¯¨áì ®ª
|
||||||
|
|
||||||
struct FileInfoBlock
|
struct FileInfoBlock
|
||||||
Function dd ?
|
Function dd ?
|
||||||
@ -109,6 +109,7 @@ OT_CAPT_Y_COLOR equ 30
|
|||||||
PEN_MODE_NONE equ -1
|
PEN_MODE_NONE equ -1
|
||||||
PEN_MODE_CLEAR equ 0 ;०¨¬ áâ¨à ¨ï
|
PEN_MODE_CLEAR equ 0 ;०¨¬ áâ¨à ¨ï
|
||||||
PEN_MODE_SELECT_COLOR equ 2 ;०¨¬ ¢ë¡®à 梥â
|
PEN_MODE_SELECT_COLOR equ 2 ;०¨¬ ¢ë¡®à 梥â
|
||||||
|
PEN_MODE_BRUSH equ 3 ;०¨¬ à ¡®âë á ª¨áâìî
|
||||||
|
|
||||||
align 4
|
align 4
|
||||||
start:
|
start:
|
||||||
@ -346,22 +347,33 @@ mouse:
|
|||||||
push dword[v_color]
|
push dword[v_color]
|
||||||
@@:
|
@@:
|
||||||
|
|
||||||
|
mov ecx,dword[v_zoom]
|
||||||
|
mov edi,eax
|
||||||
|
mov esi,ebx
|
||||||
|
mcall 66,3
|
||||||
|
and eax,3 ;3 -> ¡¨â 0 «¥¢ë© Shift ¦ â, ¡¨â 1 ¯à ¢ë© Shift ¦ â
|
||||||
|
jz .shift_end
|
||||||
|
;¥á«¨ ¦ â Shift, ⮠। ªâ¨à㥬 ¢¥à奬 ã஢¥
|
||||||
|
;¤«ï í⮣® ¢á¥ ª®®à¤¨ âë ¤¥«¨¬ 2 ®â ¬ áâ ¡ ®â¨¬ ¥¬ 1
|
||||||
|
shr edx,1
|
||||||
|
shr esi,1
|
||||||
|
shr edi,1
|
||||||
|
dec ecx
|
||||||
|
.shift_end:
|
||||||
|
|
||||||
;¢ë§®¢ ®¡é¨å ¯ à ¬¥â஢ ¤«ï äãªæ¨©
|
;¢ë§®¢ ®¡é¨å ¯ à ¬¥â஢ ¤«ï äãªæ¨©
|
||||||
push dword[v_zoom]
|
push ecx edx esi edi
|
||||||
push edx
|
|
||||||
push ebx
|
|
||||||
push eax
|
|
||||||
push dword[open_file_vox]
|
push dword[open_file_vox]
|
||||||
|
|
||||||
;¢ë§®¢ äãªæ¨©
|
;¢ë§®¢ äãªæ¨©
|
||||||
cmp dword[v_pen_mode],1
|
cmp dword[v_pen_mode],1
|
||||||
jne @f
|
jne @f
|
||||||
call buf2d_vox_obj_create_node
|
call buf2d_vox_obj_create_node
|
||||||
;stdcall buf2d_vox_obj_create_node, [open_file_vox], eax,ebx,edx, [v_zoom], [v_color]
|
;stdcall buf2d_vox_obj_create_node, [open_file_vox], edi,esi,edx, [v_zoom], [v_color]
|
||||||
jmp .end_1
|
jmp .end_1
|
||||||
@@:
|
@@:
|
||||||
call buf2d_vox_obj_delete_node
|
call buf2d_vox_obj_delete_node
|
||||||
;stdcall buf2d_vox_obj_delete_node, [open_file_vox], eax,ebx,edx, [v_zoom]
|
;stdcall buf2d_vox_obj_delete_node, [open_file_vox], edi,esi,edx, [v_zoom]
|
||||||
|
|
||||||
.end_1:
|
.end_1:
|
||||||
call draw_objects
|
call draw_objects
|
||||||
@ -1195,8 +1207,7 @@ but_bru_w_m:
|
|||||||
dec dword[brush_w]
|
dec dword[brush_w]
|
||||||
pushad
|
pushad
|
||||||
call draw_pok
|
call draw_pok
|
||||||
call draw_vox_cursor
|
call draw_plane
|
||||||
stdcall [buf2d_draw], buf_pl ;®¡®¢«ï¥¬ ¡ãä¥à íªà ¥
|
|
||||||
popad
|
popad
|
||||||
@@:
|
@@:
|
||||||
ret
|
ret
|
||||||
@ -1208,8 +1219,7 @@ but_bru_w_p:
|
|||||||
inc dword[brush_w]
|
inc dword[brush_w]
|
||||||
pushad
|
pushad
|
||||||
call draw_pok
|
call draw_pok
|
||||||
call draw_vox_cursor
|
call draw_plane
|
||||||
stdcall [buf2d_draw], buf_pl ;®¡®¢«ï¥¬ ¡ãä¥à íªà ¥
|
|
||||||
popad
|
popad
|
||||||
@@:
|
@@:
|
||||||
ret
|
ret
|
||||||
@ -1221,8 +1231,7 @@ but_bru_h_m:
|
|||||||
dec dword[brush_h]
|
dec dword[brush_h]
|
||||||
pushad
|
pushad
|
||||||
call draw_pok
|
call draw_pok
|
||||||
call draw_vox_cursor
|
call draw_plane
|
||||||
stdcall [buf2d_draw], buf_pl ;®¡®¢«ï¥¬ ¡ãä¥à íªà ¥
|
|
||||||
popad
|
popad
|
||||||
@@:
|
@@:
|
||||||
ret
|
ret
|
||||||
@ -1234,15 +1243,14 @@ but_bru_h_p:
|
|||||||
inc dword[brush_h]
|
inc dword[brush_h]
|
||||||
pushad
|
pushad
|
||||||
call draw_pok
|
call draw_pok
|
||||||
call draw_vox_cursor
|
call draw_plane
|
||||||
stdcall [buf2d_draw], buf_pl ;®¡®¢«ï¥¬ ¡ãä¥à íªà ¥
|
|
||||||
popad
|
popad
|
||||||
@@:
|
@@:
|
||||||
ret
|
ret
|
||||||
|
|
||||||
align 4
|
align 4
|
||||||
but_brush_copy:
|
but_brush_copy:
|
||||||
cmp dword[v_pen_mode],3
|
cmp dword[v_pen_mode],PEN_MODE_BRUSH
|
||||||
jne .end_f
|
jne .end_f
|
||||||
pushad
|
pushad
|
||||||
mov eax,[v_cur_x]
|
mov eax,[v_cur_x]
|
||||||
@ -1297,7 +1305,7 @@ popad
|
|||||||
|
|
||||||
align 4
|
align 4
|
||||||
but_brush_draw:
|
but_brush_draw:
|
||||||
cmp dword[v_pen_mode],3
|
cmp dword[v_pen_mode],PEN_MODE_BRUSH
|
||||||
jne .end_f
|
jne .end_f
|
||||||
pushad
|
pushad
|
||||||
mov eax,[v_cur_x]
|
mov eax,[v_cur_x]
|
||||||
@ -1355,7 +1363,7 @@ popad
|
|||||||
|
|
||||||
align 4
|
align 4
|
||||||
but_brush_clear:
|
but_brush_clear:
|
||||||
cmp dword[v_pen_mode],3
|
cmp dword[v_pen_mode],PEN_MODE_BRUSH
|
||||||
jne .end_f
|
jne .end_f
|
||||||
pushad
|
pushad
|
||||||
mov eax,[v_cur_x]
|
mov eax,[v_cur_x]
|
||||||
@ -1445,11 +1453,11 @@ txt_mull db '*',0
|
|||||||
txt_space db ' ',0
|
txt_space db ' ',0
|
||||||
txt_buf rb 16
|
txt_buf rb 16
|
||||||
|
|
||||||
|
;à¨á®¢ ¨¥ ¡ãä¥à á ¢®ªá¥«ì묨 ®¡ê¥ªâ ¬¨
|
||||||
align 4
|
align 4
|
||||||
draw_objects:
|
draw_objects:
|
||||||
stdcall [buf2d_clear], buf_0, [buf_0.color] ;ç¨á⨬ ¡ãä¥à
|
stdcall [buf2d_clear], buf_0, [buf_0.color] ;ç¨á⨬ ¡ãä¥à
|
||||||
stdcall [buf2d_clear], buf_0z, 0 ;ç¨á⨬ ¡ãä¥à
|
stdcall [buf2d_clear], buf_0z, 0 ;ç¨á⨬ ¡ãä¥à
|
||||||
stdcall [buf2d_clear], buf_pl, [buf_pl.color] ;ç¨á⨬ ¡ãä¥à
|
|
||||||
|
|
||||||
cmp dword[v_pen_mode],PEN_MODE_SELECT_COLOR
|
cmp dword[v_pen_mode],PEN_MODE_SELECT_COLOR
|
||||||
jne @f
|
jne @f
|
||||||
@ -1477,8 +1485,6 @@ draw_objects:
|
|||||||
;®¡ëçë© à¥¦¨¬ ¨§®¡à ¦¥¨ï
|
;®¡ëçë© à¥¦¨¬ ¨§®¡à ¦¥¨ï
|
||||||
stdcall [buf2d_vox_obj_draw_3g], buf_0, buf_0z, [buf_vox],\
|
stdcall [buf2d_vox_obj_draw_3g], buf_0, buf_0z, [buf_vox],\
|
||||||
[open_file_vox], ebx,ecx, 0, eax
|
[open_file_vox], ebx,ecx, 0, eax
|
||||||
stdcall [buf2d_vox_obj_draw_pl], buf_pl, [open_file_vox],\
|
|
||||||
OT_MAP_X,OT_MAP_Y,[tile_size], eax, [n_plane], [sc.work_graph]
|
|
||||||
stdcall [buf2d_vox_obj_draw_1g], buf_0, buf_0z,\
|
stdcall [buf2d_vox_obj_draw_1g], buf_0, buf_0z,\
|
||||||
[open_file_vox], 0,0, eax
|
[open_file_vox], 0,0, eax
|
||||||
bt dword[mode_light],0
|
bt dword[mode_light],0
|
||||||
@ -1491,8 +1497,6 @@ draw_objects:
|
|||||||
sub eax,[scaled_zoom]
|
sub eax,[scaled_zoom]
|
||||||
stdcall [buf2d_vox_obj_draw_3g_scaled], buf_0, buf_0z, [buf_vox],\
|
stdcall [buf2d_vox_obj_draw_3g_scaled], buf_0, buf_0z, [buf_vox],\
|
||||||
[open_file_vox], 0,0, 0, [scaled_zoom], [cam_x],[cam_y],[cam_z],eax, [sc.work_graph] ;scroll -> 2^eax
|
[open_file_vox], 0,0, 0, [scaled_zoom], [cam_x],[cam_y],[cam_z],eax, [sc.work_graph] ;scroll -> 2^eax
|
||||||
stdcall [buf2d_vox_obj_draw_pl_scaled], buf_pl, [open_file_vox],\
|
|
||||||
OT_MAP_X,OT_MAP_Y,[tile_size], [scaled_zoom], [n_plane], [sc.work_graph],[cam_x],[cam_y],[cam_z],eax
|
|
||||||
bt dword[mode_light],0
|
bt dword[mode_light],0
|
||||||
jnc .end_2
|
jnc .end_2
|
||||||
stdcall [buf2d_vox_obj_draw_3g_shadows], buf_0, buf_0z, [buf_vox], 0,0, 0, [scaled_zoom], 3
|
stdcall [buf2d_vox_obj_draw_3g_shadows], buf_0, buf_0z, [buf_vox], 0,0, 0, [scaled_zoom], 3
|
||||||
@ -1500,11 +1504,35 @@ draw_objects:
|
|||||||
.end_0:
|
.end_0:
|
||||||
pop ecx ebx eax
|
pop ecx ebx eax
|
||||||
|
|
||||||
call draw_vox_cursor
|
call draw_plane
|
||||||
stdcall [buf2d_draw], buf_0 ;®¡®¢«ï¥¬ ¡ãä¥à íªà ¥
|
stdcall [buf2d_draw], buf_0 ;®¡®¢«ï¥¬ ¡ãä¥à íªà ¥
|
||||||
|
.end_f:
|
||||||
|
ret
|
||||||
|
|
||||||
|
;à¨á®¢ ¨¥ ¯«®áª®á⨠á á¥ç¥¨¥¬ ®¡ê¥ªâ
|
||||||
|
align 4
|
||||||
|
proc draw_plane uses eax
|
||||||
|
stdcall [buf2d_clear], buf_pl, [buf_pl.color] ;ç¨á⨬ ¡ãä¥à
|
||||||
|
|
||||||
|
mov eax,[v_zoom]
|
||||||
|
cmp eax,[scaled_zoom]
|
||||||
|
jg @f
|
||||||
|
;®¡ëçë© à¥¦¨¬ ¨§®¡à ¦¥¨ï
|
||||||
|
stdcall [buf2d_vox_obj_draw_pl], buf_pl, [open_file_vox],\
|
||||||
|
OT_MAP_X,OT_MAP_Y,[tile_size], eax, [n_plane], [sc.work_graph]
|
||||||
|
jmp .end_0
|
||||||
|
@@:
|
||||||
|
;०¨¬ ¬ áèâ ¡¨à®¢ ¨ï ¨§®¡à ¦¥¨ï
|
||||||
|
sub eax,[scaled_zoom]
|
||||||
|
stdcall [buf2d_vox_obj_draw_pl_scaled], buf_pl, [open_file_vox],\
|
||||||
|
OT_MAP_X,OT_MAP_Y,[tile_size], [scaled_zoom], [n_plane], [sc.work_graph],[cam_x],[cam_y],[cam_z],eax
|
||||||
|
.end_0:
|
||||||
|
|
||||||
|
call draw_vox_cursor
|
||||||
stdcall [buf2d_draw], buf_pl ;®¡®¢«ï¥¬ ¡ãä¥à íªà ¥
|
stdcall [buf2d_draw], buf_pl ;®¡®¢«ï¥¬ ¡ãä¥à íªà ¥
|
||||||
.end_f:
|
.end_f:
|
||||||
ret
|
ret
|
||||||
|
endp
|
||||||
|
|
||||||
;à¨á®¢ ¨¥ ªãàá®à
|
;à¨á®¢ ¨¥ ªãàá®à
|
||||||
align 4
|
align 4
|
||||||
@ -1531,15 +1559,14 @@ pushad
|
|||||||
imul ebx,edi
|
imul ebx,edi
|
||||||
add ebx,OT_MAP_Y
|
add ebx,OT_MAP_Y
|
||||||
inc eax
|
inc eax
|
||||||
|
cmp dword[v_pen_mode],PEN_MODE_BRUSH
|
||||||
|
je .brush
|
||||||
inc ebx
|
inc ebx
|
||||||
sub edi,2
|
sub edi,2
|
||||||
stdcall [buf2d_rect_by_size], buf_pl, eax,ebx, edi,edi,[sc.work_graph]
|
stdcall [buf2d_rect_by_size], buf_pl, eax,ebx, edi,edi,[sc.work_graph]
|
||||||
dec ebx
|
dec ebx
|
||||||
add edi,2
|
add edi,2
|
||||||
|
|
||||||
cmp dword[v_pen_mode],3
|
|
||||||
je .brush
|
|
||||||
|
|
||||||
;£®à¨§®â «ìë¥ «¨¨¨
|
;£®à¨§®â «ìë¥ «¨¨¨
|
||||||
sub eax,2
|
sub eax,2
|
||||||
mov ecx,edi
|
mov ecx,edi
|
||||||
@ -1569,6 +1596,42 @@ pushad
|
|||||||
imul esi,[tile_size]
|
imul esi,[tile_size]
|
||||||
stdcall [buf2d_rect_by_size], buf_pl, eax,ebx, edi,esi,[sc.work_graph]
|
stdcall [buf2d_rect_by_size], buf_pl, eax,ebx, edi,esi,[sc.work_graph]
|
||||||
|
|
||||||
|
;à¨á®¢ ¨¥ â®ç¥ª ¤«ï ª¨áâ¨
|
||||||
|
mov ecx,[brush_w]
|
||||||
|
mov edx,[tile_size]
|
||||||
|
sub eax,edx ;eax-=tile_size
|
||||||
|
shr edx,2
|
||||||
|
add eax,edx ;eax+=tile_size/4
|
||||||
|
add ebx,edx ;ebx+=tile_size/4
|
||||||
|
mov edx,eax
|
||||||
|
mov esi,[tile_size]
|
||||||
|
imul esi,ecx
|
||||||
|
imul ecx,[brush_h]
|
||||||
|
add esi,edx
|
||||||
|
;eax = from edx to esi
|
||||||
|
mov edi,brush_data
|
||||||
|
cld
|
||||||
|
@@:
|
||||||
|
add eax,[tile_size]
|
||||||
|
bt dword[edi],31
|
||||||
|
jc .no_pixel
|
||||||
|
bt dword[edi],30
|
||||||
|
jc .sel_color
|
||||||
|
push dword[edi]
|
||||||
|
jmp .set_pixel
|
||||||
|
.sel_color:
|
||||||
|
push [v_color]
|
||||||
|
.set_pixel:
|
||||||
|
stdcall [buf2d_rect_by_size], buf_pl, eax,ebx, 3,3 ;, [edi]
|
||||||
|
.no_pixel:
|
||||||
|
add edi,4
|
||||||
|
cmp eax,esi
|
||||||
|
jl .end_line
|
||||||
|
mov eax,edx
|
||||||
|
add ebx,[tile_size]
|
||||||
|
.end_line:
|
||||||
|
loop @b
|
||||||
|
|
||||||
.end_f:
|
.end_f:
|
||||||
popad
|
popad
|
||||||
ret
|
ret
|
||||||
|
Loading…
Reference in New Issue
Block a user