#ifndef __LOGIC_H__
#define __LOGIC_H__

// Xonix.h : main header file for the XONIX application
//

#include "Sprites.h"


#define XSCREEN     640
#define YSCREEN     480
#define BLOCKSIZE   10

#define FULLTOP 0
#define MIDTOP  480

#define XBLOCKS (XSCREEN / BLOCKSIZE)
// Leave a 20-pixel gap at the bottom of the screen
#define YBLOCKS (YSCREEN / BLOCKSIZE - 2)

#define GRID_EMPTY      0
#define GRID_FULL       1
#define GRID_MID        2
#define GRID_FILLING    3
extern  BYTE    Grid[YBLOCKS][XBLOCKS];

#define PLAYERX 0
#define PLAYERY 970
#define PLAYERFRAMES    1

#define ENEMYX          0
#define ENEMYY          960
#define ENEMYFRAMES     8

#define TEXTX           0
#define TEXTY           980
#define TEXTCX          16
#define TEXTCY          30

// Fill any areas that have no balls in them
void FillGrid();

// Initialise a new level and the enemy sprites therein
void InitLevel();
// Create the player sprite
void InitPlayer();
// Delete the level
void DeleteLevel();
// Delete the player sprite
void DeletePlayer();

////////////////////////////////////////////////////////////////////////////////
// Game state

// Reset to the start of a new game
void ResetGame();
// Move each of the sprites as appropriate, and update the game state.
void UpdateGameState();

enum EGameState
{
    Initialising,
    Intro,
    LevelScreen,
    InGame,
    InGamePaused,
    Quitting
};

extern  EGameState  g_nGameState;

// Time that the level screen state started
extern  DWORD               g_dwLevelScreenStartTime;
// Time (in milliseconds) to display the level screen
#define LEVELSCREEN_TIME    1500

// Change to the given game state
void ChangeToGameState(EGameState nNewState);

extern  int     g_nBalls;
extern  CEnemySprite **g_spriteBalls;

extern  int     g_nLevel;
extern  int     g_nLives;
extern  int     g_nPercentFilled;

extern  BOOL    g_bHasDied;
extern  double  g_nPlayerVelocity;
extern  CPlayerSprite *g_spritePlayer;

extern  IDirectDrawSurface7 *lpImages;

#endif