// Copyright (c) 2014 Alex Diener. All rights reserved. #ifndef __PhysicsFunctions_H__ #define __PhysicsFunctions_H__ #ifdef __cplusplus extern "C" { #endif #include "watertowerclassic/LevelModel.h" #include "watertowerclassic/PlayerModel.h" #include extern Vector2i touchedBlocks[]; extern unsigned int numberOfTouchedBlocks; #define FALLING_BLOCK_UNSTEADY_FRAME_COUNT_MAX 50 bool isBlockSolid(struct LevelBlock * block, float waterLevel, unsigned int frameIndex); bool isRegularBlockSolid(struct LevelBlock * block, float waterLevel, unsigned int frameIndex); bool isSpongeBlockSolid(struct LevelBlock * block, float waterLevel); bool isPhasingBlockSolid(struct LevelBlock * block, unsigned int frameIndex); Vector2f getBlockPixelCenter(struct LevelBlock * block); rect4f getBlockPixelRect(struct LevelBlock * block); Vector2f getPowerupPixelCenter(struct LevelPowerup * powerup); rect4f getPowerupPixelRect(struct LevelPowerup * powerup); float pushBlock(LevelModel * levelModel, PlayerModel * playerModel, unsigned int frameIndex, struct LevelBlock * block, direction4 direction, float amount, bool peek); short detectCollision(LevelModel * levelModel, PlayerModel * playerModel, unsigned int frameIndex, struct LevelBlock * srcBlock, char direction, float amount, struct LevelBlock ** blockList, short blockListLength, bool useSrcCenter, bool useDestCenter); void carryBlocks(LevelModel * levelModel, PlayerModel * playerModel, unsigned int frameIndex, struct LevelBlock * srcBlock, char direction, float amount, char modifier); bool rectCollision(rect4f * rect1, rect4f * rect2, char direction); bool rectTouch(rect4f * rect1, rect4f * rect2, char direction); void leaveBlock(struct LevelBlock * block); void enterBlock(PlayerModel * playerModel, struct LevelBlock * block); enum LevelBlockType touchBlock(PlayerModel * playerModel, struct LevelBlock * block); #ifdef __cplusplus } #endif #endif