borgware-2d/games/tetris/view.h

123 lines
2.9 KiB
C
Raw Normal View History

/**
* \addtogroup tetris
* @{
*/
/**
* @file view.c
* @brief Public interface definitions of Tetris' graphical output routines.
* @author Christian Kroll
*/
#ifndef TETRIS_VIEW_H_
#define TETRIS_VIEW_H_
2010-08-24 23:00:40 +00:00
#include <stdint.h>
2010-08-28 15:13:35 +00:00
#include "bearing.h"
2010-08-22 03:07:46 +00:00
#include "bucket.h"
2010-08-28 15:13:35 +00:00
#include "variants.h"
/*********
* types *
*********/
/** presentation modes */
enum tetris_view_mode_e
{
TETRIS_VIMO_PAUSED,
TETRIS_VIMO_RUNNING
2011-02-25 04:31:34 +00:00
};
#ifdef NDEBUG
typedef uint8_t tetris_view_mode_t;
#else
typedef enum tetris_view_mode_e tetris_view_mode_t;
2011-02-25 04:31:34 +00:00
#endif
/** data structure that drives the view module */
typedef struct tetris_view_s
{
2010-08-24 23:00:40 +00:00
tetris_variant_t const *pVariantMethods; /** variant function pointers */
2010-08-22 03:07:46 +00:00
void *pVariant; /** associated variant object */
2010-08-24 23:00:40 +00:00
tetris_bucket_t *pBucket; /** associated bucket */
2010-08-22 03:07:46 +00:00
tetris_view_mode_t modeCurrent; /** current presentation mode */
tetris_view_mode_t modeOld; /** old presentation mode */
uint8_t nOldLevel; /** for detecting level changes */
tetris_bearing_t nBearing; /** bearing of the bucket */
}
tetris_view_t;
/*****************************
* construction/destruction *
*****************************/
/**
* constructs a view for André's borg
* @param pVarMethods associated variant method pointers
* @param pVariantData pointer to variant data object which should be observed
2010-08-22 03:07:46 +00:00
* @param pBucket pointer to bucket which should be observed
* @return pointer to a newly created view
*/
2010-08-24 23:00:40 +00:00
tetris_view_t *tetris_view_construct(tetris_variant_t const *const pVarMethods,
void *pVariantData,
2010-08-22 03:07:46 +00:00
tetris_bucket_t *pBucket);
/**
* destructs a view
* @param pView: pointer to the view to be destructed
*/
2011-02-06 22:56:26 +00:00
inline static void tetris_view_destruct(tetris_view_t *pView)
{
assert(pView != NULL);
free(pView);
}
/***************************
* view related functions *
***************************/
/**
* destructs a view
2010-08-22 03:07:46 +00:00
* @param w pointer to an int8_t to store the bucket width
* @param h pointer to an int8_t to store the bucket height
*/
void tetris_view_getDimensions(int8_t *w,
int8_t *h);
/**
* sets the view mode (pause or running)
* @param pV pointer to the view whose mode should be set
* @param vm see definition of tetris_view_mode_t
*/
inline static void tetris_view_setViewMode(tetris_view_t *const pV,
tetris_view_mode_t const vm)
{
pV->modeOld = pV->modeCurrent;
pV->modeCurrent = vm;
}
/**
* informs a view about changes in the game
* @param pV pointer to the view which should be updated
*/
void tetris_view_update(tetris_view_t *pV);
/**
* shows results after game
* @param pV pointer to the view which should show the results
*/
void tetris_view_showResults(tetris_view_t *pV);
#endif /*TETRIS_VIEW_H_*/
/*@}*/