140 lines
4.6 KiB
Java
140 lines
4.6 KiB
Java
package com.iutlaval.myapplication.Game;
|
|
|
|
import android.content.Context;
|
|
import android.graphics.Bitmap;
|
|
import android.graphics.BitmapFactory;
|
|
import android.view.MotionEvent;
|
|
|
|
import com.iutlaval.myapplication.Game.Cards.Card;
|
|
import com.iutlaval.myapplication.Game.Decks.Deck;
|
|
import com.iutlaval.myapplication.Game.Decks.DeckDemo;
|
|
import com.iutlaval.myapplication.GameActivity;
|
|
import com.iutlaval.myapplication.R;
|
|
import com.iutlaval.myapplication.Video.Drawables.Drawable;
|
|
import com.iutlaval.myapplication.Video.Drawables.DrawableCard;
|
|
import com.iutlaval.myapplication.Video.Renderer;
|
|
|
|
public class GameLogicThread extends Thread{
|
|
|
|
private Context cont;
|
|
private Renderer renderer;
|
|
private boolean ready;
|
|
private TouchHandler touch;
|
|
private GameActivity gameActivity;
|
|
|
|
private Deck localPlayerDeck;
|
|
private Hand localPlayerHand;
|
|
|
|
|
|
public GameLogicThread(GameActivity gameActivity, Renderer renderer)
|
|
{
|
|
ready=false;
|
|
this.cont = gameActivity;
|
|
this.renderer = renderer;
|
|
renderer.setEngine(this);
|
|
touch = new TouchHandler(renderer);
|
|
localPlayerDeck = new DeckDemo("local",cont);
|
|
localPlayerDeck.suffle();
|
|
localPlayerHand = new Hand();
|
|
localPlayerHand.fillHand(localPlayerDeck);
|
|
this.gameActivity=gameActivity;
|
|
}
|
|
|
|
private float i=0;
|
|
private float increm = 1F;
|
|
|
|
|
|
@Override
|
|
public void run() {
|
|
//affichage de l'arriere plan
|
|
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());*/
|
|
|
|
drawHandPreview();
|
|
|
|
ready=true;
|
|
while(true)
|
|
{
|
|
//Do Stuff
|
|
break;
|
|
}
|
|
renderer.updateFrame();
|
|
}
|
|
|
|
private void drawHandPreview() {
|
|
int i = 0;
|
|
for(Card c : localPlayerHand.getHand())
|
|
{
|
|
renderer.addToDraw(c.getDrawableCard());
|
|
renderer.moveToDraw(i* DrawableCard.CARD_WITH,90F,c.getDrawableCard().getName());
|
|
i++;
|
|
}
|
|
|
|
}
|
|
|
|
/**
|
|
* 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()
|
|
*
|
|
* /!\ renderer.updateFrame(); va forcer le system a redessiner l'afficher qui ensuite reappelera onFrameDoneRendering() ce qui peut causer si le updateFrame() n'est pas proteger
|
|
* une utilisation de la batterie massive
|
|
*/
|
|
public void onFrameDoneRendering()
|
|
{
|
|
}
|
|
|
|
/**
|
|
* retourne vrai sir le moteur est pret a avoir sont evenemnt onFrameDoneRendering d'appeler
|
|
* @return
|
|
*/
|
|
public boolean isReady() {
|
|
return ready;
|
|
}
|
|
|
|
|
|
|
|
|
|
private DrawableCard currentlySelected = null;
|
|
private static final float SELECTING_OFFSET = 20F;
|
|
/**
|
|
* relais l'evenement directement au touch Handler
|
|
* @param event
|
|
*/
|
|
public void onTouchEvent(MotionEvent event) {
|
|
if(isReady()){
|
|
float unscalled_Y = event.getY() / GameActivity.screenHeight * 100;
|
|
if(unscalled_Y >= 90F) {
|
|
float unscalled_X = event.getX() / GameActivity.screenWidth * 100;
|
|
DrawableCard smallCArd = renderer.getCardOn(unscalled_X,unscalled_Y);
|
|
if(smallCArd !=null)
|
|
{
|
|
if(currentlySelected !=null)
|
|
{
|
|
currentlySelected.setCoordinates(currentlySelected.getX(),currentlySelected.getY() + SELECTING_OFFSET);
|
|
renderer.removeToDraw(currentlySelected.getName()+"BIG");
|
|
}
|
|
currentlySelected = smallCArd;
|
|
DrawableCard bigCard = new DrawableCard(smallCArd,cont,2);
|
|
renderer.addToDraw(bigCard);
|
|
bigCard.setCoordinates(50F,50F);
|
|
smallCArd.setCoordinates(smallCArd.getX(),smallCArd.getY() - SELECTING_OFFSET);
|
|
touch.onTouchEvent(event);
|
|
}
|
|
}else{
|
|
touch.onTouchEvent(event);
|
|
}
|
|
}
|
|
|
|
}
|
|
}
|