mise a l'echel ameliorer(non tester), ajout titre

This commit is contained in:
mmarc471@gmail.com
2020-09-12 10:14:23 +02:00
parent c30d600785
commit 5190f8173f
9 changed files with 101 additions and 90 deletions
@@ -13,12 +13,6 @@ public abstract class Card {
private static Bitmap frameBitmap = null; private static Bitmap frameBitmap = null;
private DrawableCard drawableCard = null; private DrawableCard drawableCard = null;
public Card()
{
}
/** /**
* cree une carte est lui definit un drawable * cree une carte est lui definit un drawable
* @param UID * @param UID
@@ -144,5 +138,12 @@ public abstract class Card {
public DrawableCard getDrawableCard() { public DrawableCard getDrawableCard() {
return drawableCard; 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 class DemoCard extends Card{
public DemoCard()
{
super();
}
/** /**
* cree une carte est lui definit un drawable * cree une carte est lui definit un drawable
* *
@@ -22,6 +17,7 @@ public class DemoCard extends Card{
super(UID, c); super(UID, c);
} }
@Override @Override
public int getCardPicture() { public int getCardPicture() {
return R.drawable.elfe_fournisseur; return R.drawable.elfe_fournisseur;
@@ -48,4 +44,9 @@ public class DemoCard extends Card{
public int getHealth() { public int getHealth() {
return 10; return 10;
} }
@Override
public String getName() {
return "DEMO";
}
} }
@@ -1,14 +1,14 @@
package com.iutlaval.myapplication.Game; package com.iutlaval.myapplication.Game;
import android.content.Context; import android.content.Context;
import android.graphics.Color; import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import com.iutlaval.myapplication.Game.Cards.Card; import com.iutlaval.myapplication.Game.Cards.Card;
import com.iutlaval.myapplication.Game.Cards.DemoCard; import com.iutlaval.myapplication.Game.Cards.DemoCard;
import com.iutlaval.myapplication.InvalidDataException; 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.DrawableCard; import com.iutlaval.myapplication.Video.Drawables.DrawableCard;
import com.iutlaval.myapplication.Video.Rectangle;
import com.iutlaval.myapplication.Video.Renderer; import com.iutlaval.myapplication.Video.Renderer;
public class GameLogicThread extends Thread{ public class GameLogicThread extends Thread{
@@ -33,7 +33,7 @@ public class GameLogicThread extends Thread{
public void run() { public void run() {
//renderer.addToDraw(new Drawable(new Rectangle(0,0,100,100),"background", Color.BLUE)); //renderer.addToDraw(new Drawable(new Rectangle(0,0,100,100),"background", Color.BLUE));
Bitmap bitmap=BitmapFactory.decodeResource(cont.getResources(), R.drawable.background); Bitmap bitmap= BitmapFactory.decodeResource(cont.getResources(), R.drawable.background);
renderer.addToDraw(new Drawable(bitmap, 0,0, "background", 100, 100 )); 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 Drawable(bm,0.0F,0.0F,"running",8F,16F));
//renderer.addToDraw(new DrawableCard(new DemoCard(),0.0F,0.0F,"card2",cont)); //renderer.addToDraw(new DrawableCard(new DemoCard(),0.0F,0.0F,"card2",cont));
@@ -48,11 +48,19 @@ public class GameLogicThread extends Thread{
while(true) while(true)
{ {
//Do Stuff //Do Stuff
renderer.moveToDraw(20,1,"card1"); renderer.moveToDraw(20,20,"card1");
renderer.moveToDraw(40,20,"card3");
break; 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() public void onFrameDoneRendering()
{ {
if(i < 100) if(i < 100)
@@ -73,6 +81,10 @@ public class GameLogicThread extends Thread{
} }
/**
* retourne vrai sir le moteur est pret a avoir sont evenemnt onFrameDoneRendering d'appeler
* @return
*/
public boolean isReady() { public boolean isReady() {
return ready; return ready;
} }
@@ -94,19 +94,22 @@ public class Drawable {
index++; 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 * 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 * ce constructeur dessine un rectangle avec la texture donner en argument
* @param rectangle recange cooresspondant a la surface a dessiner * @param rectangle recange cooresspondant a la surface a dessiner
* @param name nom du drawable agit comme un identifiant mais doit être unique * @param name nom du drawable agit comme un identifiant mais doit être unique
* @param color couleur du rectangle * @param color couleur du rectangle
*/ */
@Deprecated
public Drawable(Rectangle rectangle, String name, int color) throws InvalidDataException { public Drawable(Rectangle rectangle, String name, int color) throws InvalidDataException {
this(rectangle.getPositionX(),rectangle.getPositionY(),name); this(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);
@@ -19,16 +19,18 @@ public class DrawableCard extends Drawable{
private static final int CARD_HEIGHT = 32; private static final int CARD_HEIGHT = 32;
private static final float HP_ATK_FONT_SIZE_BIG_CARD =30F; 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 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 OpacityRectangleDrawable;
private Drawable PictureDrawable; private Drawable PictureDrawable;
private Boolean onBoard;
private Drawable cardOnBardDrawable; private Drawable cardOnBoardDrawable;
private Drawable cardDescription; private Drawable cardDescription;
private Drawable cardTitle;
private Drawable cardHpDrawable; private Drawable cardHpDrawable;
private Drawable cardAtkDrawable; private Drawable cardAtkDrawable;
@@ -51,6 +53,8 @@ public class DrawableCard extends Drawable{
* @param name nom du drawable * @param name nom du drawable
* @param context le contexte est simplement l'instance de GameActivity qui est utiliser pas le moteur de jeu * @param context le contexte est simplement l'instance de GameActivity qui est utiliser pas le moteur de jeu
* @throws InvalidDataException * @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){ public DrawableCard(Card c, float x, float y, String name, Context context){
super(c.getFrameBitmap(context),x,y,name,CARD_WITH,CARD_HEIGHT); super(c.getFrameBitmap(context),x,y,name,CARD_WITH,CARD_HEIGHT);
@@ -59,17 +63,15 @@ public class DrawableCard extends Drawable{
onBoard=true; onBoard=true;
cardDescription = new DrawableCardDescription(c.getDescription(),x+CARD_WITH*0.07F,y+CARD_HEIGHT/2.2F,toString()+"description",CARD_WITH*0.8F,CARD_HEIGHT*0.35F,30F); 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);
updateHpAndAtk(c.getAttack(),c.getHealth()); 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()); Bitmap pictureBitmap = BitmapFactory.decodeResource(context.getResources(),c.getCardPicture());
try { try {
OpacityRectangleDrawable = new Drawable(cardRect,toString()+"Opacity", Color.parseColor(c.getColor())); 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) { } catch (InvalidDataException e) {
e.printStackTrace(); e.printStackTrace();
Log.e("CARTE :","forme de la carte invalide !"); Log.e("CARTE :","forme de la carte invalide !");
@@ -84,7 +86,7 @@ public class DrawableCard extends Drawable{
Rectangle cardOnBoardFrame = new Rectangle(x,y,CARD_WITH,CARD_HEIGHT/2); Rectangle cardOnBoardFrame = new Rectangle(x,y,CARD_WITH,CARD_HEIGHT/2);
cardOnBoardFrame.scaleRectangleToScreen(); 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); Rectangle cardOnBoardAtk = new Rectangle(x,offset,CARD_WITH/2,CARD_HEIGHT/8);
cardOnBoardAtk.scaleRectangleToScreen(); cardOnBoardAtk.scaleRectangleToScreen();
Rectangle cardOnBoardHp = new Rectangle(CARD_WITH/2,offset,CARD_WITH/2,CARD_HEIGHT/8); Rectangle cardOnBoardHp = new Rectangle(CARD_WITH/2,offset,CARD_WITH/2,CARD_HEIGHT/8);
@@ -98,14 +100,20 @@ public class DrawableCard extends Drawable{
cardOnBoardAtk.bitmapRectangleBuilder(cardOnBoardBitmap,Color.parseColor("#FFFF0000")); cardOnBoardAtk.bitmapRectangleBuilder(cardOnBoardBitmap,Color.parseColor("#FFFF0000"));
cardOnBoardHp.bitmapRectangleBuilder(cardOnBoardBitmap,Color.parseColor("#FF00FF00")); 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); c.setDrawableCard(this);
updateHpAndAtk(c.getAttack(),c.getHealth());
setCoordinates(getX(), getY());
} }
/** /**
* cette fonction permet de mettre a jour le nombre de hp restant * 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 * 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 atk l'attaque de la carte
* @param hp les point de vie de la carte * @param hp les point de vie de la carte
*/ */
@@ -113,15 +121,16 @@ public class DrawableCard extends Drawable{
{ {
if(onBoard) { if(onBoard) {
if (atk != null) if (atk != null)
cardAtkDrawable = new DrawableHpAtk(atk+"", getX() + CARD_WITH*0.05F, getY() - CARD_HEIGHT*0.48F, 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) if (hp != null)
cardHpDrawable = new DrawableHpAtk(hp+"", getX() + CARD_WITH*0.55F, getY() + CARD_HEIGHT*0.48F, 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{ }else{
if (atk != null) if (atk != null)
cardAtkDrawable = new DrawableHpAtk(atk + " ", getX() + CARD_WITH*0.1F, getY() +CARD_HEIGHT-8F, 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) if (hp != null)
cardHpDrawable = new DrawableHpAtk(hp + " ", getX() + CARD_WITH *0.7F, getY() + CARD_HEIGHT - 8F, 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());
} }
/** /**
@@ -139,15 +148,20 @@ public class DrawableCard extends Drawable{
return String.valueOf(colorArray); 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 @Override
public void drawOn(Canvas c, Paint p) { public void drawOn(Canvas c, Paint p) {
//draw the frame //draw the frame
if(onBoard) if(onBoard)
{ {
cardOnBardDrawable.drawOn(c,p); cardOnBoardDrawable.drawOn(c,p);
PictureDrawable.drawOn(c,p); PictureDrawable.drawOn(c,p);
cardTitle.drawOn(c,p);
cardHpDrawable.drawOn(c,p); cardHpDrawable.drawOn(c,p);
cardAtkDrawable.drawOn(c,p); cardAtkDrawable.drawOn(c,p);
}else{ }else{
@@ -156,6 +170,7 @@ public class DrawableCard extends Drawable{
PictureDrawable.drawOn(c,p); PictureDrawable.drawOn(c,p);
//dessine le texte //dessine le texte
cardTitle.drawOn(c,p);
cardDescription.drawOn(c,p); cardDescription.drawOn(c,p);
cardHpDrawable.drawOn(c,p); cardHpDrawable.drawOn(c,p);
cardAtkDrawable.drawOn(c,p); cardAtkDrawable.drawOn(c,p);
@@ -163,20 +178,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 @Override
public void setCoordinates(float x, float y) { public void setCoordinates(float x, float y) {
super.setCoordinates(x, y);
if (onBoard) { if (onBoard) {
cardOnBardDrawable.setCoordinates(x,y); cardOnBoardDrawable.setCoordinates(x,y);
PictureDrawable.setCoordinates(x +1, y +2); PictureDrawable.setCoordinates(x + CARD_WITH/14F, y +CARD_HEIGHT/16F);
cardAtkDrawable.setCoordinates(x+CARD_WITH*0.05F,y + CARD_HEIGHT*0.48F ); cardAtkDrawable.setCoordinates(x+CARD_WITH*0.05F,y + CARD_HEIGHT*0.48F );
cardHpDrawable.setCoordinates(x+CARD_WITH*0.55F,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{ }else{
super.setCoordinates(x, y);
OpacityRectangleDrawable.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); cardDescription.setCoordinates(x+CARD_WITH*0.07F,y+CARD_HEIGHT/2.2F);
cardAtkDrawable.setCoordinates(x + CARD_WITH*0.1F,getY() + CARD_HEIGHT - 7F); cardAtkDrawable.setCoordinates(x + CARD_WITH*0.08F,y +CARD_HEIGHT*0.70F);
cardHpDrawable.setCoordinates(x + CARD_WITH*0.7F,getY() + CARD_HEIGHT - 8F); cardHpDrawable.setCoordinates(x + CARD_WITH*0.7F,y +CARD_HEIGHT*0.70F);
cardTitle.setCoordinates(x+CARD_WITH*0.1F,y - CARD_WITH * 0.055F);
} }
} }
@@ -1,50 +1,11 @@
package com.iutlaval.myapplication.Video.Drawables; 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 { public class DrawableCardDescription extends Drawable {
private static int TEXT_X_RES = 281; private static int TEXT_X_RES = 281;
private static int TEXT_Y_RES = 195; 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) { 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); super(text,x_pos,y_pos,name,x_size,y_size,textSize,TEXT_X_RES,TEXT_Y_RES);
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*TEXT_Y_RES/linesOfText.size(),p);
index++;
}
this.bitmap = Bitmap.createScaledBitmap(bitmap,x_scaled_size,y_scaled_size, GameActivity.bilinearFiltering);
} }
@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);
}
}
@@ -1,12 +1,5 @@
package com.iutlaval.myapplication.Video.Drawables; package com.iutlaval.myapplication.Video.Drawables;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Color;
import com.iutlaval.myapplication.GameActivity;
import java.util.List;
public class DrawableHpAtk extends Drawable { public class DrawableHpAtk extends Drawable {
private static int TEXT_X_RES = 110; private static int TEXT_X_RES = 110;
@@ -13,6 +13,11 @@ public class RectangleCanevas extends Canvas {
super(bitmap); 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) { public void drawRect(@NonNull Rectangle r, @NonNull Paint paint) {
super.drawRect(r.getPositionX(), super.drawRect(r.getPositionX(),
r.getPositionY(), r.getPositionY(),
@@ -21,5 +26,5 @@ public class RectangleCanevas extends Canvas {
paint); paint);
} }
} }