mirror of
https://git.code.sf.net/p/quake/quakeforge
synced 2024-12-11 21:31:30 +00:00
75ec6bf244
This is a nasty commit, sorry, but 99% of the commit is interdependent.
213 lines
2.8 KiB
R
213 lines
2.8 KiB
R
#include "draw.h"
|
|
#include "debug.h"
|
|
#include "gib.h"
|
|
#include "string.h"
|
|
#include "system.h"
|
|
#include "HUD.h"
|
|
|
|
integer HUDHandleClass;
|
|
|
|
@implementation HUDObject
|
|
- (id) initWithComponents: (integer) x : (integer) y
|
|
{
|
|
self = [super init];
|
|
origin = makePoint (x, y);
|
|
visible = YES;
|
|
|
|
return self;
|
|
}
|
|
|
|
- (void) dealloc
|
|
{
|
|
[super dealloc];
|
|
}
|
|
|
|
- (integer) handle
|
|
{
|
|
return handle;
|
|
}
|
|
|
|
- (Point) origin
|
|
{
|
|
return origin;
|
|
}
|
|
|
|
- (Size) size
|
|
{
|
|
return makeSize (0, 0);
|
|
}
|
|
|
|
- (void) setOrigin: (Point) newPoint
|
|
{
|
|
origin = newPoint;
|
|
}
|
|
|
|
- (void) translate: (Point) offset
|
|
{
|
|
origin = addPoint(origin, offset);
|
|
}
|
|
|
|
- (BOOL) isVisible
|
|
{
|
|
return visible;
|
|
}
|
|
|
|
- (void) setVisible: (BOOL) _visible
|
|
{
|
|
visible = _visible;
|
|
}
|
|
|
|
- (void) display
|
|
{
|
|
}
|
|
@end
|
|
|
|
@implementation HUDText : HUDObject
|
|
- (id) initWithComponents: (integer) x :(integer) y :(string) _text
|
|
{
|
|
self = [super initWithComponents :x :y];
|
|
[self setText :_text];
|
|
|
|
return self;
|
|
}
|
|
|
|
- (Size) size
|
|
{
|
|
return makeSize (8*(integer) strlen (text), 8);
|
|
}
|
|
|
|
- (string) text
|
|
{
|
|
return text;
|
|
}
|
|
|
|
- (void) setText: (string) _text
|
|
{
|
|
text = _text;
|
|
}
|
|
|
|
- (void) display
|
|
{
|
|
if (visible)
|
|
Draw_String (origin.x, origin.y, text);
|
|
}
|
|
@end
|
|
|
|
@implementation HUDGraphic : HUDObject
|
|
- (id) initWithComponents: (integer)x :(integer)y :(string) _file
|
|
{
|
|
self = [super initWithComponents :x :y];
|
|
[self setFile :_file];
|
|
|
|
return self;
|
|
}
|
|
|
|
- (void) dealloc
|
|
{
|
|
[picture release];
|
|
[super dealloc];
|
|
}
|
|
|
|
- (Size) size
|
|
{
|
|
return makeSize ([picture width], [picture height]);
|
|
}
|
|
|
|
- (void) setFile: (string) _file
|
|
{
|
|
[picture release];
|
|
picture = [[QPic alloc] initName :_file];
|
|
}
|
|
|
|
- (void) display
|
|
{
|
|
if (visible)
|
|
[picture draw :origin.x :origin.y];
|
|
}
|
|
@end
|
|
|
|
@implementation HUDAnimation : HUDObject
|
|
|
|
- (id) initWithComponents: (integer) x :(integer) y
|
|
{
|
|
self = [super initWithComponents :x :y];
|
|
frames = [[Array alloc] init];
|
|
currentFrame = 0;
|
|
nextFrameTime = 0;
|
|
looping = NO;
|
|
|
|
return self;
|
|
}
|
|
|
|
- (void) dealloc
|
|
{
|
|
[frames release];
|
|
[super dealloc];
|
|
}
|
|
|
|
- (Size) size
|
|
{
|
|
local Frame []frame;
|
|
|
|
frame = [frames objectAtIndex: currentFrame];
|
|
return [frame size];
|
|
}
|
|
|
|
- (void) addFrame: (Frame[]) frame
|
|
{
|
|
[frames addObject: frame];
|
|
}
|
|
|
|
- (void) changeFrame
|
|
{
|
|
while (time >= nextFrameTime) {
|
|
local Frame []f;
|
|
if (++currentFrame == [frames count]) {
|
|
if (looping)
|
|
currentFrame = 0;
|
|
else {
|
|
nextFrameTime = 0.0;
|
|
currentFrame = 0;
|
|
return;
|
|
}
|
|
}
|
|
f = [frames objectAtIndex: currentFrame];
|
|
nextFrameTime += [f duration];
|
|
}
|
|
}
|
|
|
|
- (void) display
|
|
{
|
|
local Frame []f;
|
|
|
|
if (!visible)
|
|
return;
|
|
|
|
if (nextFrameTime)
|
|
[self changeFrame];
|
|
|
|
f = [frames objectAtIndex: currentFrame];
|
|
[f draw :origin.x :origin.y];
|
|
}
|
|
|
|
- (void) start
|
|
{
|
|
local Frame []f;
|
|
|
|
currentFrame = 0;
|
|
f = [frames objectAtIndex: 0];
|
|
nextFrameTime = time + [f duration];
|
|
}
|
|
|
|
- (void) stop
|
|
{
|
|
nextFrameTime = 0.0;
|
|
currentFrame = 0;
|
|
}
|
|
|
|
- (void) setLooping: (BOOL) _looping
|
|
{
|
|
looping = _looping;
|
|
}
|
|
|
|
@end
|