Commit 9ab505fa authored by ewen.madec's avatar ewen.madec

dice rolling animation

parent a95aa518
......@@ -55,12 +55,12 @@ void Graphic_RecrutementPhase(Player * player, int screenWidth, int screenHeight
}
void Graphic_AttackPhase(Player * player, int screenWidth, int screenHeight, Font font){
Rectangle rec = {screenWidth-300, 100 , 300, 400};
Rectangle rec = {screenWidth-300, 100 , 300, 450};
DrawRectangleLinesEx(rec, 10, player->color);
DrawTextEx(font, "Attack Phase",(Vector2){screenWidth-265, 120}, 23.0, 3.0, player->color);
DrawTextRec(font, " FIRST click on the node you want to attack from", (Rectangle){screenWidth-285, 175, 270, 100}, 20.0, 3.0, true, player->color);
DrawTextRec(font, " THEN click on one of neighbouring node you want to attack", (Rectangle){screenWidth-285, 295, 270, 100}, 20.0, 3.0, true, player->color);
DrawTextRec(font, " click Next Turn once finished", (Rectangle){screenWidth-285, 415, 270, 100}, 20.0, 3.0, true, player->color);
DrawTextRec(font, " click Next Turn once finished all your attacks", (Rectangle){screenWidth-285, 415, 270, 100}, 20.0, 3.0, true, player->color);
}
void Graphic_WhoseTurnIsIt(Player * player, int screenWidth, int screenHeight, Font font){
......@@ -180,6 +180,7 @@ int Graphic_ChooseNumberOfAttackers(Player * attacker, Player * defender, Node *
char * str_i = malloc(sizeof(int));
sprintf(str_i, "%d", i);
DrawTextEx(font, str_i, (Vector2){nbAttackerRectangle[i].x + 55, nbAttackerRectangle[i].y + 5 }, 70.0, 3.0, WHITE);
free(str_i);
if(CheckCollisionPointRec(mousePosition, nbAttackerRectangle[i])){
DrawRectangleLinesEx(nbAttackerRectangle[i], 5, GREEN);
}
......@@ -204,7 +205,7 @@ int Graphic_ChooseNumberOfAttackers(Player * attacker, Player * defender, Node *
//--------------------------------------------------------------------------------------
}
void diceRolling(Player * attacker, Player * defender, Node * originNode, Node * targetNode, int nbOfAttackers, Font font)
void diceRolling(Player * attacker, Player * defender, Node * originNode, Node * targetNode, int nbOfAttackers, int * listOfDices, Font font)
{
printf("dice rolling begin\n");
......@@ -219,6 +220,8 @@ void diceRolling(Player * attacker, Player * defender, Node * originNode, Node *
//Texture2D diceTexture = LoadTexture("diceRolling.png"); // Texture loading
Texture2D diceTexture = LoadTextureFromImage(texture);
int defendersCount = targetNode->soldiers >= 3? 2:1;
int attackersCount = nbOfAttackers;
Rectangle frameRec = { 0.0f, 0.0f, (float)diceTexture.width, (float)diceTexture.height/9 };
int currentFrame = 0;
......@@ -226,7 +229,8 @@ void diceRolling(Player * attacker, Player * defender, Node * originNode, Node *
int framesCounter = 0;
int framesSpeed = 7;
int frameExit = 0; // Number of spritesheet frames shown by second
bool endAnimation = false;
bool endAnimationDice = false;
bool endDisplayResult = false;
SetTargetFPS(60); // Set our game to run at 60 frames-per-second
//--------------------------------------------------------------------------------------
......@@ -238,21 +242,23 @@ void diceRolling(Player * attacker, Player * defender, Node * originNode, Node *
Vector2 * positionDiceAttacker = malloc(20 * sizeof(Vector2));
Vector2 * positionDiceDefender = malloc(20 * sizeof(Vector2));
for(int i = 0 ; i < nbOfAttackers ; i++){
positionDiceAttacker[i] = (Vector2){200 + (i)*250, screenHeight - 500};
positionDiceAttacker[i] = (Vector2){200 + (i)*150, screenHeight - 500};
}
for(int i = 0 ; i < targetNode->soldiers + targetNode->soldiersToAdd ; i++){
positionDiceDefender[i] = (Vector2){1000 + (i)*250, screenHeight - 500};
for(int i = 0 ; i < defendersCount + 1 ; i++){
positionDiceDefender[i] = (Vector2){1000 + (i)*150, screenHeight - 500};
printf("position dice defender %d x : %f \n", i , positionDiceDefender[i].x);
printf("position dice defender %d y : %f \n", i , positionDiceDefender[i].y);
}
// Main game loop
while (!endAnimation ) // Detect window close button or ESC key
while (!endAnimationDice ) // Detect window close button or ESC key
{
// Update
//----------------------------------------------------------------------------------
framesCounter++;
//frameExit++;
//printf("%d frame before Exit \n", frameExit);
if(frameExit == 200) endAnimation = true;
frameExit++;
//printf("%d frame before Exit0 \n", frameExit);
if(frameExit == 200) endAnimationDice = true;
if (framesCounter >= (60/framesSpeed))
{
framesCounter = 0;
......@@ -277,7 +283,7 @@ void diceRolling(Player * attacker, Player * defender, Node * originNode, Node *
for(int i = 0 ; i < nbOfAttackers ; i++){
DrawTextureRec(diceTexture, frameRec, positionDiceAttacker[i], WHITE);
}
for(int i = 0 ; i < targetNode->soldiers + targetNode->soldiersToAdd ; i++){
for(int i = 0 ; i < defendersCount ; i++){
DrawTextureRec(diceTexture, frameRec, positionDiceDefender[i], WHITE);
}
......@@ -285,11 +291,153 @@ void diceRolling(Player * attacker, Player * defender, Node * originNode, Node *
//----------------------------------------------------------------------------------
}
currentFrame = 0;
framesCounter = 0;
framesSpeed = 7;
endDisplayResult = false;
while (!endDisplayResult ) // Detect window close button or ESC key
{
// Update
//----------------------------------------------------------------------------------
framesCounter++;
frameExit++;
//printf("%d frame before Exit1 \n", frameExit);
if(frameExit == 450) endDisplayResult = true;
if (framesCounter >= (60/framesSpeed))
{
framesCounter = 0;
currentFrame++;
if (currentFrame > 8) currentFrame = 0;
frameRec.y = (float)currentFrame*(float)diceTexture.height/9;
}
//----------------------------------------------------------------------------------
// Draw
//----------------------------------------------------------------------------------
BeginDrawing();
ClearBackground(RAYWHITE);
DrawTextEx(font, whoseTurnToAttack, (Vector2){250 , 200} , 30.0, 3.0, attacker->color);
DrawTextEx(font, whoseTurnToDefend, (Vector2){screenWidth-700, 200}, 30.0, 3.0, defender->color);
DrawTextEx(font, " attacker", (Vector2){250 + MeasureTextEx(font, "Player X ", 30.0, 3.0).x , 210} , 15.0, 3.0, attacker->color);
DrawTextEx(font, " defender", (Vector2){screenWidth-700 + MeasureTextEx(font, "Player X ", 30.0, 3.0).x, 210}, 15.0, 3.0, defender->color);
for(int i = 0 ; i < nbOfAttackers ; i++){
switch (listOfDices[i])
{
case 1:
frameRec.y = 9*(float)diceTexture.height/9;
DrawTextureRec(diceTexture, frameRec, positionDiceAttacker[i], WHITE);
DrawTextEx(font, "1", (Vector2){positionDiceAttacker[i].x + 30, positionDiceAttacker[i].y+100}, 50.0, 3.0, BLACK);
break;
case 2:
frameRec.y = 1*(float)diceTexture.height/9;
DrawTextureRec(diceTexture, frameRec, positionDiceAttacker[i], WHITE);
DrawTextEx(font, "2", (Vector2){positionDiceAttacker[i].x + 30, positionDiceAttacker[i].y+100}, 50.0, 3.0, BLACK);
break;
case 3:
frameRec.y = 2*(float)diceTexture.height/9;
DrawTextureRec(diceTexture, frameRec, positionDiceAttacker[i], WHITE);
DrawTextEx(font, "3", (Vector2){positionDiceAttacker[i].x + 30, positionDiceAttacker[i].y+100}, 50.0, 3.0, BLACK);
break;
case 4:
frameRec.y = 3*(float)diceTexture.height/9;
DrawTextureRec(diceTexture, frameRec, positionDiceAttacker[i], WHITE);
DrawTextEx(font, "4", (Vector2){positionDiceAttacker[i].x + 30, positionDiceAttacker[i].y+100}, 50.0, 3.0, BLACK);
break;
case 5:
frameRec.y = 4*(float)diceTexture.height/9;
DrawTextureRec(diceTexture, frameRec, positionDiceAttacker[i], WHITE);
DrawTextEx(font, "5", (Vector2){positionDiceAttacker[i].x + 30, positionDiceAttacker[i].y+100}, 50.0, 3.0, BLACK);
break;
case 6:
frameRec.y = 5*(float)diceTexture.height/9;
DrawTextureRec(diceTexture, frameRec, positionDiceAttacker[i], WHITE);
DrawTextEx(font, "6", (Vector2){positionDiceAttacker[i].x + 30, positionDiceAttacker[i].y+100}, 50.0, 3.0, BLACK);
break;
default:
break;
}
//DrawTextureRec(diceTexture, frameRec, positionDiceAttacker[i], WHITE);
}
for(int i = nbOfAttackers ; i < nbOfAttackers + defendersCount +1; i++){
switch (listOfDices[i])
{
case 1:
frameRec.y = 9*(float)diceTexture.height/9;
DrawTextureRec(diceTexture, frameRec, positionDiceDefender[i-nbOfAttackers], WHITE);
DrawTextEx(font, "1", (Vector2){positionDiceDefender[i-nbOfAttackers].x + 30, positionDiceDefender[i-nbOfAttackers].y + 100}, 50.0, 3.0, BLACK);
break;
case 2:
frameRec.y = 1*(float)diceTexture.height/9;
DrawTextureRec(diceTexture, frameRec, positionDiceDefender[i-nbOfAttackers], WHITE);
DrawTextEx(font, "2", (Vector2){positionDiceDefender[i-nbOfAttackers].x + 30, positionDiceDefender[i-nbOfAttackers].y + 100}, 50.0, 3.0, BLACK);
break;
case 3:
frameRec.y = 2*(float)diceTexture.height/9;
DrawTextureRec(diceTexture, frameRec, positionDiceDefender[i-nbOfAttackers], WHITE);
DrawTextEx(font, "3", (Vector2){positionDiceDefender[i-nbOfAttackers].x + 30, positionDiceDefender[i-nbOfAttackers].y + 100}, 50.0, 3.0, BLACK);
break;
case 4:
frameRec.y = 3*(float)diceTexture.height/9;
DrawTextureRec(diceTexture, frameRec, positionDiceDefender[i-nbOfAttackers], WHITE);
DrawTextEx(font, "4", (Vector2){positionDiceDefender[i-nbOfAttackers].x + 30, positionDiceDefender[i-nbOfAttackers].y + 100}, 50.0, 3.0, BLACK);
break;
case 5:
frameRec.y = 4*(float)diceTexture.height/9;
DrawTextureRec(diceTexture, frameRec, positionDiceDefender[i-nbOfAttackers], WHITE);
DrawTextEx(font, "5", (Vector2){positionDiceDefender[i-nbOfAttackers].x + 30, positionDiceDefender[i-nbOfAttackers].y+100}, 50.0, 3.0, BLACK);
break;
case 6:
frameRec.y = 5*(float)diceTexture.height/9;
DrawTextureRec(diceTexture, frameRec, positionDiceDefender[i-nbOfAttackers], WHITE);
DrawTextEx(font, "6", (Vector2){positionDiceDefender[i-nbOfAttackers].x + 30, positionDiceDefender[i-nbOfAttackers].y + 100}, 50.0, 3.0, BLACK);
break;
default:
break;
}
}
int remainingAttackers = attackersCount;
for(int index = 0; index < fmin(defendersCount, attackersCount); index++){
if(listOfDices[index] > listOfDices[index + attackersCount]){
//targetNode->soldiers--;
//printf("Defenders lose a soldier\n");
DrawTextEx(font, "Defenders lose a soldier", (Vector2){screenWidth/2 - MeasureTextEx(font, "Defenders lose a soldier",50.0, 3.0 ).x/2 , 600}, 50.0, 3.0, BLACK);
}else{
//originNode->soldiers--;
//remainingAttackers--;
//printf("Attackers lose a soldier\n");
DrawTextEx(font, "Attackers lose a soldier", (Vector2){screenWidth/2 - MeasureTextEx(font, "Attackers lose a soldier",50.0, 3.0 ).x/2 , 600}, 50.0, 3.0, BLACK);
}
}
if(targetNode->soldiers <= 0){
//printf("Node has been conquered\n");
DrawTextEx(font, "Node has been conquered", (Vector2){screenWidth/2 - MeasureTextEx(font, "Node has been conquered",50.0, 3.0 ).x/2 , 700}, 50.0, 3.0, BLACK);
//Player_remove_Node(defender, targetNode);
//Player_add_Node(self, targetNode);
//targetNode->soldiers = attackersCount;
//originNode->soldiers -= attackersCount;
}
EndDrawing();
//----------------------------------------------------------------------------------
}
// De-Initialization
//--------------------------------------------------------------------------------------
// Texture unloading
//CloseWindow();
free(whoseTurnToAttack);
free(whoseTurnToDefend);
free(positionDiceAttacker);
free(positionDiceDefender); // Close window and OpenGL context
UnloadTexture(diceTexture);
......
......@@ -19,7 +19,7 @@ void Graphic_MouseHoverNodeChooseAttacker(Player * player, Vector2 mousePosition
void Graphic_MouseHoverNodeChooseTarget(Node * originNode, Vector2 mousePosition, Panel * panel);
void Graphic_RectuementBeginTurn(int screenWidth, int screenHeight, Font font);
int Graphic_ChooseNumberOfAttackers(Player * attacker, Player * defender, Node * originNode, Node * targetNode, Font font);
void diceRolling(Player * attacker, Player * defender, Node * originNode, Node * targetNode, int nbOfAttackers, Font font);
void diceRolling(Player * attacker, Player * defender, Node * originNode, Node * targetNode, int nbOfAttackers, int * listOfDices, Font font);
......
......@@ -159,8 +159,10 @@ void game_update(NetWorld * world, Player * players, Font font, Panel * panel)
else if(Node_are_connected(originNode, currentNode) && (originNode->soldiers > 1) && originNode->canAttack){
printf("Engagine attack on target Node\n");
int nbOfAttackers = Graphic_ChooseNumberOfAttackers(currentPlayer, &(players[nodePlayerID]), originNode, currentNode, font);
Player_attack_Node(currentPlayer, &(players[nodePlayerID]), originNode, currentNode, nbOfAttackers);
//diceRolling(currentPlayer, &(players[nodePlayerID]), originNode, currentNode, nbOfAttackers ,font);
int * listOfDices = Player_attack_Node(currentPlayer, &(players[nodePlayerID]), originNode, currentNode, nbOfAttackers);
int defendersCount = currentNode->soldiers >= 3? 2:1;
diceRolling(currentPlayer, &(players[nodePlayerID]), originNode, currentNode, nbOfAttackers , listOfDices ,font);
free(listOfDices);
}else{
printf("Failed to attack target : Origin has already attacked, nodes aren't connected or origin node has too few soldiers\n");
......
......@@ -155,7 +155,8 @@ void Player_confirm_recrutement(Player * self){
};
void Player_attack_Node(Player * self, Player * defender, Node * originNode, Node * targetNode, int numberOfAttackers){
int * Player_attack_Node(Player * self, Player * defender, Node * originNode, Node * targetNode, int numberOfAttackers){
int * listOfDices = malloc(20*sizeof(int));
int attackersCount = numberOfAttackers;
int defendersCount = targetNode->soldiers >= 3? 2:1;
int attDiceRolls[attackersCount];
......@@ -190,6 +191,12 @@ void Player_attack_Node(Player * self, Player * defender, Node * originNode, Nod
}
}
}
for(int index = 0; index < attackersCount; index++){
listOfDices[index] = attDiceRolls[index];
}
for(int index = 0; index < defendersCount; index++){
listOfDices[index + attackersCount ] = defDiceRolls[index];
}
printf("Attackers dice rolls :\t");
for(int index = 0; index < attackersCount; index++){
......@@ -224,4 +231,9 @@ void Player_attack_Node(Player * self, Player * defender, Node * originNode, Nod
}
originNode->canAttack = false;
return listOfDices;
}
void Delete_Player_attack_Node(int * listOfDices){
free(listOfDices);
}
......@@ -87,7 +87,7 @@ void Player_select_Node(Player * self, Vector2 mousePos);
void Player_unselect_Node(Player * self, Vector2 mousePos);
void Player_attack_Node(Player * self, Player * defender, Node * originNode, Node * targetNode, int numberOfAttackers);
int * Player_attack_Node(Player * self, Player * defender, Node * originNode, Node * targetNode, int numberOfAttackers);
void Player_confirm_recrutement(Player * self);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment