generated from sigonasr2/CPlusPlusProjectTemplate
Add combo system and correct landtime values
Co-authored-by: sigonasr2 <sigonasr2@gmail.com>
This commit is contained in:
parent
c3dc478839
commit
fbfad3ab01
@ -11,6 +11,7 @@ class BlockClump{
|
|||||||
float vspeed=0;
|
float vspeed=0;
|
||||||
float landTime=0.f;
|
float landTime=0.f;
|
||||||
float launchTime=0.f;
|
float launchTime=0.f;
|
||||||
|
int combo=0;
|
||||||
float y=0;
|
float y=0;
|
||||||
BlockClump();
|
BlockClump();
|
||||||
std::vector<Block>&getBlocks();
|
std::vector<Block>&getBlocks();
|
||||||
|
@ -5,8 +5,8 @@ extern Meteos*game;
|
|||||||
Board::Board()
|
Board::Board()
|
||||||
:colorHandler({}){}
|
:colorHandler({}){}
|
||||||
|
|
||||||
Board::Board(vi2d boardSize,float gravity,float maxGravity,float launchSpd,float launchTime,float landTime,float spawnRate,std::array<int,10> colorRates,Renderable&tileset)
|
Board::Board(vi2d boardSize,float gravity,float maxGravity,float comboGravity,float comboMaxGravity,float launchSpd,float launchTime,float landTime,float spawnRate,std::array<int,10> colorRates,Renderable&tileset)
|
||||||
:boardSize(boardSize),gravity(gravity),maxGravity(maxGravity),launchSpd(launchSpd),launchTime(launchTime),landTime(landTime),spawnRate(spawnRate),colorHandler(colorRates),tileset(tileset.Decal()){
|
:boardSize(boardSize),gravity(gravity),maxGravity(maxGravity),comboGravity(comboGravity),comboMaxGravity(comboMaxGravity),launchSpd(launchSpd),launchTime(launchTime),landTime(landTime),spawnRate(spawnRate),colorHandler(colorRates),tileset(tileset.Decal()){
|
||||||
drawOffset={(float)game->ScreenWidth()/2-boardSize.x/2*12,(float)game->ScreenHeight()/2-boardSize.y/2*12};
|
drawOffset={(float)game->ScreenWidth()/2-boardSize.x/2*12,(float)game->ScreenHeight()/2-boardSize.y/2*12};
|
||||||
yBottom=(boardSize.y-1)*12;
|
yBottom=(boardSize.y-1)*12;
|
||||||
for (int i=0;i<boardSize.x;i++) {
|
for (int i=0;i<boardSize.x;i++) {
|
||||||
|
4
Board.h
4
Board.h
@ -45,13 +45,15 @@ class Board{
|
|||||||
vi2d boardSize;
|
vi2d boardSize;
|
||||||
float gravity;
|
float gravity;
|
||||||
float maxGravity;
|
float maxGravity;
|
||||||
|
float comboGravity;
|
||||||
|
float comboMaxGravity;
|
||||||
float spawnRate;
|
float spawnRate;
|
||||||
float launchSpd;
|
float launchSpd;
|
||||||
float launchTime; //How much time a stack rises before beginning descent.
|
float launchTime; //How much time a stack rises before beginning descent.
|
||||||
float landTime;
|
float landTime;
|
||||||
SelectedBlockData selectedBlock;
|
SelectedBlockData selectedBlock;
|
||||||
Board();
|
Board();
|
||||||
Board(vi2d boardSize,float gravity,float maxGravity,float launchSpd,float launchTime,float landTime,float spawnRate,std::array<int,10> colorRates,Renderable&tileset);
|
Board(vi2d boardSize,float gravity,float maxGravity,float launchedGravity,float launchedMaxGravity,float launchSpd,float launchTime,float landTime,float spawnRate,std::array<int,10> colorRates,Renderable&tileset);
|
||||||
void spawnBlock(int col);
|
void spawnBlock(int col);
|
||||||
void addClump(BlockClump&c);
|
void addClump(BlockClump&c);
|
||||||
std::vector<Block>&getBlocks(int col);
|
std::vector<Block>&getBlocks(int col);
|
||||||
|
Binary file not shown.
36
main.cpp
36
main.cpp
@ -19,11 +19,11 @@ bool Meteos::OnUserCreate()
|
|||||||
SPRITES["blocks_test.png"].Load("assets/blocks_test.png");
|
SPRITES["blocks_test.png"].Load("assets/blocks_test.png");
|
||||||
|
|
||||||
std::random_device rd; //Will be used to obtain a seed for the random number engine
|
std::random_device rd; //Will be used to obtain a seed for the random number engine
|
||||||
gen=std::mt19937(0); //Standard mersenne_twister_engine seeded with rd()
|
gen=std::mt19937(rd()); //Standard mersenne_twister_engine seeded with rd()
|
||||||
randBlockPos=std::uniform_int_distribution<>(0, 9);
|
randBlockPos=std::uniform_int_distribution<>(0, 9);
|
||||||
coinFlip=std::uniform_int_distribution<>(0, 1);
|
coinFlip=std::uniform_int_distribution<>(0, 1);
|
||||||
|
|
||||||
gameBoard=Board({10,14},0.04f,1.2f,-1.f,1.7f,2.0f,1.0f,{3,3,1,2,3,0,0,0,0,0},SPRITES["blocks_test.png"]);
|
gameBoard=Board({10,14},0.04f,1.2f,0.04f,0.4f,-1.f,1.7f,2.0f,1.0f,{3,3,1,2,3,0,0,0,0,0},SPRITES["blocks_test.png"]);
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@ -58,12 +58,18 @@ void Meteos::updateGame(float fElapsedTime){
|
|||||||
BlockClump&c=gameBoard.getBlockClumps()[i];
|
BlockClump&c=gameBoard.getBlockClumps()[i];
|
||||||
if (c.launchTime>0) {
|
if (c.launchTime>0) {
|
||||||
c.launchTime-=fElapsedTime;
|
c.launchTime-=fElapsedTime;
|
||||||
|
} else
|
||||||
|
if (c.combo>0) {
|
||||||
|
c.vspeed+=gameBoard.comboGravity;
|
||||||
|
if (c.vspeed>gameBoard.comboMaxGravity){
|
||||||
|
c.vspeed=gameBoard.comboMaxGravity;
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
c.vspeed+=gameBoard.gravity;
|
c.vspeed+=gameBoard.gravity;
|
||||||
}
|
|
||||||
if (c.vspeed>gameBoard.maxGravity){
|
if (c.vspeed>gameBoard.maxGravity){
|
||||||
c.vspeed=gameBoard.maxGravity;
|
c.vspeed=gameBoard.maxGravity;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
for (int j=gameBoard.getBlockClumps().size()-1;j>=0;j--) {
|
for (int j=gameBoard.getBlockClumps().size()-1;j>=0;j--) {
|
||||||
if (i==j) continue;
|
if (i==j) continue;
|
||||||
BlockClump&c2=gameBoard.getBlockClumps()[j];
|
BlockClump&c2=gameBoard.getBlockClumps()[j];
|
||||||
@ -131,13 +137,9 @@ void Meteos::updateGame(float fElapsedTime){
|
|||||||
if (overlappingBlocks){
|
if (overlappingBlocks){
|
||||||
std::cout<<"Block b3 "<<b3.pos<<"!"<<std::endl;
|
std::cout<<"Block b3 "<<b3.pos<<"!"<<std::endl;
|
||||||
}
|
}
|
||||||
if (c.vspeed>0) {
|
c.vspeed=std::min(c.vspeed,c2.vspeed);
|
||||||
c.vspeed/=4;
|
c.combo=std::max(c.combo,c2.combo);
|
||||||
}
|
c.landTime=std::max(c.landTime,c2.landTime);
|
||||||
if (c2.vspeed>0) {
|
|
||||||
c2.vspeed/=4;
|
|
||||||
}
|
|
||||||
c.vspeed=c.vspeed*influence+c2.vspeed*(1-influence);
|
|
||||||
c.sortBlocks();
|
c.sortBlocks();
|
||||||
if (i>=j){
|
if (i>=j){
|
||||||
i--;
|
i--;
|
||||||
@ -281,8 +283,12 @@ void Meteos::updateGame(float fElapsedTime){
|
|||||||
for (int i:matchedBlockIDs) {
|
for (int i:matchedBlockIDs) {
|
||||||
Block&b=c.getBlocks()[i];
|
Block&b=c.getBlocks()[i];
|
||||||
b.col=BlockColor::LAUNCHED;
|
b.col=BlockColor::LAUNCHED;
|
||||||
|
}
|
||||||
|
if (matchedBlockIDs.size()>0){
|
||||||
c.vspeed=gameBoard.launchSpd;
|
c.vspeed=gameBoard.launchSpd;
|
||||||
c.launchTime=gameBoard.launchTime;
|
c.launchTime=gameBoard.launchTime;
|
||||||
|
c.combo++;
|
||||||
|
std::cout<<"Combo value is "<<c.combo<<std::endl;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
std::vector<BlockMatchingInfo>matchedBlockIDs; //Col followed by index
|
std::vector<BlockMatchingInfo>matchedBlockIDs; //Col followed by index
|
||||||
@ -491,10 +497,13 @@ void Meteos::updateGame(float fElapsedTime){
|
|||||||
for (BlockMatchingInfo&info:matchedBlockIDs) {
|
for (BlockMatchingInfo&info:matchedBlockIDs) {
|
||||||
if (info.c!=-1){
|
if (info.c!=-1){
|
||||||
if (gameBoard.getBlockClumps()[info.c].getBlocks().size()>0){
|
if (gameBoard.getBlockClumps()[info.c].getBlocks().size()>0){
|
||||||
|
if (c.combo<gameBoard.getBlockClumps()[info.c].combo){
|
||||||
|
c.combo=gameBoard.getBlockClumps()[info.c].combo;
|
||||||
|
}
|
||||||
for (int i=gameBoard.getBlockClumps()[info.c].getBlocks().size()-1;i>=0;i--) {
|
for (int i=gameBoard.getBlockClumps()[info.c].getBlocks().size()-1;i>=0;i--) {
|
||||||
Block&b2=gameBoard.getBlockClumps()[info.c].getBlocks()[i];
|
Block&b2=gameBoard.getBlockClumps()[info.c].getBlocks()[i];
|
||||||
if ((int)fmod(std::abs((int)gameBoard.getBlockClumps()[info.c].getBlockPosition(b2).y-(int)baseBlockPos),12)!=0){
|
if ((int)fmod(std::abs(std::round(gameBoard.getBlockClumps()[info.c].getBlockPosition(b2).y)-std::round(baseBlockPos)),12)!=0){
|
||||||
std::cout<<"Difference is not equal to 0! Value:"<<(int)fmod(std::abs((int)gameBoard.getBlockClumps()[info.c].getBlockPosition(b2).y-(int)baseBlockPos),12)<<" "<<gameBoard.getBlockClumps()[info.c].getBlockPosition(b2).y<<"//"<<baseBlockPos<<std::endl;
|
std::cout<<"Difference is not equal to 0! Value:"<<(int)fmod(std::abs(std::round(gameBoard.getBlockClumps()[info.c].getBlockPosition(b2).y)-std::round(baseBlockPos)),12)<<" "<<gameBoard.getBlockClumps()[info.c].getBlockPosition(b2).y<<"//"<<baseBlockPos<<std::endl;
|
||||||
assert(false);
|
assert(false);
|
||||||
}
|
}
|
||||||
c.addBlock(b2.pos.x/12,((int)gameBoard.getBlockClumps()[info.c].getBlockPosition(b2).y-(int)baseBlockPos)/12,b2.col);
|
c.addBlock(b2.pos.x/12,((int)gameBoard.getBlockClumps()[info.c].getBlockPosition(b2).y-(int)baseBlockPos)/12,b2.col);
|
||||||
@ -525,6 +534,8 @@ void Meteos::updateGame(float fElapsedTime){
|
|||||||
gameBoard.addClump(c);
|
gameBoard.addClump(c);
|
||||||
gameBoard.getBlockClumps()[gameBoard.getBlockClumps().size()-1].vspeed=gameBoard.launchSpd;
|
gameBoard.getBlockClumps()[gameBoard.getBlockClumps().size()-1].vspeed=gameBoard.launchSpd;
|
||||||
gameBoard.getBlockClumps()[gameBoard.getBlockClumps().size()-1].launchTime=gameBoard.launchTime;
|
gameBoard.getBlockClumps()[gameBoard.getBlockClumps().size()-1].launchTime=gameBoard.launchTime;
|
||||||
|
gameBoard.getBlockClumps()[gameBoard.getBlockClumps().size()-1].combo++;
|
||||||
|
std::cout<<"Combo value is "<<gameBoard.getBlockClumps()[gameBoard.getBlockClumps().size()-1].combo<<std::endl;
|
||||||
}
|
}
|
||||||
for (int i=gameBoard.getBlockClumps().size()-1;i>=0;i--){ //Resolve BlockClump movements.
|
for (int i=gameBoard.getBlockClumps().size()-1;i>=0;i--){ //Resolve BlockClump movements.
|
||||||
BlockClump&c=gameBoard.getBlockClumps()[i];
|
BlockClump&c=gameBoard.getBlockClumps()[i];
|
||||||
@ -643,6 +654,7 @@ void Meteos::drawGame(float fElapsedTime,bool debugView){
|
|||||||
Block&b=c.getBlocks()[j];
|
Block&b=c.getBlocks()[j];
|
||||||
DrawPartialDecal(c.getBlockPosition(b)+gameBoard.drawOffset,gameBoard.tileset,{(float)(int)b.col*12,0},{12,12},{1,1},gameBoard.selectedBlock.col!=-1&&gameBoard.selectedBlock.ind==j&&gameBoard.selectedBlock.c==i?Pixel(GREY.r,GREY.g,GREY.b,alpha):Pixel(WHITE.r,WHITE.g,WHITE.b,alpha));
|
DrawPartialDecal(c.getBlockPosition(b)+gameBoard.drawOffset,gameBoard.tileset,{(float)(int)b.col*12,0},{12,12},{1,1},gameBoard.selectedBlock.col!=-1&&gameBoard.selectedBlock.ind==j&&gameBoard.selectedBlock.c==i?Pixel(GREY.r,GREY.g,GREY.b,alpha):Pixel(WHITE.r,WHITE.g,WHITE.b,alpha));
|
||||||
}
|
}
|
||||||
|
//DrawStringDecal({32,c.y+i%4*4},std::to_string(c.landTime),WHITE,{0.4,0.4}); //Draws land times per clump.
|
||||||
}
|
}
|
||||||
for (int i=0;i<gameBoard.boardSize.x;i++){
|
for (int i=0;i<gameBoard.boardSize.x;i++){
|
||||||
for (int y=0;y<gameBoard.getBlocks(i).size();y++){
|
for (int y=0;y<gameBoard.getBlocks(i).size();y++){
|
||||||
|
Loading…
x
Reference in New Issue
Block a user