2 @Copyright Looking Glass Studios, Inc.
3 1996,1997,1998,1999,2000 Unpublished Work.
6 // $Header: r:/t2repos/thief2/src/dark/statbar.cpp,v 1.5 2000/02/19 13:09:04 toml Exp $
13 #include <dbmem.h> // must be last header!
15 ////////////////////////////////////////////////////////////
16 // cStatusBar implementation
19 cStatusBar::cStatusBar(const sStatusBarDesc
&desc
)
20 :sStatusBarDesc(desc
),
24 memset(&mVal
,0,sizeof(mVal
));
25 RectSetNull(&mScreenRect
);
28 void cStatusBar::Reset()
30 for (int i
= 0; i
< kNumValues
; i
++)
33 gr_free_canvas(mpCanvas
);
38 const Rect
& cStatusBar::GetScreenRect()
43 void cStatusBar::SetScreenRect(const Rect
& r
)
45 if (RectWidth(&r
) != RectWidth(&mScreenRect
)
46 || RectHeight(&r
) != RectHeight(&mScreenRect
))
51 void cStatusBar::SetVal(eValue which
, int val
)
53 if (abs(val
- mLastVal
[which
]) > tolerance
)
59 void cStatusBar::DoDraw(const Rect
& fillme
)
61 gr_set_fcolor(gr_make_screen_fcolor(colors
[kFG
]));
62 gr_rect(RECT_UNWRAP(&fillme
));
65 BOOL
cStatusBar::MakeDrawCanvas() { return TRUE
;}
67 void cStatusBar::Update(ulong time
)
69 BOOL expired
= refresh
>= 0 && time
- mLastDrawTime
> refresh
;
72 if ((flags
& kHideAtMax
) && expired
&& mVal
[kCur
] == mVal
[kMax
])
74 memcpy(&mLastVal
,&mVal
,sizeof(mLastVal
));
79 if (RectCheckNull(&mScreenRect
))
82 BOOL need_refresh
= expired
|| mpCanvas
== NULL
;
84 BOOL bDoCanvas
= MakeDrawCanvas();
86 // if we have changed values, or time has elapsed, refresh
90 int& max
= mVal
[kMax
];
91 if (max
<= 0) max
= 1;
92 int& val
= mVal
[kCur
];
93 if (val
> max
) val
= max
;
96 int w
= RectWidth(&mScreenRect
);
97 int h
= RectHeight(&mScreenRect
);
103 mpCanvas
= gr_alloc_canvas(grd_canvas
->bm
.type
,w
,h
);
104 gr_push_canvas(mpCanvas
);
108 // interpolate between left and right edge
109 int xval
= val
*w
/max
;
111 // figure out where the full part of the bar is
112 Rect fillme
= { 0, 0, w
, h
};
114 fillme
.ul
.x
= w
- xval
;
120 if (flags
& kDrawBorder
)
122 gr_set_fcolor(colors
[kBorder
]);
129 memcpy(&mLastVal
,&mVal
,sizeof(mLastVal
));
130 mLastDrawTime
= time
;
135 if (flags
& kTransparent
)
136 mpCanvas
->bm
.flags
|= BMF_TRANS
;
138 gr_bitmap(&mpCanvas
->bm
,mScreenRect
.ul
.x
,mScreenRect
.ul
.y
);