diff --git a/app/src/main/java/com/helldivers/app/ActivityGame.java b/app/src/main/java/com/helldivers/app/ActivityGame.java index 004705e..4629247 100644 --- a/app/src/main/java/com/helldivers/app/ActivityGame.java +++ b/app/src/main/java/com/helldivers/app/ActivityGame.java @@ -82,7 +82,7 @@ private static final int[][] STRATAGEMS = { new int[]{UP, DOWN, RIGHT, LEFT, UP}, // Reinforce new int[]{DOWN, DOWN, UP, RIGHT}, // Resupply new int[]{UP, DOWN, RIGHT, UP}, // SOS Beacon - new int[]{DOWN, UP, LEFT, DOWN, UP, RIGHT, DOWN, UP}, // NUX-223 Hellbomb + new int[]{DOWN, UP, LEFT, DOWN, UP, RIGHT, DOWN}, // NUX-223 Hellbomb new int[]{DOWN, DOWN, DOWN, UP, UP}, // SSSD Delivery new int[]{UP, UP, LEFT, RIGHT, DOWN, DOWN}, // Seismic Probe new int[]{UP, UP, LEFT, UP, RIGHT}, // Eagle Rearm @@ -190,7 +190,7 @@ private static final String[] NAMES = { private SoundManager soundManager; private Handler handler = new Handler(); - private TextView tvCounter; + private TextView tvCounter, tvFailuresCounter; private ImageView ivStratagemIcon; private LinearLayout sequenceContainer; private ImageButton btnUp, btnDown, btnLeft, btnRight, btnVolver; @@ -200,6 +200,7 @@ private static final String[] NAMES = { private int[] sequence; private int playerIndex = 0; private int completadas = 0; + private int fallos = 0; private boolean esperando = false; private boolean juegoActivo = true; private int currentStratagemIndex = 0; @@ -214,6 +215,7 @@ private static final String[] NAMES = { catch (Exception e) { soundManager = null; } tvCounter = findViewById(R.id.tv_counter); + tvFailuresCounter = findViewById(R.id.tv_failures_counter); ivStratagemIcon = findViewById(R.id.iv_stratagem_icon); sequenceContainer = findViewById(R.id.sequence_container); btnUp = findViewById(R.id.btn_up); @@ -226,14 +228,32 @@ private static final String[] NAMES = { btnVolver.setOnClickListener(v -> finish()); - if (btnUp != null) btnUp.setOnClickListener(v -> onInputWithSound(UP)); - if (btnDown != null) btnDown.setOnClickListener(v -> onInputWithSound(DOWN)); - if (btnLeft != null) btnLeft.setOnClickListener(v -> onInputWithSound(LEFT)); - if (btnRight != null) btnRight.setOnClickListener(v -> onInputWithSound(RIGHT)); + if (btnUp != null) btnUp.setOnClickListener(v -> { animateButtonClick(v); onInputWithSound(UP); }); + if (btnDown != null) btnDown.setOnClickListener(v -> { animateButtonClick(v); onInputWithSound(DOWN); }); + if (btnLeft != null) btnLeft.setOnClickListener(v -> { animateButtonClick(v); onInputWithSound(LEFT); }); + if (btnRight != null) btnRight.setOnClickListener(v -> { animateButtonClick(v); onInputWithSound(RIGHT); }); nuevaRonda(); } + private void animateButtonClick(View v) { + // Feedback háptico (vibración corta) + v.performHapticFeedback(android.view.HapticFeedbackConstants.VIRTUAL_KEY); + + // Animación de escala más agresiva y rápida + v.animate() + .scaleX(0.7f) + .scaleY(0.7f) + .setDuration(40) + .withEndAction(() -> v.animate() + .scaleX(1.0f) + .scaleY(1.0f) + .setDuration(150) + .setInterpolator(new android.view.animation.OvershootInterpolator(4.0f)) // Rebote más fuerte + .start()) + .start(); + } + private int getArrowRotation(int dir) { switch(dir) { case UP: return 0; @@ -277,18 +297,20 @@ private static final String[] NAMES = { sequenceContainer.removeAllViews(); for (int i = 0; i < sequence.length; i++) { - TextView arrowView = new TextView(this); - int size = (int)(56 * getResources().getDisplayMetrics().density); - int margin = (int)(4 * getResources().getDisplayMetrics().density); + ImageView arrowView = new ImageView(this); + int size = (int) (45 * getResources().getDisplayMetrics().density); + int margin = (int) (2 * getResources().getDisplayMetrics().density); LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(size, size); params.setMargins(margin, margin, margin, margin); arrowView.setLayoutParams(params); - - arrowView.setText(String.valueOf(ARROW_CHARS.charAt(sequence[i]))); - arrowView.setTextColor(Color.parseColor("#FFFFFF")); - arrowView.setGravity(Gravity.CENTER); - arrowView.setBackgroundResource(R.drawable.arrow_white); - + + arrowView.setImageResource(R.drawable.ic_dpad_button); + arrowView.setBackgroundResource(R.drawable.btn_direction); + arrowView.setRotation(getArrowRotation(sequence[i])); + arrowView.setColorFilter(Color.WHITE); + int padding = (int) (8 * getResources().getDisplayMetrics().density); + arrowView.setPadding(padding, padding, padding, padding); + sequenceContainer.addView(arrowView); } } @@ -309,9 +331,9 @@ private static final String[] NAMES = { if (sequenceContainer != null && playerIndex <= sequence.length) { View child = sequenceContainer.getChildAt(playerIndex - 1); - if (child instanceof TextView) { - TextView arrowView = (TextView) child; - arrowView.setTextColor(Color.parseColor("#00FF00")); + if (child instanceof ImageView) { + ImageView arrowView = (ImageView) child; + arrowView.setColorFilter(Color.parseColor("#fde902")); } } @@ -337,8 +359,11 @@ private static final String[] NAMES = { try { soundManager.playFailure(); } catch (Exception e) {} } juegoActivo = false; - if (ivFailure != null) ivFailure.setVisibility(View.VISIBLE); - handler.postDelayed(this::nuevaRonda, 1500); + fallos++; + if (tvFailuresCounter != null) tvFailuresCounter.setText(String.valueOf(fallos)); + + // Delay de medio segundo antes de reiniciar + handler.postDelayed(this::nuevaRonda, 500); } } diff --git a/app/src/main/java/com/helldivers/app/ActivityQR.java b/app/src/main/java/com/helldivers/app/ActivityQR.java index 7061d37..25bd378 100644 --- a/app/src/main/java/com/helldivers/app/ActivityQR.java +++ b/app/src/main/java/com/helldivers/app/ActivityQR.java @@ -54,14 +54,14 @@ public class ActivityQR extends AppCompatActivity { int width = bitMatrix.getWidth(); int height = bitMatrix.getHeight(); - Bitmap bmp = Bitmap.createBitmap(width, height, Bitmap.Config.RGB_565); + Bitmap bmp = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888); - int black = 0xFF000000; - int white = 0xFFFFFFFF; + int qrColor = 0xFFFFFFFF; // Blanco para los módulos del QR + int transparent = 0x00000000; // Transparente para el fondo for (int x = 0; x < width; x++) { for (int y = 0; y < height; y++) { - bmp.setPixel(x, y, bitMatrix.get(x, y) ? black : white); + bmp.setPixel(x, y, bitMatrix.get(x, y) ? qrColor : transparent); } } diff --git a/app/src/main/res/layout/activity_game.xml b/app/src/main/res/layout/activity_game.xml index d82c6a8..88be895 100644 --- a/app/src/main/res/layout/activity_game.xml +++ b/app/src/main/res/layout/activity_game.xml @@ -9,20 +9,35 @@ - + android:layout_marginBottom="180dp" + android:gravity="center_horizontal" + android:orientation="vertical"> + + + + + \ No newline at end of file