diff --git a/frontend/src/app/feature/game/coinflip/coinflip.component.css b/frontend/src/app/feature/game/coinflip/coinflip.component.css index ba7838c..a1548ab 100644 --- a/frontend/src/app/feature/game/coinflip/coinflip.component.css +++ b/frontend/src/app/feature/game/coinflip/coinflip.component.css @@ -1,55 +1,106 @@ -/* Custom CSS for 3D Transformations and Coin Flip (using animation classes) */ +/* Custom CSS for 3D Transformations and Coin Flip */ @keyframes flipToHeads { 0% { - transform: rotateY(0deg) rotateX(0deg); + transform: rotateY(0); } 100% { - transform: rotateX(2880deg) rotateY(1440deg); + transform: rotateY(1800deg); /* End with heads facing up (even number of Y rotations) */ } } @keyframes flipToTails { 0% { - transform: rotateY(0deg) rotateX(0deg); /* Start with no rotation */ + transform: rotateY(0); } 100% { - transform: rotateX(-2880deg) rotateY(1620deg); /* Example: Reverse X rotation, and land on tails */ + transform: rotateY(1980deg); /* End with tails facing up (odd number of Y rotations) */ } } .coin-container { - width: 150px; /* Set the size of the coin */ - height: 150px; - perspective: 1000px; /* Adds 3D perspective */ + width: 180px; + height: 180px; + perspective: 1000px; + margin: 20px auto; } .coin { width: 100%; height: 100%; position: relative; - transform-style: preserve-3d; /* Crucial for 3D transformations */ + transform-style: preserve-3d; + transition: transform 0.01s; + transform: rotateY(0deg); + box-shadow: 0 0 30px rgba(0, 0, 0, 0.4); } .coin-side { - /* Common styles for both front and back */ width: 100%; height: 100%; position: absolute; - backface-visibility: hidden; /* Hide the back of both sides initially */ - border-radius: 50%; /* Make it circular */ + backface-visibility: hidden; + border-radius: 50%; + display: flex; + align-items: center; + justify-content: center; + font-weight: bold; + font-size: 24px; + box-shadow: inset 0 0 15px rgba(0, 0, 0, 0.2); + border: 8px solid rgba(255, 255, 255, 0.2); +} + +.front { + background: linear-gradient(45deg, #ffd700, #ffb700); + color: #333; + z-index: 2; } .back { - transform: rotateY( - 180deg - ); /* Rotate the back to face the opposite direction (Y-axis for horizontal flip) */ + transform: rotateY(180deg); + background: linear-gradient(45deg, #5a5a5a, #333333); + color: white; + z-index: 1; + /* Fix text display on the back of the coin */ + backface-visibility: hidden; } -/* Classes to trigger the specific animation */ +/* Fix reversed text on tails side by applying a counter-rotation to just the text */ +.back > span { + display: inline-block; + transform: rotateY(180deg); /* Counter-rotate the text so it appears correctly */ +} + +/* Animation classes */ .coin.animate-to-heads { - animation: flipToHeads 1s ease-in-out forwards; /* Apply the animation */ + animation: flipToHeads 1s ease-in-out forwards; } .coin.animate-to-tails { - animation: flipToTails 1s ease-in-out forwards; /* Apply the animation */ + animation: flipToTails 1s ease-in-out forwards; +} + +/* Make the buttons more responsive */ +button:not([disabled]) { + cursor: pointer; + transition: all 0.2s ease; +} + +button:not([disabled]):hover { + transform: translateY(-2px); + box-shadow: 0 5px 15px rgba(0, 0, 0, 0.2); +} + +button:not([disabled]):active { + transform: translateY(1px); +} + +/* Animation for results */ +@keyframes popIn { + 0% { transform: scale(0.8); opacity: 0; } + 70% { transform: scale(1.1); opacity: 1; } + 100% { transform: scale(1); opacity: 1; } +} + +.result-text { + animation: popIn 0.5s ease-out forwards; } diff --git a/frontend/src/app/feature/game/coinflip/coinflip.component.html b/frontend/src/app/feature/game/coinflip/coinflip.component.html index 8d2c78a..57736f5 100644 --- a/frontend/src/app/feature/game/coinflip/coinflip.component.html +++ b/frontend/src/app/feature/game/coinflip/coinflip.component.html @@ -1,42 +1,89 @@ -
Coinflip works!
- -+ Coin landed on: {{ gameResult()?.coinSide === 'HEAD' ? 'HEAD' : 'TAILS' }} +
+ @if (gameResult()?.isWin || gameResult()?.win) { ++ +{{ gameResult()?.payout | currency: 'EUR' }} +
+ } +{{ errorMessage() }}
+