Automatic decking for cards that overlap too close together.
This commit is contained in:
@@ -19,6 +19,7 @@ public class Card {
|
|||||||
private float sizeY;
|
private float sizeY;
|
||||||
private int id;
|
private int id;
|
||||||
private boolean faceUp;
|
private boolean faceUp;
|
||||||
|
private boolean decked;
|
||||||
//private boolean onTable;
|
//private boolean onTable;
|
||||||
//private float orientation;
|
//private float orientation;
|
||||||
|
|
||||||
@@ -60,22 +61,6 @@ public class Card {
|
|||||||
this.faceUp = false;
|
this.faceUp = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
public void drawCardSprite(SpriteBatch batch,Point point, float sizeX, float sizeY){
|
|
||||||
this.cardSprite.setPosition(point.getX(), point.getY());
|
|
||||||
this.cardSprite.setSize(sizeX, sizeY);
|
|
||||||
this.cardSprite.draw(batch);
|
|
||||||
//this.position = point;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void drawCardSprite(SpriteBatch batch, float sizeX, float sizeY){
|
|
||||||
this.cardSprite.setPosition(this.position.getX(), this.position.getY());
|
|
||||||
this.cardSprite.setSize(sizeX, sizeY);
|
|
||||||
this.cardSprite.draw(batch);
|
|
||||||
//this.sizeX = sizeX;
|
|
||||||
//this.sizeY = sizeY;
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
|
|
||||||
public void drawCardSprite(SpriteBatch batch){
|
public void drawCardSprite(SpriteBatch batch){
|
||||||
//this.cardSprite.setCenter(this.cardSprite.getX() + 1, this.cardSprite.getY() + 1);
|
//this.cardSprite.setCenter(this.cardSprite.getX() + 1, this.cardSprite.getY() + 1);
|
||||||
@@ -162,4 +147,12 @@ public class Card {
|
|||||||
public void setBackSprite(Sprite backSprite) {
|
public void setBackSprite(Sprite backSprite) {
|
||||||
this.backSprite = backSprite;
|
this.backSprite = backSprite;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public boolean isDecked() {
|
||||||
|
return decked;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setDecked(boolean decked) {
|
||||||
|
this.decked = decked;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ package checamon.games.virtuacards;
|
|||||||
import com.badlogic.gdx.graphics.Texture;
|
import com.badlogic.gdx.graphics.Texture;
|
||||||
import com.badlogic.gdx.graphics.g2d.SpriteBatch;
|
import com.badlogic.gdx.graphics.g2d.SpriteBatch;
|
||||||
import com.badlogic.gdx.graphics.g2d.TextureRegion;
|
import com.badlogic.gdx.graphics.g2d.TextureRegion;
|
||||||
|
import com.badlogic.gdx.math.Rectangle;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
@@ -61,7 +62,7 @@ public class Deck {
|
|||||||
public void drawCards(SpriteBatch batch) {
|
public void drawCards(SpriteBatch batch) {
|
||||||
|
|
||||||
int i = 0;
|
int i = 0;
|
||||||
while (i <= numberOfCards){
|
while (i < numberOfCards){
|
||||||
if (drawOrder.get(i) > -1)
|
if (drawOrder.get(i) > -1)
|
||||||
cards.get(drawOrder.get(i)).drawCardSprite(batch);
|
cards.get(drawOrder.get(i)).drawCardSprite(batch);
|
||||||
i++;
|
i++;
|
||||||
@@ -74,7 +75,7 @@ public class Deck {
|
|||||||
boolean result = false;
|
boolean result = false;
|
||||||
int i = 0;
|
int i = 0;
|
||||||
|
|
||||||
while (i <= numberOfCards && !exit){
|
while (i < numberOfCards && !exit){
|
||||||
if (drawOrder.get(i) > -1){
|
if (drawOrder.get(i) > -1){
|
||||||
if (cards.get(drawOrder.get(i)).isTouched(x, y)) {
|
if (cards.get(drawOrder.get(i)).isTouched(x, y)) {
|
||||||
result = true;
|
result = true;
|
||||||
@@ -92,7 +93,7 @@ public class Deck {
|
|||||||
boolean result = false;
|
boolean result = false;
|
||||||
int i = 0;
|
int i = 0;
|
||||||
|
|
||||||
while (i <= numberOfCards && !exit){
|
while (i < numberOfCards && !exit){
|
||||||
if (drawOrder.get(i) > -1){
|
if (drawOrder.get(i) > -1){
|
||||||
if (cards.get(drawOrder.get(i)).isTouchedDragged(x, y)) {
|
if (cards.get(drawOrder.get(i)).isTouchedDragged(x, y)) {
|
||||||
result = true;
|
result = true;
|
||||||
@@ -104,10 +105,54 @@ public class Deck {
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public boolean isCardTouchedTopOfDeck(float x, float y){
|
||||||
|
boolean exit = false;
|
||||||
|
boolean result = false;
|
||||||
|
int touchCounter = 0;
|
||||||
|
int i = 0;
|
||||||
|
|
||||||
|
while (i < numberOfCards && !exit){
|
||||||
|
if (drawOrder.get(i) > -1){
|
||||||
|
if (cards.get(drawOrder.get(i)).isTouched(x, y)) {
|
||||||
|
if (touchCounter == 0)
|
||||||
|
touchCounter++;
|
||||||
|
else if (touchCounter == 1) {
|
||||||
|
exit = true;
|
||||||
|
result = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isCardTouchedDraggedTopOfDeck(float x, float y){
|
||||||
|
boolean exit = false;
|
||||||
|
boolean result = false;
|
||||||
|
int touchCounter = 0;
|
||||||
|
int i = 0;
|
||||||
|
|
||||||
|
while (i < numberOfCards && !exit){
|
||||||
|
if (drawOrder.get(i) > -1){
|
||||||
|
if (cards.get(drawOrder.get(i)).isTouchedDragged(x, y)) {
|
||||||
|
if (touchCounter == 0)
|
||||||
|
touchCounter++;
|
||||||
|
else if (touchCounter == 1) {
|
||||||
|
exit = true;
|
||||||
|
result = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
public Card getTouchedDraggedCard(float x, float y){
|
public Card getTouchedDraggedCard(float x, float y){
|
||||||
|
|
||||||
Card cardResult = null;
|
Card cardResult = null;
|
||||||
int i = numberOfCards;
|
int i = numberOfCards - 1;
|
||||||
boolean exit = false;
|
boolean exit = false;
|
||||||
|
|
||||||
while (i >= 0 && !exit){
|
while (i >= 0 && !exit){
|
||||||
@@ -118,7 +163,9 @@ public class Deck {
|
|||||||
i--;
|
i--;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (i < numberOfCards)
|
|
||||||
|
//TODO Change this to not move to the top until is sure no other cards need to move
|
||||||
|
if (i < numberOfCards - 1)
|
||||||
setCardDrawOrderOnTop(i);
|
setCardDrawOrderOnTop(i);
|
||||||
return cardResult;
|
return cardResult;
|
||||||
}
|
}
|
||||||
@@ -126,7 +173,7 @@ public class Deck {
|
|||||||
public Card getTouchedCard(float x, float y){
|
public Card getTouchedCard(float x, float y){
|
||||||
|
|
||||||
Card cardResult = null;
|
Card cardResult = null;
|
||||||
int i = numberOfCards;
|
int i = numberOfCards - 1;
|
||||||
boolean exit = false;
|
boolean exit = false;
|
||||||
|
|
||||||
while (i >= 0 && !exit){
|
while (i >= 0 && !exit){
|
||||||
@@ -137,7 +184,8 @@ public class Deck {
|
|||||||
i--;
|
i--;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (i < numberOfCards)
|
//TODO Change this to not move to the top until is sure no other cards need to move
|
||||||
|
if (i < numberOfCards - 1)
|
||||||
setCardDrawOrderOnTop(i);
|
setCardDrawOrderOnTop(i);
|
||||||
|
|
||||||
return cardResult;
|
return cardResult;
|
||||||
@@ -166,8 +214,8 @@ public class Deck {
|
|||||||
int next = 0;
|
int next = 0;
|
||||||
int replace = drawOrder.get(index);;
|
int replace = drawOrder.get(index);;
|
||||||
|
|
||||||
while (i <= numberOfCards){
|
while (i < numberOfCards){
|
||||||
if (i < numberOfCards) {
|
if (i < numberOfCards-1) {
|
||||||
next = drawOrder.get(i + 1);
|
next = drawOrder.get(i + 1);
|
||||||
drawOrder.put(i,next);
|
drawOrder.put(i,next);
|
||||||
i++;
|
i++;
|
||||||
@@ -194,6 +242,8 @@ public class Deck {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void shuffle(float x, float y){
|
public void shuffle(float x, float y){
|
||||||
|
//TODO Change this method, the top may not work when cards already unsorted
|
||||||
|
|
||||||
ArrayList<Integer> subDeck = new ArrayList<Integer>();
|
ArrayList<Integer> subDeck = new ArrayList<Integer>();
|
||||||
Card c;
|
Card c;
|
||||||
int top = numberOfCards-1;
|
int top = numberOfCards-1;
|
||||||
@@ -219,6 +269,77 @@ public class Deck {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void moveDeckTouched(float x, float y){
|
||||||
|
Card c = getTouchedCard(x,y);
|
||||||
|
Card card;
|
||||||
|
float deltaX;
|
||||||
|
float deltaY;
|
||||||
|
|
||||||
|
Rectangle r = c.getCardRectangle();
|
||||||
|
c.setCenter(new Point(x,y));
|
||||||
|
Rectangle r2 = c.getCardRectangle();
|
||||||
|
|
||||||
|
deltaX = r2.getX() - r.getX();
|
||||||
|
deltaY = r2.getY() - r.getY();
|
||||||
|
|
||||||
|
//Move all cards in the deck
|
||||||
|
int i = c.getId() - 1;
|
||||||
|
|
||||||
|
while (i >= 0){
|
||||||
|
card = cards.get(drawOrder.get(i));
|
||||||
|
if (drawOrder.get(i) > -1 && card.isTouched(x, y)) {
|
||||||
|
card.setPosition(new Point(card.getCardSprite().getX() + deltaX, card.getCardSprite().getY() + deltaY));
|
||||||
|
}else{
|
||||||
|
i--;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public void moveDeckTouchedDragged(float x, float y){
|
||||||
|
Card c = getTouchedCard(x,y);
|
||||||
|
Card card;
|
||||||
|
float deltaX;
|
||||||
|
float deltaY;
|
||||||
|
|
||||||
|
Rectangle r = c.getCardRectangle();
|
||||||
|
c.setCenter(new Point(x,y));
|
||||||
|
Rectangle r2 = c.getCardRectangle();
|
||||||
|
|
||||||
|
deltaX = r2.getX() - r.getX();
|
||||||
|
deltaY = r2.getY() - r.getY();
|
||||||
|
|
||||||
|
//Move all cards in the deck
|
||||||
|
int i = c.getId() - 1;
|
||||||
|
|
||||||
|
while (i >= 0){
|
||||||
|
card = cards.get(drawOrder.get(i));
|
||||||
|
if (drawOrder.get(i) > -1 && card.isTouchedDragged(x, y)) {
|
||||||
|
card.setPosition(new Point(card.getCardSprite().getX() + deltaX, card.getCardSprite().getY() + deltaY));
|
||||||
|
}else{
|
||||||
|
i--;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void autoDeckCard(float x, float y){
|
||||||
|
Card c = getTouchedCard(x,y);
|
||||||
|
Card below = getTouchedCard(x,y, numberOfCards - 2);
|
||||||
|
|
||||||
|
// Detect if overlapping enough to deck automatically
|
||||||
|
// by default cards are 150 x 190
|
||||||
|
if (below != null) {
|
||||||
|
if (((c.getCardSprite().getX() <= below.getCardSprite().getX() + 35) && (c.getCardSprite().getX() >= below.getCardSprite().getX() - 35)) &&
|
||||||
|
((c.getCardSprite().getY() <= below.getCardSprite().getY() + 35) && (c.getCardSprite().getY() >= below.getCardSprite().getY() - 35))) {
|
||||||
|
Rectangle r = below.getCardRectangle();
|
||||||
|
c.setPosition(new Point(r.getX(), r.getY()));
|
||||||
|
c.setDecked(true);
|
||||||
|
}else{
|
||||||
|
c.setDecked(false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public HashMap<Integer,Integer> getDrawOrder() {
|
public HashMap<Integer,Integer> getDrawOrder() {
|
||||||
return drawOrder;
|
return drawOrder;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -150,15 +150,19 @@ public class VirtuaCardsGameScreen implements Screen, InputProcessor {
|
|||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public boolean touchUp(int screenX, int screenY, int pointer, int button) {
|
public boolean touchUp(int screenX, int screenY, int pointer, int button) {
|
||||||
|
Card c;
|
||||||
|
|
||||||
if (Point.pointListInsideDoubleTouchedDrag(dragBuffer, 75, 150) && dragCounter > 0) { //flip card
|
if (dragCounter > 0) {
|
||||||
|
c = fullDeck.getTouchedDraggedCard(screenX, Gdx.graphics.getHeight() - screenY);
|
||||||
|
if (c != null) {
|
||||||
|
fullDeck.autoDeckCard(screenX, Gdx.graphics.getHeight() - screenY);
|
||||||
|
if (Point.pointListInsideDoubleTouchedDrag(dragBuffer, 75, 150)) { //flip card
|
||||||
//fullDeck.getCards().get(52).setFaceUp(true);
|
//fullDeck.getCards().get(52).setFaceUp(true);
|
||||||
fullDeck.getTouchedDraggedCard(screenX, Gdx.graphics.getHeight() - screenY).toggleFaceUp();
|
c.toggleFaceUp();
|
||||||
}
|
}
|
||||||
/*else// if (cardCounter == 1)
|
}
|
||||||
{
|
}
|
||||||
fullDeck.shuffle(screenX, Gdx.graphics.getHeight() - screenY);
|
|
||||||
}*/
|
|
||||||
dragCounter = 0;
|
dragCounter = 0;
|
||||||
dragBuffer.clear();
|
dragBuffer.clear();
|
||||||
cardCounter = 0;
|
cardCounter = 0;
|
||||||
|
|||||||
Reference in New Issue
Block a user