Files
astromaddie--HaloCE-VR/source/interface/hud_draw.h
T

165 lines
4.3 KiB
C

/*
HUD_DRAW.H
Narrow cross-translation-unit interface owned by HUD_DRAW.C.
*/
#ifndef __HUD_DRAW_H
#define __HUD_DRAW_H
#pragma once
#include "math/integer_math.h"
#include "math/real_math.h"
/* ---------- constants */
enum
{
STACK_BUFFER_LENGTH = 0x80,
STACK_BUFFER_FILL = 0x62626262,
};
enum hud_draw_flags
{
_hud_draw_flashing_bit = 0,
_hud_draw_disabled_bit,
_hud_draw_in_multiplayer_bit,
NUMBER_OF_HUD_DRAW_FLAGS
};
/* ---------- macros */
/* The stack sentinel: a guarded function starts with
long return_eip = get_return_eip();
long stack_buffer[STACK_BUFFER_LENGTH];
csmemset(stack_buffer, 0x62, sizeof(stack_buffer));
and ends with this check of both its return address and its fill pattern. */
#define match_assert_stack_frame(file, line) \
{ \
short corrupt_index = check_stack_buffer(stack_buffer); \
match_vassert(file, line, return_eip==get_return_eip(), "corrupt return address!"); \
match_vassert(file, line, corrupt_index==NONE, csprintf(temporary, "corrupt stack at %d!", corrupt_index)); \
}
/* ---------- structures */
struct bitmap_data;
struct hud_absolute_placement_definition;
struct hud_color_definition;
struct hud_placement_definition;
struct meter_hud_element_definition;
struct number_hud_element_definition;
struct tag_block;
struct static_hud_element_definition;
struct weapon_hud_overlay_definition;
/* ---------- prototypes/HUD_DRAW.C */
long get_return_eip(
void);
real hud_globals_get_scale(
boolean in_multiplayer);
void hud_retrieve_bitmap_and_bounding_rect(
long bitmap_group_index,
short sequence_index,
short frame_index,
struct bitmap_data const **bitmap,
real_rectangle2d const **clip);
long fast_ftol_C(
real x);
pixel32 real_alpha_intensity_to_pixel32(
real alpha,
real intensity);
void hud_calculate_point(
short local_player_index,
struct hud_absolute_placement_definition const *absolute_placement,
struct hud_placement_definition const *placement,
struct bitmap_data const *bitmap_data,
boolean in_multiplayer,
real override_scale,
point2d *result);
boolean hud_multitexture_overlays_follow_zoom(
struct tag_block const *multitexture_overlays);
boolean hud_number_shows_only_when_zoomed(
struct number_hud_element_definition const *number);
void hud_zoomed_layout_begin(
rectangle2d *saved_window_bounds);
void hud_zoomed_layout_end(
rectangle2d const *saved_window_bounds);
long get_flash_duration(
struct hud_color_definition const *hud_color);
pixel32 get_flash_color(
struct hud_color_definition const *hud_color,
long reference_value);
void hud_draw_weapon_overlays(
short local_player_index,
struct hud_absolute_placement_definition const *absolute_placement,
struct weapon_hud_overlay_definition const *overlays,
long type_flags,
long reference_time,
short draw_flags,
boolean in_multiplayer);
void hud_draw_bitmap(
struct bitmap_data const *bitmap,
struct hud_absolute_placement_definition const *absolute_placement,
struct hud_placement_definition const *placement,
real_rectangle2d const *clip,
real scale,
real theta,
pixel32 color,
boolean in_multiplayer,
boolean is_interface_bitmap,
boolean is_crosshair_bitmap);
void hud_draw_meter(
short local_player_index,
struct hud_absolute_placement_definition const *placement,
struct meter_hud_element_definition const *meter,
byte min_value,
byte max_value,
short draw_flags,
real reference_time,
real reference_value);
void hud_draw_static_element(
short local_player_index,
struct hud_absolute_placement_definition const *placement,
struct static_hud_element_definition const *static_element,
short draw_flags,
long flash_reference_time);
void hud_draw_bitmap_direct(
struct bitmap_data const *bitmap,
short placement,
point2d const *point,
real_rectangle2d const *clip,
real scale,
real theta,
pixel32 color,
boolean is_interface_bitmap);
void hud_draw_numbers(
short local_player_index,
struct hud_absolute_placement_definition const *absolute_placement,
struct number_hud_element_definition const *numbers,
short value,
short decimal_value,
short draw_flags,
long flash_reference_time,
real override_scale);
/* ---------- public code */
__inline short check_stack_buffer(
long *buffer)
{
short index;
for (index = STACK_BUFFER_LENGTH-1; index>=0; index--)
{
if (buffer[index]!=STACK_BUFFER_FILL)
return index;
}
return NONE;
}
#endif /* __HUD_DRAW_H */