merge
@@ -1,8 +1,8 @@
|
||||
package com.iutlaval.myapplication.Game;
|
||||
|
||||
import com.iutlaval.myapplication.Game.Cards.Card;
|
||||
import com.iutlaval.myapplication.Game.Player.Player;
|
||||
import com.iutlaval.myapplication.Game.Player.PlayerLocal;
|
||||
import com.iutlaval.myapplication.Game.Players.Player;
|
||||
import com.iutlaval.myapplication.Game.Players.PlayerLocal;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
@@ -5,7 +5,7 @@ import android.graphics.Bitmap;
|
||||
import android.graphics.BitmapFactory;
|
||||
|
||||
import com.iutlaval.myapplication.Game.Board;
|
||||
import com.iutlaval.myapplication.Game.Player.Player;
|
||||
import com.iutlaval.myapplication.Game.Players.Player;
|
||||
import com.iutlaval.myapplication.R;
|
||||
import com.iutlaval.myapplication.Video.Drawables.DrawableCard;
|
||||
|
||||
@@ -13,12 +13,6 @@ public abstract class Card {
|
||||
private static Bitmap frameBitmap = null;
|
||||
private DrawableCard drawableCard = null;
|
||||
|
||||
|
||||
|
||||
public Card()
|
||||
{
|
||||
|
||||
}
|
||||
/**
|
||||
* cree une carte est lui definit un drawable
|
||||
* @param UID
|
||||
@@ -62,12 +56,11 @@ public abstract class Card {
|
||||
*/
|
||||
public Bitmap getFrameBitmap(Context c)
|
||||
{
|
||||
//TODO add a frame
|
||||
if(frameBitmap == null) {
|
||||
frameBitmap=BitmapFactory.decodeResource(c.getResources(), R.drawable.cadre_carte);
|
||||
frameBitmap=BitmapFactory.decodeResource(c.getResources(), R.drawable.t_cc_defaut);
|
||||
}
|
||||
|
||||
if(getFrameTexture() == R.drawable.cadre_carte)
|
||||
if(getFrameTexture() == R.drawable.t_cc_defaut)
|
||||
{
|
||||
return frameBitmap;
|
||||
}else{
|
||||
@@ -85,7 +78,7 @@ public abstract class Card {
|
||||
*/
|
||||
public int getFrameTexture()
|
||||
{
|
||||
return R.drawable.cadre_carte;
|
||||
return R.drawable.t_cc_defaut;
|
||||
}
|
||||
|
||||
|
||||
@@ -144,5 +137,12 @@ public abstract class Card {
|
||||
public DrawableCard getDrawableCard() {
|
||||
return drawableCard;
|
||||
}
|
||||
|
||||
/**
|
||||
* cette fonction retourne le nom de la carte qui sera afficher
|
||||
* @return le nom
|
||||
*/
|
||||
public abstract String getName();
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -7,11 +7,6 @@ import com.iutlaval.myapplication.R;
|
||||
|
||||
public class DemoCard extends Card{
|
||||
|
||||
public DemoCard()
|
||||
{
|
||||
super();
|
||||
}
|
||||
|
||||
/**
|
||||
* cree une carte est lui definit un drawable
|
||||
*
|
||||
@@ -22,9 +17,10 @@ public class DemoCard extends Card{
|
||||
super(UID, c);
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public int getCardPicture() {
|
||||
return R.drawable.guerrier_nul;
|
||||
return R.drawable.t_cp_elfe_fournisseur;
|
||||
}
|
||||
|
||||
|
||||
@@ -48,4 +44,9 @@ public class DemoCard extends Card{
|
||||
public int getHealth() {
|
||||
return 10;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getName() {
|
||||
return "DEMO";
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,14 +1,17 @@
|
||||
package com.iutlaval.myapplication.Game;
|
||||
|
||||
import android.content.Context;
|
||||
import android.graphics.Color;
|
||||
import android.graphics.Bitmap;
|
||||
import android.graphics.BitmapFactory;
|
||||
import android.view.MotionEvent;
|
||||
|
||||
import com.iutlaval.myapplication.Game.Cards.Card;
|
||||
import com.iutlaval.myapplication.Game.Cards.DemoCard;
|
||||
import com.iutlaval.myapplication.InvalidDataException;
|
||||
import com.iutlaval.myapplication.GameActivity;
|
||||
import com.iutlaval.myapplication.MainActivity;
|
||||
import com.iutlaval.myapplication.R;
|
||||
import com.iutlaval.myapplication.Video.Drawables.Drawable;
|
||||
import com.iutlaval.myapplication.Video.Drawables.DrawableCard;
|
||||
import com.iutlaval.myapplication.Video.Rectangle;
|
||||
import com.iutlaval.myapplication.Video.Renderer;
|
||||
|
||||
public class GameLogicThread extends Thread{
|
||||
@@ -16,6 +19,7 @@ public class GameLogicThread extends Thread{
|
||||
private Context cont;
|
||||
private Renderer renderer;
|
||||
private boolean ready;
|
||||
private TouchHandler touch;
|
||||
|
||||
public GameLogicThread(Context cont, Renderer renderer)
|
||||
{
|
||||
@@ -23,6 +27,7 @@ public class GameLogicThread extends Thread{
|
||||
this.cont = cont;
|
||||
this.renderer = renderer;
|
||||
renderer.setEngine(this);
|
||||
touch = new TouchHandler(renderer);
|
||||
}
|
||||
|
||||
private float i=0;
|
||||
@@ -32,30 +37,35 @@ public class GameLogicThread extends Thread{
|
||||
@Override
|
||||
public void run() {
|
||||
|
||||
try {
|
||||
renderer.addToDraw(new Drawable(new Rectangle(0,0,100,100),"background", Color.BLUE));
|
||||
//renderer.addToDraw(new Drawable(bm,0.0F,0.0F,"running",8F,16F));
|
||||
//renderer.addToDraw(new DrawableCard(new DemoCard(),0.0F,0.0F,"card2",cont));
|
||||
Card card2 = new DemoCard("card3",cont);
|
||||
renderer.addToDraw(card2.getDrawableCard());
|
||||
Card card1 = new DemoCard("card1",cont);
|
||||
renderer.addToDraw(card1.getDrawableCard());
|
||||
} catch (InvalidDataException e) {
|
||||
//cette erreur est lance si un carre est invalid
|
||||
System.err.println(e.getDetail());
|
||||
e.printStackTrace();
|
||||
}
|
||||
//renderer.addToDraw(new Drawable(new Rectangle(0,0,100,100),"background", Color.BLUE));
|
||||
Bitmap bitmap= BitmapFactory.decodeResource(cont.getResources(), R.drawable.t_b_board_background);
|
||||
renderer.addToDraw(new Drawable(bitmap, 0,0, "background", 100, 100 ));
|
||||
//renderer.addToDraw(new Drawable(bm,0.0F,0.0F,"running",8F,16F));
|
||||
//renderer.addToDraw(new DrawableCard(new DemoCard(),0.0F,0.0F,"card2",cont));
|
||||
Card card2 = new DemoCard("card3",cont);
|
||||
renderer.addToDraw(card2.getDrawableCard());
|
||||
Card card1 = new DemoCard("card1",cont);
|
||||
renderer.addToDraw(card1.getDrawableCard());
|
||||
|
||||
|
||||
|
||||
ready=true;
|
||||
while(true)
|
||||
{
|
||||
//Do Stuff
|
||||
renderer.moveToDraw(20,1,"card1");
|
||||
renderer.moveToDraw(20,20,"card1");
|
||||
renderer.moveToDraw(40,20,"card3");
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* cette fonction est appeller a chaque fin de frame
|
||||
* CETTE FONCTION A UN IMPACT DIRRECT SUR LES FPS ELLE SE DOIT D'être OPTIMAL
|
||||
* TOUT CALCUL REDONDANT CE DOIT D'AVOIR ETE PRE FAIT
|
||||
*
|
||||
* TOUT APELLE DE CETTE FONCTION SE DOIT D'ÊTRE PROTEGER PAR isReady()
|
||||
*/
|
||||
public void onFrameDoneRendering()
|
||||
{
|
||||
if(i < 100)
|
||||
@@ -76,9 +86,20 @@ public class GameLogicThread extends Thread{
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* retourne vrai sir le moteur est pret a avoir sont evenemnt onFrameDoneRendering d'appeler
|
||||
* @return
|
||||
*/
|
||||
public boolean isReady() {
|
||||
return ready;
|
||||
}
|
||||
|
||||
//placeOnBoard()
|
||||
|
||||
/**
|
||||
* relais l'evenement directement au touch Handler
|
||||
* @param event
|
||||
*/
|
||||
public void onTouchEvent(MotionEvent event) {
|
||||
if(isReady())touch.onTouchEvent(event);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,4 +0,0 @@
|
||||
package com.iutlaval.myapplication.Game.Player;
|
||||
|
||||
public class PlayerBot extends Player{
|
||||
}
|
||||
@@ -1,4 +0,0 @@
|
||||
package com.iutlaval.myapplication.Game.Player;
|
||||
|
||||
public class PlayerLocal extends Player{
|
||||
}
|
||||
@@ -1,11 +1,10 @@
|
||||
package com.iutlaval.myapplication.Game.Player;
|
||||
package com.iutlaval.myapplication.Game.Players;
|
||||
|
||||
import com.iutlaval.myapplication.Game.Cards.Card;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.Random;
|
||||
|
||||
public abstract class Player {
|
||||
private static final int MAX_HAND_SIZE = 10;
|
||||
@@ -0,0 +1,4 @@
|
||||
package com.iutlaval.myapplication.Game.Players;
|
||||
|
||||
public class PlayerBot extends Player{
|
||||
}
|
||||
@@ -0,0 +1,4 @@
|
||||
package com.iutlaval.myapplication.Game.Players;
|
||||
|
||||
public class PlayerLocal extends Player{
|
||||
}
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.iutlaval.myapplication.Game.Player;
|
||||
package com.iutlaval.myapplication.Game.Players;
|
||||
|
||||
public class PlayerOnlineAdversary extends Player{
|
||||
}
|
||||
@@ -0,0 +1,45 @@
|
||||
package com.iutlaval.myapplication.Game;
|
||||
|
||||
import android.view.MotionEvent;
|
||||
|
||||
import com.iutlaval.myapplication.GameActivity;
|
||||
import com.iutlaval.myapplication.Video.Drawables.DrawableCard;
|
||||
import com.iutlaval.myapplication.Video.Renderer;
|
||||
|
||||
public class TouchHandler {
|
||||
|
||||
//TODO mettre sa dans une classe isolé
|
||||
private float deltaX = 0;
|
||||
private float deltaY = 0;
|
||||
private DrawableCard moveEventCard = null;
|
||||
private Renderer renderer;
|
||||
|
||||
public TouchHandler(Renderer renderer)
|
||||
{
|
||||
this.renderer = renderer;
|
||||
}
|
||||
|
||||
|
||||
public void onTouchEvent(MotionEvent event){
|
||||
|
||||
if(event.getPointerCount() <= 1)
|
||||
{
|
||||
float unscalled_X = event.getX() / GameActivity.screenWidth * 100;
|
||||
float unscalled_Y = event.getY() / GameActivity.screenHeight * 100;
|
||||
|
||||
if (event.getAction() == MotionEvent.ACTION_DOWN) {
|
||||
moveEventCard = renderer.getCardOn(unscalled_X, unscalled_Y);
|
||||
if(moveEventCard != null) {
|
||||
deltaY = unscalled_Y - moveEventCard.getY();
|
||||
deltaX = unscalled_X - moveEventCard.getX();
|
||||
}
|
||||
} else if (event.getAction() == MotionEvent.ACTION_UP) {
|
||||
moveEventCard = null;
|
||||
deltaY = 0;
|
||||
deltaX = 0;
|
||||
} else if (moveEventCard != null) {
|
||||
moveEventCard.setCoordinates(unscalled_X - deltaX, unscalled_Y - deltaY);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -7,6 +7,7 @@ import android.content.pm.ActivityInfo;
|
||||
import android.graphics.Point;
|
||||
import android.os.Bundle;
|
||||
import android.view.Display;
|
||||
import android.view.MotionEvent;
|
||||
|
||||
import com.iutlaval.myapplication.Game.GameLogicThread;
|
||||
import com.iutlaval.myapplication.Video.FpsTime;
|
||||
@@ -14,6 +15,8 @@ import com.iutlaval.myapplication.Video.Renderer;
|
||||
|
||||
public class GameActivity extends Activity {
|
||||
|
||||
private static GameLogicThread gameEngine;
|
||||
|
||||
public static int screenWidth=0;
|
||||
public static int screenHeight=0;
|
||||
public static boolean bilinearFiltering = true;
|
||||
@@ -22,6 +25,7 @@ public class GameActivity extends Activity {
|
||||
return false;//TODO implement it
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
protected void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
@@ -48,10 +52,24 @@ public class GameActivity extends Activity {
|
||||
screenHeight = size.y;
|
||||
}
|
||||
|
||||
GameLogicThread gameEngine = new GameLogicThread(this,renderer);
|
||||
gameEngine = new GameLogicThread(this,renderer);
|
||||
gameEngine.start();
|
||||
|
||||
setContentView(renderer);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onTouchEvent(MotionEvent event) {
|
||||
if(gameEngine != null)gameEngine.onTouchEvent(event);
|
||||
System.out.println(event.getX());
|
||||
return super.onTouchEvent(event);
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onGenericMotionEvent(MotionEvent event) {
|
||||
System.out.println(event.getX());
|
||||
return super.onGenericMotionEvent(event);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -71,11 +71,9 @@ public class Drawable {
|
||||
* @param x_size taille du drawable entre 0 et 100
|
||||
* @param y_size taille du drawable entre 0 et 100
|
||||
*/
|
||||
public Drawable(String text,float x_pos,float y_pos,String name, float x_size,float y_size,float textSize)
|
||||
public Drawable(String text,float x_pos,float y_pos,String name, float x_size,float y_size,float textSize , int x_canvasRatio, int y_canvasRatio)
|
||||
{
|
||||
this(x_pos,y_pos,name);
|
||||
int x_scaled_size = (int)x_size* GameActivity.screenWidth/100;
|
||||
int y_scaled_size = (int)y_size* GameActivity.screenHeight/100;
|
||||
|
||||
checkPaint();
|
||||
p.setColor(Color.BLACK);
|
||||
@@ -86,29 +84,32 @@ public class Drawable {
|
||||
p.setTextSize(textSize);
|
||||
|
||||
//+10 permet d'e prendre en compte les p,q,j qui dessende plus bas que les autres
|
||||
bitmap = Bitmap.createBitmap(x_scaled_size, y_scaled_size+10, Bitmap.Config.ARGB_8888);
|
||||
bitmap = Bitmap.createBitmap(x_canvasRatio, y_canvasRatio, Bitmap.Config.ARGB_8888);
|
||||
Canvas c = new Canvas(bitmap);
|
||||
|
||||
int index = 1;
|
||||
for(String line : linesOfText)
|
||||
{
|
||||
c.drawText(line ,0,index*y_scaled_size/linesOfText.size(),p);
|
||||
c.drawText(line ,0,index*y_canvasRatio/linesOfText.size(),p);
|
||||
index++;
|
||||
}
|
||||
|
||||
int scalled_x_size = (int)(GameActivity.screenWidth*x_size/100);
|
||||
int scalled_y_size = (int)(GameActivity.screenHeight*y_size/100);
|
||||
|
||||
bitmap = Bitmap.createScaledBitmap(bitmap,scalled_x_size,scalled_y_size,GameActivity.bilinearFiltering);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* ce constructeur n'est pas rapide essayer de l'utiliser le moin possible
|
||||
* TODO : optimize it and remove the deprecated flag
|
||||
* TODO : optimize it
|
||||
*
|
||||
* ce constructeur dessine un rectangle avec la texture donner en argument
|
||||
* @param rectangle recange cooresspondant a la surface a dessiner
|
||||
* @param name nom du drawable agit comme un identifiant mais doit être unique
|
||||
* @param color couleur du rectangle
|
||||
*/
|
||||
@Deprecated
|
||||
public Drawable(Rectangle rectangle, String name, int color) throws InvalidDataException {
|
||||
this(rectangle.getPositionX(),rectangle.getPositionY(),name);
|
||||
if(rectangle.getHeight() <= 0 || rectangle.getWidth() <=0)throw new InvalidDataException(name,rectangle);
|
||||
@@ -204,11 +205,6 @@ public class Drawable {
|
||||
p = new Paint();
|
||||
}
|
||||
|
||||
/**
|
||||
* cette fonction est appeler quand le drawable est retirer de la liste toDraw
|
||||
*/
|
||||
public void onDeletion(Renderer r){}
|
||||
|
||||
/**
|
||||
* coupe le texte a une certaine longeur
|
||||
* @param charPerLines nombre de caractére par lignes
|
||||
|
||||
@@ -17,18 +17,20 @@ public class DrawableCard extends Drawable{
|
||||
|
||||
private static final int CARD_WITH = 14;
|
||||
private static final int CARD_HEIGHT = 32;
|
||||
private static final float HP_ATK_FONT_SIZE_BIG_CARD =50F;
|
||||
private static final float HP_ATK_FONT_SIZE_BOARD =80F;
|
||||
private static final float HP_ATK_FONT_SIZE_BIG_CARD =30F;
|
||||
private static final float HP_ATK_FONT_SIZE_BOARD =70F;
|
||||
private static final float DESCRIPTION_FONT_SIZE =30F;
|
||||
private static final float TITLE_FONT_SIZE =30F;
|
||||
|
||||
private String color;
|
||||
private Boolean onBoard;
|
||||
|
||||
private Drawable OpacityRectangleDrawable;
|
||||
private Drawable PictureDrawable;
|
||||
private Boolean onBoard;
|
||||
|
||||
private Drawable cardOnBardDrawable;
|
||||
private Drawable cardOnBoardDrawable;
|
||||
|
||||
private Drawable cardDescription;
|
||||
|
||||
private Drawable cardTitle;
|
||||
private Drawable cardHpDrawable;
|
||||
private Drawable cardAtkDrawable;
|
||||
|
||||
@@ -39,8 +41,10 @@ public class DrawableCard extends Drawable{
|
||||
/**
|
||||
* ce constructeur permet de crée un drawable simplifier pour les carte qui integre :
|
||||
* _le supoort de la description
|
||||
* _le support du titre
|
||||
* _le changement d'etat entre grand et terrain
|
||||
* _les point de vie
|
||||
* _les point attaque
|
||||
* _l'image
|
||||
* _les deplacement du tout
|
||||
*
|
||||
@@ -51,6 +55,8 @@ public class DrawableCard extends Drawable{
|
||||
* @param name nom du drawable
|
||||
* @param context le contexte est simplement l'instance de GameActivity qui est utiliser pas le moteur de jeu
|
||||
* @throws InvalidDataException
|
||||
* toutes les coodonés sont a zero pour faciliter la maintenance car la fonction setCoordinates() est appler pour corriger toutes les coordonées
|
||||
* donc les coodonées ne se trouve que dans cette fonction
|
||||
*/
|
||||
public DrawableCard(Card c, float x, float y, String name, Context context){
|
||||
super(c.getFrameBitmap(context),x,y,name,CARD_WITH,CARD_HEIGHT);
|
||||
@@ -59,16 +65,15 @@ public class DrawableCard extends Drawable{
|
||||
|
||||
onBoard=true;
|
||||
|
||||
cardDescription = new Drawable(c.getDescription(),x+CARD_WITH*0.07F,y+CARD_HEIGHT/2.2F,toString()+"description",CARD_WITH*0.8F,CARD_HEIGHT*0.35F,30F);
|
||||
updateHpAndAtk(c.getAttack(),c.getHealth());
|
||||
cardDescription = new DrawableCardDescription(c.getDescription(),x+CARD_WITH*0.07F,y+CARD_HEIGHT/2.2F,toString()+"description",CARD_WITH*0.9F,CARD_HEIGHT*0.35F,DESCRIPTION_FONT_SIZE);
|
||||
cardTitle = new DrawableCardTitle(c.getName(),0,0,toString()+"name",CARD_WITH,CARD_HEIGHT*0.1F,TITLE_FONT_SIZE);
|
||||
|
||||
color = c.getColor();//CARD_WITH+x
|
||||
Rectangle cardRect = new Rectangle(x,y,(float)(CARD_WITH+x),(float)(CARD_HEIGHT+x));
|
||||
Rectangle cardRect = new Rectangle(x,y,CARD_WITH+x,CARD_HEIGHT+x);
|
||||
Bitmap pictureBitmap = BitmapFactory.decodeResource(context.getResources(),c.getCardPicture());
|
||||
|
||||
try {
|
||||
OpacityRectangleDrawable = new Drawable(cardRect,toString()+"Opacity", Color.parseColor(c.getColor()));
|
||||
PictureDrawable = new Drawable(pictureBitmap,getX()+1.1F,getY()+2.5F,toString()+"Picture",CARD_WITH-2.4F,CARD_HEIGHT/2 - 4);
|
||||
PictureDrawable = new Drawable(pictureBitmap,0,0,toString()+"Picture",CARD_WITH/1.2F,CARD_HEIGHT/2.7F);
|
||||
} catch (InvalidDataException e) {
|
||||
e.printStackTrace();
|
||||
Log.e("CARTE :","forme de la carte invalide !");
|
||||
@@ -83,7 +88,7 @@ public class DrawableCard extends Drawable{
|
||||
Rectangle cardOnBoardFrame = new Rectangle(x,y,CARD_WITH,CARD_HEIGHT/2);
|
||||
cardOnBoardFrame.scaleRectangleToScreen();
|
||||
|
||||
int offset = CARD_HEIGHT/2 - CARD_HEIGHT/8;
|
||||
float offset = CARD_HEIGHT/2.7F;
|
||||
Rectangle cardOnBoardAtk = new Rectangle(x,offset,CARD_WITH/2,CARD_HEIGHT/8);
|
||||
cardOnBoardAtk.scaleRectangleToScreen();
|
||||
Rectangle cardOnBoardHp = new Rectangle(CARD_WITH/2,offset,CARD_WITH/2,CARD_HEIGHT/8);
|
||||
@@ -97,14 +102,20 @@ public class DrawableCard extends Drawable{
|
||||
cardOnBoardAtk.bitmapRectangleBuilder(cardOnBoardBitmap,Color.parseColor("#FFFF0000"));
|
||||
cardOnBoardHp.bitmapRectangleBuilder(cardOnBoardBitmap,Color.parseColor("#FF00FF00"));
|
||||
|
||||
cardOnBardDrawable = new Drawable(cardOnBoardBitmap,x,y,toString()+"BOARD",CARD_WITH,CARD_HEIGHT*2/3);
|
||||
cardOnBoardDrawable = new Drawable(cardOnBoardBitmap,x,y,toString()+"BOARD",CARD_WITH,CARD_HEIGHT*2/3);
|
||||
|
||||
c.setDrawableCard(this);
|
||||
|
||||
updateHpAndAtk(c.getAttack(),c.getHealth());
|
||||
setCoordinates(getX(), getY());
|
||||
}
|
||||
|
||||
/**
|
||||
* cette fonction permet de mettre a jour le nombre de hp restant
|
||||
* si vous ne voulez pas changer une des donnes metter la null ce n'est pas des int mais des Integer donc c'est possible
|
||||
*
|
||||
* toutes les coodonés sont a zero pour faciliter la maintenance car la fonction setCoordinates() est appler pour corriger toutes les coordonées
|
||||
* donc les coodonées ne se trouve que dans cette fonction
|
||||
* @param atk l'attaque de la carte
|
||||
* @param hp les point de vie de la carte
|
||||
*/
|
||||
@@ -112,15 +123,16 @@ public class DrawableCard extends Drawable{
|
||||
{
|
||||
if(onBoard) {
|
||||
if (atk != null)
|
||||
cardAtkDrawable = new Drawable(atk + " ", getX() + 0.6F, getY() + CARD_HEIGHT/2, toString() + "atk", CARD_WITH / 2, CARD_HEIGHT / 8, HP_ATK_FONT_SIZE_BOARD);
|
||||
cardAtkDrawable = new DrawableHpAtk(atk+"", 0, 0, toString() + "atk", CARD_WITH * 0.4F, CARD_HEIGHT / 8, HP_ATK_FONT_SIZE_BOARD);
|
||||
if (hp != null)
|
||||
cardHpDrawable = new Drawable(hp + " ", getX() + 2.4F + CARD_WITH / 2, getY() + CARD_HEIGHT/2, toString() + "hp", CARD_WITH / 2, CARD_HEIGHT / 8, HP_ATK_FONT_SIZE_BOARD);
|
||||
cardHpDrawable = new DrawableHpAtk(hp+"", 0, 0, toString() + "hp", CARD_WITH * 0.4F, CARD_HEIGHT / 8, HP_ATK_FONT_SIZE_BOARD);
|
||||
}else{
|
||||
if (atk != null)
|
||||
cardAtkDrawable = new Drawable(atk + " ", getX() + 1F, getY() +CARD_HEIGHT-6F, toString() + "atk", CARD_WITH / 2, CARD_HEIGHT / 8, HP_ATK_FONT_SIZE_BIG_CARD);
|
||||
cardAtkDrawable = new DrawableHpAtk(atk + "", 0, 0, toString() + "atk", CARD_WITH / 2, CARD_HEIGHT / 4, HP_ATK_FONT_SIZE_BIG_CARD);
|
||||
if (hp != null)
|
||||
cardHpDrawable = new Drawable(hp + " ", getX() + 2.8F + CARD_WITH / 2, getY() + CARD_HEIGHT - 6F, toString() + "hp", CARD_WITH / 2, CARD_HEIGHT / 8, HP_ATK_FONT_SIZE_BIG_CARD);
|
||||
cardHpDrawable = new DrawableHpAtk(hp + "", 0, 0, toString() + "hp", CARD_WITH / 2, CARD_HEIGHT / 4, HP_ATK_FONT_SIZE_BIG_CARD);
|
||||
}
|
||||
setCoordinates(getX(), getY());
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -138,15 +150,20 @@ public class DrawableCard extends Drawable{
|
||||
return String.valueOf(colorArray);
|
||||
}
|
||||
|
||||
/**
|
||||
* cette fonction permet de dessiner tout les elements de la carte
|
||||
* @param c canevas sur le quel dessiner
|
||||
* @param p pinceau
|
||||
*/
|
||||
@Override
|
||||
public void drawOn(Canvas c, Paint p) {
|
||||
//draw the frame
|
||||
if(onBoard)
|
||||
{
|
||||
cardOnBardDrawable.drawOn(c,p);
|
||||
cardOnBoardDrawable.drawOn(c,p);
|
||||
PictureDrawable.drawOn(c,p);
|
||||
|
||||
|
||||
cardTitle.drawOn(c,p);
|
||||
cardHpDrawable.drawOn(c,p);
|
||||
cardAtkDrawable.drawOn(c,p);
|
||||
}else{
|
||||
@@ -155,6 +172,7 @@ public class DrawableCard extends Drawable{
|
||||
PictureDrawable.drawOn(c,p);
|
||||
|
||||
//dessine le texte
|
||||
cardTitle.drawOn(c,p);
|
||||
cardDescription.drawOn(c,p);
|
||||
cardHpDrawable.drawOn(c,p);
|
||||
cardAtkDrawable.drawOn(c,p);
|
||||
@@ -162,20 +180,30 @@ public class DrawableCard extends Drawable{
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* cette fonction permet de deplacer la carte et tout ces sous element
|
||||
* tout les valeur on ete determiner empiriquement
|
||||
* @param x postion x
|
||||
* @param y postion y
|
||||
*/
|
||||
@Override
|
||||
public void setCoordinates(float x, float y) {
|
||||
super.setCoordinates(x, y);
|
||||
if (onBoard) {
|
||||
cardOnBardDrawable.setCoordinates(x,y);
|
||||
PictureDrawable.setCoordinates(x +1, y +2);
|
||||
cardAtkDrawable.setCoordinates(x+1F,y + CARD_HEIGHT/2 );
|
||||
cardHpDrawable.setCoordinates(x+1F+CARD_WITH/2,y + CARD_HEIGHT/2 );
|
||||
cardOnBoardDrawable.setCoordinates(x,y);
|
||||
PictureDrawable.setCoordinates(x + CARD_WITH/14F, y +CARD_HEIGHT/16F);
|
||||
cardAtkDrawable.setCoordinates(x+CARD_WITH*0.05F,y + CARD_HEIGHT*0.48F );
|
||||
cardHpDrawable.setCoordinates(x+CARD_WITH*0.55F,y + CARD_HEIGHT*0.48F );
|
||||
cardTitle.setCoordinates(x+CARD_WITH*0.1F,y - CARD_WITH * 0.1F);
|
||||
}else{
|
||||
super.setCoordinates(x, y);
|
||||
OpacityRectangleDrawable.setCoordinates(x, y);
|
||||
PictureDrawable.setCoordinates(x + 1.1F, y + 2.5F);
|
||||
PictureDrawable.setCoordinates(x + CARD_WITH/12.7F, y + CARD_HEIGHT/12.0F);
|
||||
|
||||
//les textes ce dessines depuis leur base et non depuis le coin haut gauche
|
||||
cardDescription.setCoordinates(x+CARD_WITH*0.07F,y+CARD_HEIGHT/2.2F);
|
||||
cardAtkDrawable.setCoordinates(x + 1F,y+CARD_HEIGHT-6F);
|
||||
cardHpDrawable.setCoordinates(x+ 3F+CARD_WITH/2,y+CARD_HEIGHT-6F);
|
||||
cardAtkDrawable.setCoordinates(x + CARD_WITH*0.08F,y +CARD_HEIGHT*0.70F);
|
||||
cardHpDrawable.setCoordinates(x + CARD_WITH*0.7F,y +CARD_HEIGHT*0.70F);
|
||||
cardTitle.setCoordinates(x+CARD_WITH*0.1F,y - CARD_WITH * 0.055F);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -190,4 +218,12 @@ public class DrawableCard extends Drawable{
|
||||
setCoordinates(getX(), getY());
|
||||
updateHpAndAtk(card.getAttack(),card.getHealth());
|
||||
}
|
||||
|
||||
public static int getCardWith() {
|
||||
return CARD_WITH;
|
||||
}
|
||||
|
||||
public static int getCardHeight() {
|
||||
return CARD_HEIGHT;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,50 +1,11 @@
|
||||
package com.iutlaval.myapplication.Video.Drawables;
|
||||
|
||||
import android.graphics.Bitmap;
|
||||
import android.graphics.Canvas;
|
||||
import android.graphics.Color;
|
||||
|
||||
import androidx.annotation.MainThread;
|
||||
|
||||
import com.iutlaval.myapplication.GameActivity;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public class DrawableCardDescription extends Drawable {
|
||||
private static int TEXT_X_RES = 281;
|
||||
private static int TEXT_Y_RES = 195;
|
||||
|
||||
private Bitmap bitmap;
|
||||
|
||||
public DrawableCardDescription(String text, float x_pos, float y_pos, String name, float x_size, float y_size, float textSize) {
|
||||
super(x_pos,y_pos,name);
|
||||
int x_scaled_size = (int)x_size* GameActivity.screenWidth/100;
|
||||
int y_scaled_size = (int)y_size* GameActivity.screenHeight/100;
|
||||
|
||||
checkPaint();
|
||||
super.p.setColor(Color.BLACK);
|
||||
|
||||
|
||||
|
||||
List<String> linesOfText = cutText(20,text);
|
||||
p.setTextSize(textSize);
|
||||
|
||||
//+10 permet d'e prendre en compte les p,q,j qui dessende plus bas que les autres
|
||||
Bitmap bitmap = Bitmap.createBitmap(TEXT_X_RES, TEXT_Y_RES, Bitmap.Config.ARGB_8888);
|
||||
Canvas c = new Canvas(bitmap);
|
||||
|
||||
int index = 1;
|
||||
for(String line : linesOfText)
|
||||
{
|
||||
c.drawText(line ,0,index*y_scaled_size/linesOfText.size(),p);
|
||||
index++;
|
||||
}
|
||||
|
||||
this.bitmap = Bitmap.createScaledBitmap(bitmap,x_scaled_size,y_scaled_size, GameActivity.bilinearFiltering);
|
||||
super(text,x_pos,y_pos,name,x_size,y_size,textSize,TEXT_X_RES,TEXT_Y_RES);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Bitmap getBitmap() {
|
||||
return bitmap;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,10 @@
|
||||
package com.iutlaval.myapplication.Video.Drawables;
|
||||
|
||||
public class DrawableCardTitle extends Drawable{
|
||||
private static int TEXT_X_RES = 281;
|
||||
private static int TEXT_Y_RES = 60;
|
||||
|
||||
public DrawableCardTitle(String text, float x_pos, float y_pos, String name, float x_size, float y_size, float textSize) {
|
||||
super(text,x_pos,y_pos,name,x_size,y_size,textSize,TEXT_X_RES,TEXT_Y_RES);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,12 @@
|
||||
package com.iutlaval.myapplication.Video.Drawables;
|
||||
|
||||
|
||||
public class DrawableHpAtk extends Drawable {
|
||||
private static int TEXT_X_RES = 110;
|
||||
private static int TEXT_Y_RES = 60;
|
||||
|
||||
public DrawableHpAtk(String text, float x_pos, float y_pos, String name, float x_size, float y_size, float textSize) {
|
||||
super(text,x_pos,y_pos,name,x_size,y_size,textSize,TEXT_X_RES,TEXT_Y_RES);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -13,6 +13,11 @@ public class RectangleCanevas extends Canvas {
|
||||
super(bitmap);
|
||||
}
|
||||
|
||||
/**
|
||||
* dessine un rectangle sur le canevas
|
||||
* @param r le rectangle a dessiner
|
||||
* @param paint le pinceau a utiliser
|
||||
*/
|
||||
public void drawRect(@NonNull Rectangle r, @NonNull Paint paint) {
|
||||
super.drawRect(r.getPositionX(),
|
||||
r.getPositionY(),
|
||||
|
||||
@@ -12,6 +12,7 @@ import androidx.annotation.NonNull;
|
||||
|
||||
import com.iutlaval.myapplication.Game.GameLogicThread;
|
||||
import com.iutlaval.myapplication.Video.Drawables.Drawable;
|
||||
import com.iutlaval.myapplication.Video.Drawables.DrawableCard;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
@@ -182,7 +183,6 @@ public class Renderer extends SurfaceView implements SurfaceHolder.Callback {
|
||||
* @param toRemove the element toRemove
|
||||
*/
|
||||
public void removeToDraw(Drawable toRemove){
|
||||
toRemove.onDeletion(this);
|
||||
toDraw.remove(toRemove);
|
||||
}
|
||||
|
||||
@@ -208,4 +208,28 @@ public class Renderer extends SurfaceView implements SurfaceHolder.Callback {
|
||||
public void setEngine(GameLogicThread engine) {
|
||||
this.engine = engine;
|
||||
}
|
||||
|
||||
/**
|
||||
* retourne une carte au coodonés donné
|
||||
* @param x coordoné en x
|
||||
* @param y coodoné en y
|
||||
* @return
|
||||
*/
|
||||
public DrawableCard getCardOn(float x, float y) {
|
||||
for(Drawable d : toDraw)
|
||||
{
|
||||
if(d instanceof DrawableCard)
|
||||
{
|
||||
DrawableCard card = ((DrawableCard)d);
|
||||
if(x >= card.getX() && x <= card.getX()+card.getCardWith())
|
||||
{
|
||||
if(y >= card.getY() && y <= card.getY()+card.getCardHeight())
|
||||
{
|
||||
return card;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
|
Before Width: | Height: | Size: 76 KiB After Width: | Height: | Size: 76 KiB |
|
After Width: | Height: | Size: 26 KiB |
|
Before Width: | Height: | Size: 16 KiB After Width: | Height: | Size: 16 KiB |
|
Before Width: | Height: | Size: 81 KiB After Width: | Height: | Size: 81 KiB |
|
Before Width: | Height: | Size: 116 KiB After Width: | Height: | Size: 116 KiB |
|
Before Width: | Height: | Size: 72 KiB After Width: | Height: | Size: 72 KiB |
|
Before Width: | Height: | Size: 15 KiB After Width: | Height: | Size: 15 KiB |
@@ -17,7 +17,8 @@
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toTopOf="parent"
|
||||
app:srcCompat="@drawable/batiut" />
|
||||
app:layout_constraintVertical_bias="0.0"
|
||||
app:srcCompat="@drawable/t_b_batiut" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/textView"
|
||||
|
||||
@@ -47,7 +47,7 @@
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toTopOf="parent"
|
||||
app:layout_constraintVertical_bias="0.0"
|
||||
app:srcCompat="@drawable/batiut" />
|
||||
app:srcCompat="@drawable/t_b_batiut" />
|
||||
|
||||
<Button
|
||||
android:id="@+id/button"
|
||||
|
||||