Skip to content

Commit f613e25

Browse files
authored
Build 0.9.3-beta release (#1)
* animations done starting sound build0.9.1 release * Build 0.9.3 release
1 parent 11e0992 commit f613e25

File tree

274 files changed

+24516
-1150
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

274 files changed

+24516
-1150
lines changed

App.js

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -30,28 +30,36 @@ export default function App() {
3030
const handlePreferenceLoad = async () => {
3131
const storedPreferences = await getStoredPreferences()
3232
if (!storedPreferences) {
33-
console.log("no stored prefs")
3433
const newPreferencesObj = {
3534
deckTheme: "Default",
36-
sounds: false
35+
sounds: true,
36+
tableTheme: "table-green"
3737
}
3838
setAppPreferences(newPreferencesObj)
3939
storePreferences(newPreferencesObj)
40-
} else setAppPreferences(storedPreferences)
40+
} else {
41+
if (storedPreferences.deckTheme === undefined || storedPreferences.sounds === undefined || storedPreferences.tableTheme === undefined) {
42+
if (storedPreferences.deckTheme === undefined) storedPreferences.deckTheme = "Default"
43+
if (storedPreferences.sounds === undefined) storedPreferences.sounds = true
44+
if (storedPreferences.tableTheme === undefined) storedPreferences.tableTheme = "table-green"
45+
storePreferences(storedPreferences)
46+
}
47+
setAppPreferences(storedPreferences)
48+
}
4149
}
4250

4351
useEffect(() => {
4452
handlePreferenceLoad()
4553
}, [])
4654

4755
useEffect(() => {
48-
console.log("app preferences changed - saving now")
4956
if (appPreferences !== {}) {
5057
storePreferences(appPreferences)
5158
}
5259
}, [appPreferences])
5360

5461
if (appPreferences === {}) return null
62+
5563
else return (
5664
<GameContext appPreferences={appPreferences} setAppPreferences={setAppPreferences}>
5765
<Flex color={colors.background}>

Components/Card.js

Lines changed: 47 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,27 @@
11
import React, { useState, useContext, useEffect, useRef } from "react"
22
import { Animated, PanResponder, StyleSheet } from "react-native";
33
import { DataContext } from "../GameContext"
4-
import { cardImages, blankCard, sleep } from "../Data/data"
4+
import { cardImages, blankCard, sleep, sounds } from "../Data/data"
5+
import { Audio } from "expo-av";
56

6-
export default function Card({ card, scale, use, position }) {
7-
const { setPlayerChoice, upTrump, appPreferences } = useContext(DataContext)
7+
export default function Card({ card, scale, use, position, order }) {
8+
const { setPlayerChoice, upTrump, appPreferences, matchStage, enableSound } = useContext(DataContext)
89
const [isTrump, setIsTrump] = useState(false)
910
const cardCode = card === blankCard ? "blank" : "" + card.suit.code + card.faceValue.toLowerCase()
10-
const [imageURL, setImageURL] = useState(cardImages[appPreferences.deckTheme][cardCode])
11+
const [imageURL, setImageURL] = useState(cardImages[appPreferences.deckTheme][card === blankCard ? "blank" : "" + card.suit.code + card.faceValue.toLowerCase()])
1112

12-
useEffect(() => {
13-
setImageURL(cardImages[appPreferences.deckTheme][cardCode])
14-
}, [appPreferences.deckTheme, cardCode])
13+
async function playCardSound() {
14+
const { sound } = await Audio.Sound.createAsync(
15+
sounds.play,
16+
{ isMuted: !enableSound, volume: .2 }
17+
)
18+
await sound.playAsync()
19+
}
1520

16-
const moveAnim = useRef(new Animated.ValueXY()).current;
21+
const moveAnim = useRef(new Animated.ValueXY()).current
1722
const fadeAnim = useRef(new Animated.Value(1)).current
1823
const scaleAnim = useRef(new Animated.Value(1)).current
24+
const dealAnim = useRef(new Animated.Value(250)).current
1925

2026
const dragResponder = useRef(
2127
PanResponder.create({
@@ -30,6 +36,7 @@ export default function Card({ card, scale, use, position }) {
3036
onPanResponderRelease: () => {
3137
if (moveAnim.y._value < -150.0) {
3238
// PASSED THRESHOLD FOR ACTION
39+
playCardSound()
3340
if (!isTrump) {
3441
Animated.spring(moveAnim, { toValue: { x: moveAnim.x, y: -350 }, useNativeDriver: true }).start();
3542
Animated.timing(fadeAnim, { toValue: 0, duration: 500, useNativeDriver: true }).start();
@@ -44,19 +51,32 @@ export default function Card({ card, scale, use, position }) {
4451
})
4552
).current;
4653

54+
const moveUp = () => {
55+
Animated.timing(
56+
dealAnim,
57+
{
58+
toValue: 0,
59+
delay: (1 + order) * 100,
60+
duration: 250,
61+
useNativeDriver: true
62+
}
63+
).start();
64+
};
65+
66+
4767
let transform
4868

4969
switch (position) {
5070
case 0: {
51-
transform = [{ rotate: "-3deg" },]
71+
transform = [{ rotate: "-2deg" }, { translateX: -206 }, { translateY: -40 }]
5272
break
5373
}
5474
case 1: {
5575
transform = [{ rotate: "-8deg" }, { translateX: 34 }, { translateY: -30 }]
5676
break
5777
}
5878
case 2: {
59-
transform = [{ rotate: "3deg" }, { translateY: -100 }]
79+
transform = [{ rotate: "4deg" }, { translateY: -100 }]
6080
break
6181
}
6282
case 3: {
@@ -68,13 +88,11 @@ export default function Card({ card, scale, use, position }) {
6888

6989
const styles = StyleSheet.create({
7090
hand: {
71-
borderRadius: 20,
7291
marginLeft: -81,
73-
marginRight: -81
92+
marginRight: -81,
7493
},
7594
field: {
7695
transform: transform,
77-
borderRadius: 10,
7896
width: 194 * scale,
7997
height: 268 * scale,
8098
}
@@ -92,19 +110,29 @@ export default function Card({ card, scale, use, position }) {
92110

93111
const selectedStyle = use === "HAND" ? [styles.hand, animStyles.hand] : [styles.field, animStyles.field]
94112
if (position === 0) {
95-
selectedStyle.push({ position: "absolute", bottom: 50 })
113+
selectedStyle.push({ position: "absolute" })
96114
}
97115

98116
useEffect(() => {
99117
if (card === upTrump) setIsTrump(true)
100118
else setIsTrump(false)
101119
}, [upTrump])
102120

121+
useEffect(() => {
122+
moveUp()
123+
}, [])
124+
125+
useEffect(() => {
126+
setImageURL(cardImages[appPreferences.deckTheme][cardCode])
127+
}, [appPreferences.deckTheme, cardCode])
128+
103129
return (
104-
<Animated.Image
105-
source={imageURL}
106-
style={selectedStyle}
107-
{...dragResponder.panHandlers}
108-
/>
130+
<Animated.View style={{ transform: [{ translateY: matchStage === "DEAL" ? dealAnim : 0 }] }}>
131+
<Animated.Image
132+
source={imageURL}
133+
style={selectedStyle}
134+
{...dragResponder.panHandlers}
135+
/>
136+
</Animated.View>
109137
)
110138
}

Components/ControlPanel.js

Lines changed: 1 addition & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -40,17 +40,4 @@ const localStyles = StyleSheet.create({
4040
paddingHorizontal: 14,
4141
opacity: .67
4242
}
43-
})
44-
45-
// style = {({ pressed }) => {
46-
// return (
47-
// {
48-
// accessibilityLabel: altText,
49-
// backgroundColor: pressed ? pressColor : color,
50-
// paddingVertical: 10,
51-
// paddingHorizontal: 20,
52-
// borderRadius: 30,
53-
// margin: 10
54-
// }
55-
// )
56-
// }}
43+
})

Components/DeckThemeChoice.js

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
import React, { useContext, useEffect, useState } from 'react'
22
import { Image, Pressable, StyleSheet, View } from 'react-native'
3-
import { Body, DefaultText, Subtitle } from '../CoreElements/fontStyles'
3+
import { Body, Subtitle } from '../CoreElements/fontStyles'
44
import { DataContext } from "../GameContext"
55
import { iconSVGs, colors, themeSamples } from '../CoreElements/theme'
6-
import Svg, { Path } from 'react-native-svg'
6+
import { ButtonURLLink } from '../CoreElements/buttonStyles'
77

88
export default function DeckThemeChoice({ deck }) {
99
const { appPreferences, setAppPreferences } = useContext(DataContext)
@@ -12,7 +12,6 @@ export default function DeckThemeChoice({ deck }) {
1212
const handleThemeChange = () => {
1313
setAppPreferences({ ...appPreferences, deckTheme: deck })
1414
}
15-
1615
useEffect(() => {
1716
if (appPreferences.deckTheme === deck) setChosen(true)
1817
else setChosen(false)
@@ -27,18 +26,24 @@ export default function DeckThemeChoice({ deck }) {
2726
borderRadius: 14,
2827
padding: 10,
2928
marginVertical: 10,
30-
width: 250
29+
width: 250,
30+
opacity: deck === "Year2099" ? .6 : 1
3131
},
3232
})
3333

3434
return (
35-
<Pressable onPress={appPreferences.deckTheme !== deck ? handleThemeChange : null}>
35+
<Pressable onPress={appPreferences.deckTheme !== deck && deck !== 'Year2099' ? handleThemeChange : null}>
3636
<View style={styles.container}>
37-
<Subtitle align="left" override={{ fontSize: 18 }}>{deck}</Subtitle>
37+
<Subtitle align="left" override={{ fontSize: 18, top: 5, marginBottom: deck === "Year2099" ? 30 : null }}>{deck}</Subtitle>
3838
<Image source={themeSamples[deck]} />
39-
<View style={{ position: "absolute", top: 10, left: 10 }}>
39+
<View style={{ opacity: deck !== "Year2099" ? 1 : .4, position: "absolute", top: 10, left: 10 }}>
4040
{appPreferences.deckTheme === deck ? iconSVGs.toggleOn : iconSVGs.toggleOff}
4141
</View>
42+
{deck === "QueenG" && <View>
43+
<Body override={{ fontSize: 13, lineHeight: 18 }}>QueenG was created by Maayan Segal at 16 years old as the first ever, multi-ethnic deck of cards where men and women are equal. In this deck, the Jack, Queen, and King are represented as Prince/Princess, Duke/Duchess, and Monarch, respectively.</Body>
44+
<Body override={{ fontSize: 13, lineHeight: 18 }}>This is a beautiful set of cards and I highly recommend you pick up a set. You can learn more about Maayan and pick up a QueenG card deck of your own on her <ButtonURLLink url={"https://www.indiegogo.com/projects/queeng-playing-cards-2nd-edition#/"}>Indiegogo</ButtonURLLink> page.</Body>
45+
</View>}
46+
{deck === "Year2099" && <Subtitle override={{ fontSize: 18, paddingVertical: 20, paddingBottom: 8 }}>Coming Soon...</Subtitle>}
4247
</View>
4348
</Pressable>
4449
)

0 commit comments

Comments
 (0)