CoolFace
Datasetpublic

hschumann2/TempleOS-Source-Code

sourceHugging Faceupdated 1y agoView on Hugging Face
0likes838downloads
XCCtrls.txt156 linesDownload Raw Back to X-Caliber
1 2#define LASER_TEMP_MAX          30.03#define LASER_THRESHOLD_TEMP    10.04#define MASS_TEMP_MAX           5.05 6class CtrlPanelState7{8  I64 shot_radius,fuse_time;9  F64 laser_temperature;10  Bool spacewalk;11} ctrl_panel;12 13#define CTRL_PANEL_SPACING 3314#define CTRL_PANEL_RANGE   3015#define CTRL_PANEL_BORDER  216#define CTRL_PANEL_BTTN_SIZE    1217 18#define TMP_Y   (+2)19 20U0 DrawCtrlPanelCtrl(CDC *dc,CCtrl *c)21{22  CtrlPanelState *s=c->state;23  F64 d,d_range;24 25  dc->color=LTRED;26  GrRect(dc, c->left,c->top,CTRL_PANEL_SPACING*3+2,27        CTRL_PANEL_SPACING*2+CTRL_PANEL_RANGE+CTRL_PANEL_BTTN_SIZE);28  dc->color=DKGRAY;29  GrRect(dc, c->left+CTRL_PANEL_BORDER,c->top+CTRL_PANEL_BORDER,30        CTRL_PANEL_SPACING*3+2-2*CTRL_PANEL_BORDER,31        CTRL_PANEL_SPACING*2+CTRL_PANEL_RANGE+CTRL_PANEL_BTTN_SIZE32        -2*CTRL_PANEL_BORDER);33  dc->color=BLACK;34  GrLine(dc,c->left+CTRL_PANEL_SPACING,(c->top+CTRL_PANEL_BTTN_SIZE)+35        CTRL_PANEL_SPACING,c->left+CTRL_PANEL_SPACING,36        (c->top+CTRL_PANEL_BTTN_SIZE)+CTRL_PANEL_SPACING+CTRL_PANEL_RANGE-1);37  GrLine(dc,c->left+2*CTRL_PANEL_SPACING+1,(c->top+CTRL_PANEL_BTTN_SIZE)+38        CTRL_PANEL_SPACING,c->left+2*CTRL_PANEL_SPACING+1,39        (c->top+CTRL_PANEL_BTTN_SIZE)+CTRL_PANEL_SPACING+CTRL_PANEL_RANGE-1);40 41  dc->color=BLACK;42  GrRect(dc,(c->left+c->right+1)/2-9*FONT_WIDTH/2-3,43        c->top+CTRL_PANEL_BORDER+(CTRL_PANEL_SPACING-FONT_HEIGHT)/2,44        9*FONT_WIDTH+6,FONT_HEIGHT+6);45 46  if (s->spacewalk)47    dc->color=YELLOW;48  else49    dc->color=DKGRAY;50  GrRect(dc,(c->left+c->right+1)/2-9*FONT_WIDTH/2-2,51        c->top+CTRL_PANEL_BORDER+1+(CTRL_PANEL_SPACING-FONT_HEIGHT)/2,52        9*FONT_WIDTH+4,FONT_HEIGHT+4);53 54  dc->color=RED;55  GrPrint(dc,(c->left+c->right+1)/2-9*FONT_WIDTH/2,56        c->top+CTRL_PANEL_BORDER+3+57        (CTRL_PANEL_SPACING-FONT_HEIGHT)/2,"SpaceWalk");58  GrPrint(dc,c->left+CTRL_PANEL_SPACING-4*FONT_WIDTH/2,59        (c->top+CTRL_PANEL_BTTN_SIZE)+60        CTRL_PANEL_SPACING-FONT_HEIGHT-2,"Size");61  GrPrint(dc,c->left+2*CTRL_PANEL_SPACING+1-4*FONT_WIDTH/2,62        (c->top+CTRL_PANEL_BTTN_SIZE)+63        CTRL_PANEL_SPACING-FONT_HEIGHT-2,"Fuse");64  dc->color=LTRED;65  GrPrint(dc,c->left+CTRL_PANEL_SPACING-FONT_WIDTH/2,66        (c->top+CTRL_PANEL_BTTN_SIZE)+CTRL_PANEL_SPACING+CTRL_PANEL_RANGE+3,67        "%d",s->shot_radius*10/CTRL_PANEL_RANGE);68  GrPrint(dc,c->left+2*CTRL_PANEL_SPACING+1-FONT_WIDTH/2,69        (c->top+CTRL_PANEL_BTTN_SIZE)+CTRL_PANEL_SPACING+CTRL_PANEL_RANGE+3,70        "%d",s->fuse_time*10/CTRL_PANEL_RANGE);71  GrRect(dc,c->left+CTRL_PANEL_SPACING-3,72        (c->top+CTRL_PANEL_BTTN_SIZE)+CTRL_PANEL_SPACING+73        CTRL_PANEL_RANGE-1-s->shot_radius-2 ,7,5);74  GrRect(dc,c->left+2*CTRL_PANEL_SPACING+1-3,75        (c->top+CTRL_PANEL_BTTN_SIZE)+CTRL_PANEL_SPACING+76        CTRL_PANEL_RANGE-1-s->fuse_time-2,7,5);77  dc->color=YELLOW;78  GrRect(dc,c->left+CTRL_PANEL_SPACING-2,79        (c->top+CTRL_PANEL_BTTN_SIZE)+CTRL_PANEL_SPACING+80        CTRL_PANEL_RANGE-1-s->shot_radius-1 ,5,3);81  GrRect(dc,c->left+2*CTRL_PANEL_SPACING+1-2,82        (c->top+CTRL_PANEL_BTTN_SIZE)+CTRL_PANEL_SPACING+83        CTRL_PANEL_RANGE-1-s->fuse_time-1,5,3);84 85  d_range=c->right-c->left-5-5;86  d=s->laser_temperature*d_range/LASER_TEMP_MAX;87  dc->color=BLACK;88  GrRect(dc,c->left+5-1,c->bottom+TMP_Y-2,d_range+2,2+1+1);89  if (d>1.0) {90    dc->color=GREEN;91    GrRect(dc,c->left+5,c->bottom+TMP_Y-1,Min(d,d_range/3),2);92    if (d>=d_range/3) {93      dc->color=YELLOW;94      GrRect(dc,c->left+5+d_range/3,c->bottom+TMP_Y-1,95            Min(d,2*d_range/3)-d_range/3,2);96      if (d>=2*d_range/3) {97        dc->color=RED;98        GrRect(dc,c->left+5+2*d_range/3,c->bottom+TMP_Y-1,d-2*d_range/3,2);99      }100    }101  }102}103 104U0 UpdateDerivedCtrlPanelCtrl(CCtrl *c)105{106  CtrlPanelState *s=c->state;107  c->left=c->win_task->pix_width-(CTRL_PANEL_SPACING*3+2);108  c->right=c->left+CTRL_PANEL_SPACING*3+2;109  c->top=c->win_task->pix_height-(CTRL_PANEL_SPACING*2+110        CTRL_PANEL_RANGE+CTRL_PANEL_BTTN_SIZE);111  c->bottom=c->top+CTRL_PANEL_SPACING*2+CTRL_PANEL_RANGE;112 113  s->shot_radius=ClampI64(s->shot_radius,0,CTRL_PANEL_RANGE-1);114  s->fuse_time=ClampI64(s->fuse_time,0,CTRL_PANEL_RANGE-1);115}116 117U0 LeftClickCtrlPanel(CCtrl *c,I64 x,I64 y,Bool)118{119  CtrlPanelState *s=c->state;120  if (y<c->top+CTRL_PANEL_BORDER+(CTRL_PANEL_SPACING-FONT_HEIGHT)/2+121        FONT_HEIGHT+6)122    s->spacewalk=TRUE;123  else {124    if (x<(c->right+c->left)/2)125      s->shot_radius=CTRL_PANEL_RANGE-1126            -(y-(c->top+CTRL_PANEL_SPACING+CTRL_PANEL_BTTN_SIZE));127    else128      s->fuse_time=CTRL_PANEL_RANGE-1129            -(y-(c->top+CTRL_PANEL_SPACING+CTRL_PANEL_BTTN_SIZE));130  }131  if (c->update_derived_vals)132    (*c->update_derived_vals)(c);133}134 135CCtrl *CtrlPanelNew()136{137  CCtrl *c=CAlloc(sizeof(CCtrl));138  MemSet(&ctrl_panel,0,sizeof(ctrl_panel));139  c->win_task=Fs;140  c->flags=CTRLF_SHOW|CTRLF_CAPTURE_LEFT_MS;141  c->type=CTRLT_GENERIC;142  c->state=&ctrl_panel;143  c->draw_it=&DrawCtrlPanelCtrl;144  c->left_click=&LeftClickCtrlPanel;145  c->update_derived_vals=&UpdateDerivedCtrlPanelCtrl;146  QueIns(c,Fs->last_ctrl);147  TaskDerivedValsUpdate;148  return c;149}150 151U0 CtrlPanelDel(CCtrl *c)152{153  QueRem(c);154  Free(c);155}156