templeos-info/public/Wb/Apps/ToTheFront/TTFDraw.HC

215 lines
5.4 KiB
HolyC
Executable File
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

$SP,"<1>",BI=1$
U0 UnitDraw(CDC *dc,Unit *tmpu,I64 x,I64 y,F64 f)
{
x+=x0; y+=y0;
if (tmpu->infantry)
Sprite3(dc,x,y,0,tmpu->img);
else
Sprite3ZB(dc,x,y,0,tmpu->img,f);
if (phase&~1==PHASE_INDIRECT && tmpu->indirect_fire &&
!tmpu->fired && tmpu->player==cur_player) {
dc->thick=2;
if (cur_player)
dc->color=PURPLE;
else
dc->color=CYAN;
GrCircle3(dc,x,y,0,20*Saw(4*tS,2.0));
GrCircle3(dc,x,y,0,20*Saw(4*tS+1.0,2.0));
dc->thick=1;
}
}
U0 UnitsDraw(CDC *dc)
{
I64 i,j;
F64 x,y;
Unit *tmpu;
for (j=0;j<2;j++) {
for (i=0;i<UNITS_NUM;i++) {
tmpu=&units[j][i];
if (tmpu==target_unit) {
if (target_hit)
dc->color=RED;
else
dc->color=GREEN;
} else {
if (j)
dc->color=LTPURPLE;
else
dc->color=LTCYAN;
}
if (tmpu->life>0 && Bt(&tmpu->vis[view_player],0) &&
tmpu!=moving_unit) {
RowCol2XY(&x,&y,tmpu->row,tmpu->col);
if (phase&~1==PHASE_MOVE && tmpu->remaining_movement ||
(phase&~1==PHASE_INDIRECT&& tmpu->indirect_fire||
phase&~1==PHASE_DIRECT&&!tmpu->indirect_fire) && !tmpu->fired ||
Blink(5))
UnitDraw(dc,tmpu,x,y,tmpu->facing*60.0*ã/180.0);
}
}
}
}
U0 DrawIt(CTask *task,CDC *dc)
{
F64 x,y;
I64 i,j,r,c;
U8 buf[STR_LEN];
IndirectOrders *tmpi;
//Erase text beneath.
dc->color=WHITE;
GrRect(dc,-task->scroll_x,-task->scroll_y,dc->width,dc->height);
map_dc->flags|=DCF_NO_TRANSPARENTS;
GrBlot(dc,x0,y0,map_dc);
i=ms.pos.x-task->pix_left-task->scroll_x;
j=ms.pos.y-task->pix_top -task->scroll_y;
if (CursorInWin(task,i,j)) {
i-=x0; j-=y0;
CursorUpdate(task,i,j);
}
RowCol2XY(&x,&y,cursor_row,cursor_col);
//Roads require multiple cursor fills
dc->color=YELLOW;
c=terrain[cursor_row][cursor_col];
for (i=-(HEX_SIDE+DCOS)/2;i<=(HEX_SIDE+DCOS)/2;i++) {
if (GrPeek(dc,x+i+x0,y+y0)==c)
GrFloodFill(dc,x+i+x0,y+y0);
for (j=-HEX_SIDE/2;j<=HEX_SIDE/2;j++)
if (GrPeek(dc,x+j+x0,y+i+y0)==c)
GrFloodFill(dc,x+j+x0,y+i+y0);
}
UnitsDraw(dc);
if (firing) {
dc->color=BLACK;
GrCircle(dc,fire_x+x0,fire_y+y0,2);
}
if (indirect_explosion) {
for (i=0;i<7;i++) {
if (indirect_row&1)
c=indirect_col+col_offsets_odd[i];
else
c=indirect_col+col_offsets_even[i];
r=indirect_row+row_offsets[i];
if (0<=r<map_rows && 0<=c<map_cols) {
RowCol2XY(&x,&y,r,c);
for (j=0;j<10;j++) {
if (j&1)
dc->color=LTRED;
else
dc->color=YELLOW;
GrCircle(dc,x+RandU16%HEX_SIDE-HEX_SIDE/2+x0,
y+RandU16%HEX_SIDE-HEX_SIDE/2+y0,2);
}
}
}
}
if (moving_unit && moving_unit->vis[view_player]) {
dc->color=YELLOW;
UnitDraw(dc,moving_unit,move_x,move_y,move_facing);
}
ProgressBarsRst;
if (moving_unit) {
if (ms.pos.y<GR_HEIGHT/2) {
progress4_max=moving_unit->movement;
progress4=moving_unit->remaining_movement;
} else {
progress1_max=moving_unit->movement;
progress1=moving_unit->remaining_movement;
}
}
if (fire_radius) {
dc->color=YELLOW;
GrCircle(dc,fire_radius_x+x0,fire_radius_y+y0,fire_radius-1);
GrCircle(dc,fire_radius_x+x0,fire_radius_y+y0,fire_radius+1);
dc->color=RED;
GrCircle(dc,fire_radius_x+x0,fire_radius_y+y0,fire_radius);
}
if (Blink(10)) {
tmpi=indirect_head.next;
while (tmpi!=&indirect_head) {
if (tmpi->attacker->player==view_player) {
RowCol2XY(&x,&y,tmpi->row,tmpi->col);
Sprite3(dc,x+x0,y+y0,0,$IB,"<1>",BI=1$);
}
tmpi=tmpi->next;
}
}
if (Bt(kbd.down_bitmap,SC_SHIFT)) {
if (show_vis_row!=cursor_row || show_vis_col!=cursor_col) {
show_vis_row=cursor_row;
show_vis_col=cursor_col;
VisRecalcMap(show_vis_row,show_vis_col);
}
dc->color=LTGRAY;
for (j=0;j<map_rows;j++)
for (i=0;i<map_cols;i++)
if (!vis_map[j][i]) {
RowCol2XY(&x,&y,j,i);
GrLine(dc,x-6+x0,y-6+y0,x+6+x0,y+6+y0);
GrLine(dc,x+6+x0,y-6+y0,x-6+x0,y+6+y0);
GrLine(dc,x+x0,y-6+y0,x+x0,y+6+y0);
GrLine(dc,x+6+x0,y+y0,x-6+x0,y+y0);
}
}
if (i=StrLen(msg_buf)*FONT_WIDTH) {
dc->color=BLACK;
GrRect(dc,(task->pix_width-i)>>1-10-task->scroll_x,
(task->pix_height-FONT_HEIGHT)>>1-10-task->scroll_y,
i+20,FONT_HEIGHT+20);
dc->color=YELLOW;
GrRect(dc,(task->pix_width-i)>>1-7-task->scroll_x,
(task->pix_height-FONT_HEIGHT)>>1-7-task->scroll_y,
i+14,FONT_HEIGHT+14);
dc->color=RED;
GrPrint(dc,(task->pix_width-i)>>1-task->scroll_x,
(task->pix_height-FONT_HEIGHT)>>1-task->scroll_y,
msg_buf);
if (msg_off_timeout) {
if (msg_off_timeout-cnts.jiffies<3*JIFFY_FREQ/2*animation_delay)
Snd;
if (cnts.jiffies>msg_off_timeout)
*msg_buf=0;
}
}
dc->color=WHITE;
GrRect(dc,-task->scroll_x,-task->scroll_y,
(13+7+10+10)*FONT_WIDTH,FONT_HEIGHT);
if (phase&~1==PHASE_INDIRECT)
StrPrint(buf,"Turn:%2d Artillery",turn);
else if (phase&~1==PHASE_MOVE)
StrPrint(buf,"Turn:%2d Move",turn);
else
StrPrint(buf,"Turn:%2d Fire",turn);
dc->color=BLACK;
GrPrint(dc,-task->scroll_x,-task->scroll_y,buf);
StrPrint(buf,"%3d Units",alive_cnt[0]);
if (cur_player || Blink)
dc->color=CYAN;
else
dc->color=LTCYAN;
GrPrint(dc,-task->scroll_x+(13+7)*FONT_WIDTH,-task->scroll_y,buf);
StrPrint(buf,"%3d Units",alive_cnt[1]);
if (!cur_player || Blink)
dc->color=PURPLE;
else
dc->color=LTPURPLE;
GrPrint(dc,-task->scroll_x+(13+7+10)*FONT_WIDTH,-task->scroll_y,buf);
}
<
þÿÿÿ
þÿÿÿ