diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 16ae7ec..77f6ad6 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -9,6 +9,7 @@
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
+
diff --git a/app/src/main/java/com/iutlaval/myapplication/Game/Decks/Deck.java b/app/src/main/java/com/iutlaval/myapplication/Game/Decks/Deck.java
new file mode 100644
index 0000000..73003d9
--- /dev/null
+++ b/app/src/main/java/com/iutlaval/myapplication/Game/Decks/Deck.java
@@ -0,0 +1,25 @@
+package com.iutlaval.myapplication.Game.Decks;
+
+import com.iutlaval.myapplication.Game.Cards.Card;
+
+import java.util.Collections;
+import java.util.Stack;
+
+/**
+ * TOUT DECK CREE DOIT ETRE AJOUTER A DECKREGISTER
+ */
+public abstract class Deck {
+ public abstract Stack getCards();
+
+ public void suffle()
+ {
+ Collections.shuffle(getCards());
+ }
+
+ /**
+ * retourne le nom du deck ex: ww2 , science
+ * ce nom doit être unique
+ * @return
+ */
+ public abstract String getDeckName();
+}
diff --git a/app/src/main/java/com/iutlaval/myapplication/Game/Decks/DeckDemo.java b/app/src/main/java/com/iutlaval/myapplication/Game/Decks/DeckDemo.java
new file mode 100644
index 0000000..cc7c0b0
--- /dev/null
+++ b/app/src/main/java/com/iutlaval/myapplication/Game/Decks/DeckDemo.java
@@ -0,0 +1,38 @@
+package com.iutlaval.myapplication.Game.Decks;
+
+import android.content.Context;
+
+import com.iutlaval.myapplication.Game.Cards.Card;
+import com.iutlaval.myapplication.Game.Cards.DemoCard;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Stack;
+
+public class DeckDemo extends Deck{
+
+ Stack cards;
+
+ public DeckDemo(String id, Context constext)
+ {
+ cards = new Stack<>();
+
+ //generating cards randomly
+ for(int i = 0 ; i < 50 ; i++)
+ {
+ cards.add(new DemoCard(id +"_card_"+ i,constext));
+ }
+
+
+ }
+
+ @Override
+ public Stack getCards() {
+ return cards;
+ }
+
+ public String getDeckName() {
+ return "demo";
+ }
+
+}
diff --git a/app/src/main/java/com/iutlaval/myapplication/Game/Decks/DeckRegister.java b/app/src/main/java/com/iutlaval/myapplication/Game/Decks/DeckRegister.java
new file mode 100644
index 0000000..b9eff0d
--- /dev/null
+++ b/app/src/main/java/com/iutlaval/myapplication/Game/Decks/DeckRegister.java
@@ -0,0 +1,21 @@
+package com.iutlaval.myapplication.Game.Decks;
+
+import android.content.Context;
+
+import com.iutlaval.myapplication.Game.HandActivity;
+
+import java.util.Objects;
+
+public class DeckRegister {
+ public static Deck getClassFromName(String name, Context context)
+ {
+ //switch case non utilisable MAIS c'est pas important car c'ette foction n'est que pour
+ //HandActivity
+
+ if(name.equals("demo"))
+ {
+ return new DeckDemo(name,context);
+ }
+ return null;
+ }
+}
diff --git a/app/src/main/java/com/iutlaval/myapplication/Game/GameLogicThread.java b/app/src/main/java/com/iutlaval/myapplication/Game/GameLogicThread.java
index cc15172..ddc3ea2 100644
--- a/app/src/main/java/com/iutlaval/myapplication/Game/GameLogicThread.java
+++ b/app/src/main/java/com/iutlaval/myapplication/Game/GameLogicThread.java
@@ -1,14 +1,17 @@
package com.iutlaval.myapplication.Game;
import android.content.Context;
+import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
+import android.os.Bundle;
import android.view.MotionEvent;
import com.iutlaval.myapplication.Game.Cards.Card;
import com.iutlaval.myapplication.Game.Cards.DemoCard;
+import com.iutlaval.myapplication.Game.Decks.Deck;
+import com.iutlaval.myapplication.Game.Decks.DeckDemo;
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;
@@ -20,14 +23,24 @@ public class GameLogicThread extends Thread{
private Renderer renderer;
private boolean ready;
private TouchHandler touch;
+ private GameActivity gameActivity;
- public GameLogicThread(Context cont, Renderer renderer)
+ private Deck localPlayerDeck;
+ private Hand localPlayerHand;
+
+
+ public GameLogicThread(GameActivity gameActivity, Renderer renderer)
{
ready=false;
- this.cont = cont;
+ 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;
@@ -36,31 +49,39 @@ public class GameLogicThread extends Thread{
@Override
public void run() {
-
- //renderer.addToDraw(new Drawable(new Rectangle(0,0,100,100),"background", Color.BLUE));
+ //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);
+ /*Card card2 = new DemoCard("card3",cont);
renderer.addToDraw(card2.getDrawableCard());
Card card1 = new DemoCard("card1",cont);
- renderer.addToDraw(card1.getDrawableCard());
-
+ renderer.addToDraw(card1.getDrawableCard());*/
+ drawHandPreview();
ready=true;
while(true)
{
//Do Stuff
- renderer.moveToDraw(20,20,"card1");
- renderer.moveToDraw(40,20,"card3");
break;
}
- ((DrawableCard)renderer.getDrawAble("card3")).setOnBoard(false);
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
@@ -69,27 +90,10 @@ public class GameLogicThread extends Thread{
* 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 massivz
+ * une utilisation de la batterie massive
*/
public void onFrameDoneRendering()
{
- if(i < 100)
- {
- i+=increm;
- //((DrawableCard)renderer.getDrawAble("card3")).setOnBoard(increm <= 0);
- }else{
- increm=-increm;
- i+=increm;
- //((DrawableCard)renderer.getDrawAble("card3")).setOnBoard(increm > 0);
- }
- if(i==0)increm=-increm;
-
-
- //
- //TODO get x,y coordinate form name
- //r.moveToDraw(i,i,"card2");
- //renderer.moveToDraw(i,i,"card3");
-
}
/**
@@ -106,6 +110,30 @@ public class GameLogicThread extends Thread{
* @param event
*/
public void onTouchEvent(MotionEvent event) {
- if(isReady())touch.onTouchEvent(event);
+ if(isReady()){
+ float unscalled_Y = event.getY() / GameActivity.screenHeight * 100;
+ if(unscalled_Y >= 90F) {
+ float unscalled_X = event.getX() / GameActivity.screenWidth * 100;
+ //TODO : display fullscreen cards
+ Intent HandActivity = new Intent(gameActivity, HandActivity.class);
+ String[] serializedHand = new String[localPlayerHand.getHand().size() +1];
+ int i = 0;
+ serializedHand[i] = localPlayerDeck.getDeckName();
+ for(Card c : localPlayerHand.getHand())
+ {
+ i++;
+ serializedHand[i] = c.getName();
+
+ }
+ HandActivity.putExtra("hand",serializedHand);
+ Bundle cardSelectedBundle = new Bundle();
+ gameActivity.startActivity(HandActivity,cardSelectedBundle);
+
+
+ }else{
+ touch.onTouchEvent(event);
+ }
+ }
+
}
}
diff --git a/app/src/main/java/com/iutlaval/myapplication/Game/Hand.java b/app/src/main/java/com/iutlaval/myapplication/Game/Hand.java
new file mode 100644
index 0000000..434f97e
--- /dev/null
+++ b/app/src/main/java/com/iutlaval/myapplication/Game/Hand.java
@@ -0,0 +1,36 @@
+package com.iutlaval.myapplication.Game;
+
+import com.iutlaval.myapplication.Game.Cards.Card;
+import com.iutlaval.myapplication.Game.Decks.Deck;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class Hand {
+
+ private static final int NUMBER_OF_CARDS_IN_STARTING_HAND = 5;
+
+ private List hand;
+
+ public Hand()
+ {
+ hand = new ArrayList<>();
+ }
+
+ public void pickCardFromDeck(Deck deck,int amount)
+ {
+ for(int i = 0 ; i < NUMBER_OF_CARDS_IN_STARTING_HAND;i++)
+ {
+ hand.add(deck.getCards().pop());
+ }
+ }
+
+ public void fillHand(Deck deck)
+ {
+ pickCardFromDeck(deck,NUMBER_OF_CARDS_IN_STARTING_HAND);
+ }
+
+ public List getHand() {
+ return hand;
+ }
+}
diff --git a/app/src/main/java/com/iutlaval/myapplication/Game/HandActivity.java b/app/src/main/java/com/iutlaval/myapplication/Game/HandActivity.java
new file mode 100644
index 0000000..cb088c6
--- /dev/null
+++ b/app/src/main/java/com/iutlaval/myapplication/Game/HandActivity.java
@@ -0,0 +1,30 @@
+package com.iutlaval.myapplication.Game;
+
+import androidx.appcompat.app.AppCompatActivity;
+
+import android.content.Intent;
+import android.net.Uri;
+import android.os.Bundle;
+
+import com.iutlaval.myapplication.Game.Decks.Deck;
+import com.iutlaval.myapplication.Game.Decks.DeckRegister;
+import com.iutlaval.myapplication.R;
+
+public class HandActivity extends AppCompatActivity {
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_hand);
+
+ String[] serializedHand = getIntent().getStringArrayExtra("hand");
+ Deck d = DeckRegister.getClassFromName(serializedHand[0],this);
+
+
+ Intent data = new Intent();
+ String text = "Result to be returned....";
+ //---set the data to pass back---
+ data.setData(Uri.parse(text));
+ setResult(RESULT_OK, data);
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/iutlaval/myapplication/Game/TouchHandler.java b/app/src/main/java/com/iutlaval/myapplication/Game/TouchHandler.java
index dfe8990..6abde2c 100644
--- a/app/src/main/java/com/iutlaval/myapplication/Game/TouchHandler.java
+++ b/app/src/main/java/com/iutlaval/myapplication/Game/TouchHandler.java
@@ -1,16 +1,19 @@
package com.iutlaval.myapplication.Game;
+import android.content.Intent;
import android.view.MotionEvent;
import com.iutlaval.myapplication.GameActivity;
+import com.iutlaval.myapplication.MainActivity;
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 float TouchDeltaX = 0;
+ private float TouchDeltaY = 0;
+ private float originalPositionX = 0;
+ private float originalPositionY = 0;
private DrawableCard moveEventCard = null;
private Renderer renderer;
@@ -28,17 +31,23 @@ public class TouchHandler {
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();
+ if(unscalled_Y <= 90F) {
+ moveEventCard = renderer.getCardOn(unscalled_X, unscalled_Y);
+ if (moveEventCard != null) {
+ TouchDeltaY = unscalled_Y - moveEventCard.getY();
+ TouchDeltaX = unscalled_X - moveEventCard.getX();
+ originalPositionX = moveEventCard.getX();
+ originalPositionY = moveEventCard.getY();
+ }
}
} else if (event.getAction() == MotionEvent.ACTION_UP) {
+ TouchDeltaY = 0;
+ TouchDeltaX = 0;
+ //TODO detect zones
+ if(moveEventCard != null)renderer.moveToDraw(originalPositionX,originalPositionY,moveEventCard.getName());
moveEventCard = null;
- deltaY = 0;
- deltaX = 0;
} else if (moveEventCard != null) {
- moveEventCard.setCoordinates(unscalled_X - deltaX, unscalled_Y - deltaY);
+ moveEventCard.setCoordinates(unscalled_X - TouchDeltaX, unscalled_Y - TouchDeltaY);
renderer.updateFrame();
}
}
diff --git a/app/src/main/java/com/iutlaval/myapplication/Video/Drawables/DrawableCard.java b/app/src/main/java/com/iutlaval/myapplication/Video/Drawables/DrawableCard.java
index 4bdc6df..7d7ad49 100644
--- a/app/src/main/java/com/iutlaval/myapplication/Video/Drawables/DrawableCard.java
+++ b/app/src/main/java/com/iutlaval/myapplication/Video/Drawables/DrawableCard.java
@@ -19,7 +19,7 @@ import com.iutlaval.myapplication.Video.Rectangle;
*/
public class DrawableCard extends Drawable{
- private static final int CARD_WITH = 14;
+ public static final int CARD_WITH = 14;
private static final int CARD_HEIGHT = 40;
private static final float HP_ATK_FONT_SIZE_BIG_CARD =30F;
private static final float HP_ATK_FONT_SIZE_BOARD =70F;
diff --git a/app/src/main/res/layout/activity_hand.xml b/app/src/main/res/layout/activity_hand.xml
new file mode 100644
index 0000000..8901dfb
--- /dev/null
+++ b/app/src/main/res/layout/activity_hand.xml
@@ -0,0 +1,9 @@
+
+
+
+
\ No newline at end of file