ajout d'indication de placement des cartes

This commit is contained in:
marc barbier
2020-10-28 19:24:22 +01:00
parent 1b19265d4a
commit 244c689606
5 changed files with 95 additions and 21 deletions
@@ -3,6 +3,7 @@ package com.iutlaval.myapplication.Game;
import android.content.Context; import android.content.Context;
import android.graphics.Bitmap; import android.graphics.Bitmap;
import android.graphics.BitmapFactory; import android.graphics.BitmapFactory;
import android.graphics.Color;
import android.util.Log; import android.util.Log;
import android.view.MotionEvent; import android.view.MotionEvent;
@@ -10,12 +11,17 @@ import com.iutlaval.myapplication.Game.Cards.Card;
import com.iutlaval.myapplication.Game.Decks.Deck; import com.iutlaval.myapplication.Game.Decks.Deck;
import com.iutlaval.myapplication.Game.Decks.DeckDemo; import com.iutlaval.myapplication.Game.Decks.DeckDemo;
import com.iutlaval.myapplication.GameActivity; import com.iutlaval.myapplication.GameActivity;
import com.iutlaval.myapplication.InvalidDataException;
import com.iutlaval.myapplication.R; import com.iutlaval.myapplication.R;
import com.iutlaval.myapplication.Video.Drawables.Drawable; import com.iutlaval.myapplication.Video.Drawables.Drawable;
import com.iutlaval.myapplication.Video.Drawables.DrawableBitmap; import com.iutlaval.myapplication.Video.Drawables.DrawableBitmap;
import com.iutlaval.myapplication.Video.Drawables.DrawableCard; import com.iutlaval.myapplication.Video.Drawables.DrawableCard;
import com.iutlaval.myapplication.Video.Drawables.DrawableRectangle;
import com.iutlaval.myapplication.Video.Rectangle;
import com.iutlaval.myapplication.Video.Renderer; import com.iutlaval.myapplication.Video.Renderer;
import java.util.List;
public class GameLogicThread extends Thread{ public class GameLogicThread extends Thread{
private Context cont; private Context cont;
@@ -27,9 +33,11 @@ public class GameLogicThread extends Thread{
private Deck localPlayerDeck; private Deck localPlayerDeck;
private Hand localPlayerHand; private Hand localPlayerHand;
private Board board; private Board board;
private PlayableZonesHandler playableZonesHandler;
public GameLogicThread(GameActivity gameActivity, Renderer renderer) public GameLogicThread(GameActivity gameActivity, Renderer renderer)
{ {
Log.e("RESOLUTION:",""+GameActivity.screenWidth+"x"+GameActivity.screenHeight);
ready=false; ready=false;
this.cont = gameActivity; this.cont = gameActivity;
this.renderer = renderer; this.renderer = renderer;
@@ -40,6 +48,7 @@ public class GameLogicThread extends Thread{
localPlayerHand.fillHand(localPlayerDeck); localPlayerHand.fillHand(localPlayerDeck);
this.gameActivity=gameActivity; this.gameActivity=gameActivity;
board=new Board(); board=new Board();
playableZonesHandler = new PlayableZonesHandler(board);
GameActivity.setGameEngine(this); GameActivity.setGameEngine(this);
} }
@@ -49,11 +58,11 @@ public class GameLogicThread extends Thread{
@Override @Override
public void run() { public void run() {
Log.e("RESOLUTION:",""+GameActivity.screenWidth+"x"+GameActivity.screenHeight);
//affichage de l'arriere plan //affichage de l'arriere plan
Bitmap bitmap= BitmapFactory.decodeResource(cont.getResources(), R.drawable.t_b_board_background); Bitmap bitmap= BitmapFactory.decodeResource(cont.getResources(), R.drawable.t_b_board_background);
renderer.addToDraw(new DrawableBitmap(bitmap, 0,0, "background", 100, 100 )); renderer.addToDraw(new DrawableBitmap(bitmap, 0,0, "background", 100, 100 ));
drawHandPreview(); drawHandPreview();
//Rectangle pos = new Rectangle(0F,0F,100F,100F);
ready=true; ready=true;
while(true) while(true)
@@ -72,7 +81,7 @@ public class GameLogicThread extends Thread{
for(Card c : localPlayerHand.getHand()) for(Card c : localPlayerHand.getHand())
{ {
renderer.addToDraw(c.getDrawableCard()); renderer.addToDraw(c.getDrawableCard());
renderer.moveToDraw(i* DrawableCard.CARD_WITH,90F,c.getDrawableCard().getName()); renderer.moveToDraw(i* DrawableCard.getCardWith(),90F,c.getDrawableCard().getName());
i++; i++;
} }
@@ -119,6 +128,9 @@ public class GameLogicThread extends Thread{
DrawableCard smallCArd = renderer.getCardOn(unscalled_X,scalled_Y); DrawableCard smallCArd = renderer.getCardOn(unscalled_X,scalled_Y);
if(smallCArd !=null) if(smallCArd !=null)
{ {
renderer.removeToDrawWithoutUpdate(smallCArd);
playableZonesHandler.displayPlayableZones(renderer);
renderer.addToDraw(smallCArd);
if(currentlySelected !=null) if(currentlySelected !=null)
{ {
currentlySelected.setCoordinates(currentlySelected.getX(),currentlySelected.getY() + SELECTING_OFFSET); currentlySelected.setCoordinates(currentlySelected.getX(),currentlySelected.getY() + SELECTING_OFFSET);
@@ -130,6 +142,7 @@ public class GameLogicThread extends Thread{
renderer.addToDraw(bigCard); renderer.addToDraw(bigCard);
bigCard.setCoordinates(72F,10F); bigCard.setCoordinates(72F,10F);
smallCArd.setCoordinates(smallCArd.getX(),smallCArd.getY() - SELECTING_OFFSET); smallCArd.setCoordinates(smallCArd.getX(),smallCArd.getY() - SELECTING_OFFSET);
} }
touch.onTouchEvent(event); touch.onTouchEvent(event);
}else if(event.getAction() == MotionEvent.ACTION_UP){ }else if(event.getAction() == MotionEvent.ACTION_UP){
@@ -141,6 +154,7 @@ public class GameLogicThread extends Thread{
currentlySelected.setCoordinates(currentlySelected.getX(),currentlySelected.getY() + SELECTING_OFFSET); currentlySelected.setCoordinates(currentlySelected.getX(),currentlySelected.getY() + SELECTING_OFFSET);
currentlySelected=null; currentlySelected=null;
} }
playableZonesHandler.HidePlayableZones(renderer);
}else{ }else{
touch.onTouchEvent(event); touch.onTouchEvent(event);
} }
@@ -148,18 +162,5 @@ public class GameLogicThread extends Thread{
} }
public void displayPlayableZones()
{
Card[] cardsOnBoard = board.getPlayerCardsOnBoard();
for(int i=0 ; i < cardsOnBoard.length ;i++)
{
if(cardsOnBoard[i] == null)
{
displayPlayableZoneOn(i);
}
}
}
private void displayPlayableZoneOn(int i) {
}
} }
@@ -1,4 +1,61 @@
package com.iutlaval.myapplication.Game; package com.iutlaval.myapplication.Game;
import android.graphics.Color;
import com.iutlaval.myapplication.Game.Cards.Card;
import com.iutlaval.myapplication.InvalidDataException;
import com.iutlaval.myapplication.Video.Drawables.Drawable;
import com.iutlaval.myapplication.Video.Drawables.DrawableCard;
import com.iutlaval.myapplication.Video.Drawables.DrawableRectangle;
import com.iutlaval.myapplication.Video.Rectangle;
import com.iutlaval.myapplication.Video.Renderer;
import java.util.ArrayList;
import java.util.List;
public class PlayableZonesHandler { public class PlayableZonesHandler {
//90F au lieu de 100F car on n'a pas la pioche
private static final float CARD_SPACING = 90F / Board.MAX_CARD_ON_BOARD;
private List<Drawable> playableZones;
private Board board;
public PlayableZonesHandler(Board board)
{
playableZones=new ArrayList<>();
this.board=board;
}
public void displayPlayableZones(Renderer renderer)
{
Card[] cardsOnBoard = board.getPlayerCardsOnBoard();
for(int i=0 ; i < cardsOnBoard.length ;i++)
{
if(cardsOnBoard[i] == null)
{
displayPlayableZoneOn(i,renderer);
}
}
}
private void displayPlayableZoneOn(int i,Renderer renderer) {
Rectangle pos = new Rectangle((DrawableCard.getCardWith()+1)*i,50F,DrawableCard.getCardWith(),DrawableCard.getCardHeight());
try {
Drawable zone = new DrawableRectangle(pos,"greySpace"+i, Color.LTGRAY);
playableZones.add(zone);
renderer.addToDrawWithoutUpdate(zone);
} catch (InvalidDataException e) {
e.printStackTrace();
}
}
public void HidePlayableZones(Renderer renderer)
{
for(Drawable d : playableZones)
{
renderer.removeToDraw(d);
}
playableZones.clear();
}
} }
@@ -20,7 +20,7 @@ import com.iutlaval.myapplication.Video.Rectangle;
public class DrawableCard extends Drawable{ public class DrawableCard extends Drawable{
private int ratio; private int ratio;
public static final int CARD_WITH = 14; private static final int CARD_WITH = 14;
private static final int CARD_HEIGHT = 40; private static final int CARD_HEIGHT = 40;
private static final float HP_ATK_FONT_SIZE_OFFBOARD =60F; private static final float HP_ATK_FONT_SIZE_OFFBOARD =60F;
private static final float HP_ATK_FONT_SIZE_BOARD =70F; private static final float HP_ATK_FONT_SIZE_BOARD =70F;
@@ -1,6 +1,7 @@
package com.iutlaval.myapplication.Video.Drawables; package com.iutlaval.myapplication.Video.Drawables;
import android.graphics.Bitmap; import android.graphics.Bitmap;
import android.util.Log;
import com.iutlaval.myapplication.InvalidDataException; import com.iutlaval.myapplication.InvalidDataException;
import com.iutlaval.myapplication.Video.Rectangle; import com.iutlaval.myapplication.Video.Rectangle;
@@ -19,7 +20,9 @@ public class DrawableRectangle extends Drawable{
super(rectangle.getPositionX(),rectangle.getPositionY(),name); super(rectangle.getPositionX(),rectangle.getPositionY(),name);
if(rectangle.getHeight() <= 0 || rectangle.getWidth() <=0)throw new InvalidDataException(name,rectangle); if(rectangle.getHeight() <= 0 || rectangle.getWidth() <=0)throw new InvalidDataException(name,rectangle);
Log.e("rect1",rectangle.getWidth()+"");
rectangle.scaleRectangleToScreen(); rectangle.scaleRectangleToScreen();
Log.e("rect2",rectangle.getWidth()+"");
Bitmap bitmap = Bitmap.createBitmap((int)rectangle.getWidth(),(int)rectangle.getHeight(), Bitmap.Config.ARGB_8888); Bitmap bitmap = Bitmap.createBitmap((int)rectangle.getWidth(),(int)rectangle.getHeight(), Bitmap.Config.ARGB_8888);
rectangle.bitmapRectangleBuilder(bitmap,color); rectangle.bitmapRectangleBuilder(bitmap,color);
@@ -64,10 +64,6 @@ public class Renderer extends SurfaceView implements SurfaceHolder.Callback {
/** /**
* cette fonction est appeler a chaque fois que l'utilisateur tourne son ecran * cette fonction est appeler a chaque fois que l'utilisateur tourne son ecran
* this function is unused since the screen is locked * this function is unused since the screen is locked
* @param surfaceHolder
* @param i
* @param i1
* @param i2
*/ */
@Override @Override
public void surfaceChanged(@NonNull SurfaceHolder surfaceHolder, int i, int i1, int i2) { public void surfaceChanged(@NonNull SurfaceHolder surfaceHolder, int i, int i1, int i2) {
@@ -173,6 +169,16 @@ public class Renderer extends SurfaceView implements SurfaceHolder.Callback {
* @return retourne faux si l'element existe deja * @return retourne faux si l'element existe deja
*/ */
public boolean addToDraw(Drawable newElement){ public boolean addToDraw(Drawable newElement){
boolean returnValue = addToDrawWithoutUpdate(newElement);
contentChanged=true;
return returnValue;
}
/**
* permet d'ajouter un element a afficher
* @return retourne faux si l'element existe deja
*/
public boolean addToDrawWithoutUpdate(Drawable newElement){
if(newElement == null)return false; if(newElement == null)return false;
for(Drawable d : toDraw) for(Drawable d : toDraw)
{ {
@@ -182,7 +188,6 @@ public class Renderer extends SurfaceView implements SurfaceHolder.Callback {
} }
} }
toDraw.add(newElement); toDraw.add(newElement);
contentChanged=true;
return true; return true;
} }
@@ -215,6 +220,14 @@ public class Renderer extends SurfaceView implements SurfaceHolder.Callback {
toDraw.remove(d); toDraw.remove(d);
} }
/**
* supprime le drawable possedant le nom indique mais n'upate pas le renderer
* @param drawable le drawable
*/
public void removeToDrawWithoutUpdate(Drawable drawable){
removeToDrawWithoutUpdate(drawable.getName());
}
/** /**
* supprime le drawable possedant le nom indique * supprime le drawable possedant le nom indique
* @param name le nom * @param name le nom