#ifndef __breakout_h__ #define __breakout_h__ #include #include #include #include #include #include #include #include #include "vector.h" // Enums typedef enum controlModeEnum {KeyboardControl = 0, MouseControl = 1, Automatic = 2} ControlMode; // End Enums // Structs typedef struct ballStruct { Vector Location, Momentum; SDL_Rect TargetRect; double Size, Rotation, RotationValue; int TextureIndex; double Speed; } Ball; // Objekt für die Eigenschaften des Balls typedef struct paddleStruct { SDL_Rect TargetRect; int TextureIndex; int Speed; double SteeringAngle; ControlMode Mode; } Paddle; // Objekt für die Eigenschaften des Paddles typedef struct blockStruct { SDL_Rect TargetRect; int TextureIndex, HP, DestYValue; } Block; // Objekt für die Eigenschaften des Paddles typedef struct sceneryStruct { Ball ball; Paddle paddle; Block * blocks; int BlockCount, Lives, StartCountdown, Frames, Score, DestroyedBlocks, TopLeftBlockColor, XBlocks, YBlocks; bool IsPaused, IsGameOver; } Scenery; // Objekt für die Objekte und Eigenschaften einer Szenerie // End Structs // Prototypes void BREAKOUT_INITIALIZE(SDL_Renderer * renderer); void BREAKOUT_StartMusic(); void BREAKOUT_PauseMusic(); void BREAKOUT_TogglePause(Scenery * scenery); void BREAKOUT_KeyPressed(Scenery * scenery, SDL_KeyboardEvent * b); Scenery BREAKOUT_CreateDefault(); void BREAKOUT_IncreaseScoreBy(Scenery * scenery, int scoreInc); void TEXTURE_RenderCenteredSpriteSheet(SDL_Renderer * renderer, SDL_Texture * texture, SDL_Rect * srcRect, float Scale); void TEXTURE_RenderCentered(SDL_Renderer * renderer, SDL_Texture * texture, float Scale); void BREAKOUT_PushNewRow(Scenery * scenery); void BREAKOUT_Update(Scenery * scenery, const Uint8 * keystate); void BREAKOUT_Draw(Scenery * scenery, SDL_Renderer * renderer); void BREAKOUT_DrawLivesHUD(SDL_Renderer * renderer, Scenery * scenery); void BREAKOUT_DEINITIALIZE(); void BREAKOUT_DestroyObject(Scenery * scenery); void BALL_Initialize(SDL_Renderer * renderer); Ball BALL_CreateDefault(); void BALL_ResetPosition(Ball * obj); void BALL_DrawTexture(SDL_Renderer * renderer, SDL_Rect * dstRect, int index); void BALL_Draw(SDL_Renderer * renderer, Ball * obj); bool BALL_CollideWithRect(Ball * obj, SDL_Rect * rect); bool RECT_Collide(SDL_Rect * rect1, SDL_Rect * rect2); void BALL_SteerMomentum(Ball * obj, Paddle * paddle); void RECT_SetTargetPos(SDL_Rect * rect, Vector * Location); SDL_Point BALL_GetCenter(Ball * obj); void BALL_CollideWithBorders(Ball * obj); void BALL_MoveAwayFromBoundaries(Ball * obj); bool BALL_CollideWithPaddle(Ball * obj, Paddle * paddle); void BALL_AdaptSpeedGradient(Ball * obj, int FrameCount); void BALL_Update(Ball * obj, Scenery * scenery); void BALL_DestroyObject(Ball * obj); void BALL_Deinitialize(); void PADDLE_Initialize(SDL_Renderer * renderer); Paddle PADDLE_CreateDefault(); void PADDLE_ResetPosition(Paddle * obj); void PADDLE_DrawTexture(SDL_Renderer * renderer, SDL_Rect * dstRect, int index); void PADDLE_Draw(SDL_Renderer * renderer, Paddle * obj); bool KeyPressed(const Uint8 * keystate, Uint8 * keyArray); void INT_Constrain(int * variable, int min, int max); void DOUBLE_Constrain(double * variable, double min, double max); void PADDLE_MoveSmooth(Paddle * obj); void PADDLE_MoveAuto(Scenery * scenery); void PADDLE_AdaptSpeedGradient(Paddle * obj, int FrameCount); void PADDLE_Update(Paddle * obj, Scenery * scenery, const Uint8 * keystate); void PADDLE_DestroyObject(Paddle * obj); void PADDLE_Deinitialize(); void BLOCK_Initialize(SDL_Renderer * renderer); Block BLOCK_CreateDefault(); void BLOCK_DrawTexture(SDL_Renderer * renderer, SDL_Rect * dstRect, int index); void BLOCK_Draw(SDL_Renderer * renderer, Block * obj); void BLOCK_DealDamage(Block * obj, int dmg); void BLOCK_MoveSmooth(Block * obj); void BLOCK_Update(Block * obj); void BLOCK_DestroyObject(Block * obj); void BLOCK_Deinitialize(); // End Prototypes #endif // __breakout_h__