Add starter pet templates
This commit is contained in:
@@ -72,6 +72,75 @@ private data class CareJournalEntry(
|
||||
val happenedAtMs: Long
|
||||
)
|
||||
|
||||
private data class PetTemplate(
|
||||
val id: String,
|
||||
val label: String,
|
||||
val topLine: String,
|
||||
val facePrefix: String,
|
||||
val faceSuffix: String,
|
||||
val feetLine: String
|
||||
)
|
||||
|
||||
private val lcdPetTemplates = listOf(
|
||||
PetTemplate(
|
||||
id = "classic",
|
||||
label = "Classic",
|
||||
topLine = " /---\\ \n",
|
||||
facePrefix = "( ",
|
||||
faceSuffix = " )\n",
|
||||
feetLine = " /| |\\ "
|
||||
),
|
||||
PetTemplate(
|
||||
id = "scruffy",
|
||||
label = "Scruffy",
|
||||
topLine = " /^^^\\ \n",
|
||||
facePrefix = "( ",
|
||||
faceSuffix = " )\n",
|
||||
feetLine = " /|_|\\ "
|
||||
),
|
||||
PetTemplate(
|
||||
id = "bean",
|
||||
label = "Round Bean",
|
||||
topLine = " .---. \n",
|
||||
facePrefix = "( ",
|
||||
faceSuffix = " )\n",
|
||||
feetLine = " /|\\ "
|
||||
),
|
||||
PetTemplate(
|
||||
id = "pocketpup",
|
||||
label = "Pocket Pup",
|
||||
topLine = " /\\_/\\ \n",
|
||||
facePrefix = "( ",
|
||||
faceSuffix = " )\n",
|
||||
feetLine = " /|\\ "
|
||||
),
|
||||
PetTemplate(
|
||||
id = "batty",
|
||||
label = "Batty",
|
||||
topLine = "/\\---/\\\n",
|
||||
facePrefix = "( ",
|
||||
faceSuffix = " )\n",
|
||||
feetLine = " /|\\ "
|
||||
),
|
||||
PetTemplate(
|
||||
id = "goblin",
|
||||
label = "Goblin",
|
||||
topLine = " /\\_/\\ \n",
|
||||
facePrefix = "( ",
|
||||
faceSuffix = " )\n",
|
||||
feetLine = " /| |\\ "
|
||||
)
|
||||
)
|
||||
|
||||
private fun lcdPetTemplateById(id: String): PetTemplate {
|
||||
return lcdPetTemplates.firstOrNull { it.id == id } ?: lcdPetTemplates.first()
|
||||
}
|
||||
|
||||
private fun renderPetTemplateText(template: PetTemplate, expression: String): String {
|
||||
return template.topLine + template.facePrefix + expression + template.faceSuffix + template.feetLine
|
||||
}
|
||||
|
||||
|
||||
class MainActivity : ComponentActivity() {
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
super.onCreate(savedInstanceState)
|
||||
@@ -376,6 +445,8 @@ fun Greeting(name: String, modifier: Modifier = Modifier) {
|
||||
var pottyFaceBag by remember { mutableStateOf(emptyList<String>()) }
|
||||
var petName by remember { mutableStateOf("") }
|
||||
var pendingPetName by remember { mutableStateOf("") }
|
||||
var petTemplateId by remember { mutableStateOf("classic") }
|
||||
var pendingPetTemplateId by remember { mutableStateOf("classic") }
|
||||
var happyOutsideTrip by remember { mutableStateOf(false) }
|
||||
|
||||
var petAgeDays by remember { mutableIntStateOf(0) }
|
||||
@@ -583,6 +654,8 @@ fun Greeting(name: String, modifier: Modifier = Modifier) {
|
||||
currentWant = save.currentWant
|
||||
petName = save.petName
|
||||
pendingPetName = save.petName
|
||||
petTemplateId = save.petTemplateId.ifBlank { "classic" }
|
||||
pendingPetTemplateId = petTemplateId
|
||||
isSleeping = save.isSleeping
|
||||
sleepMode = save.sleepMode
|
||||
roughWakeAlert = save.roughWakeAlert
|
||||
@@ -648,7 +721,7 @@ fun Greeting(name: String, modifier: Modifier = Modifier) {
|
||||
|
||||
val petAgeText = statAgeText(petAgeDays)
|
||||
val displayPetName = petName.ifBlank { "Pet" }
|
||||
val needsPetName = saveLoaded && petName.isBlank() && !isTradingInPet && !isFindingNewPet
|
||||
val needsPetName = saveLoaded && (petName.isBlank() || petTemplateId.isBlank()) && !isTradingInPet && !isFindingNewPet
|
||||
val trimmedPendingPetName = pendingPetName.trim()
|
||||
val normalizedPendingPetName = trimmedPendingPetName.lowercase()
|
||||
val isNameValidationActive = !testingMode
|
||||
@@ -656,6 +729,8 @@ fun Greeting(name: String, modifier: Modifier = Modifier) {
|
||||
val isReservedPetName = isNameValidationActive && normalizedPendingPetName in reservedPetNames
|
||||
val hasValidPetNameLetters = trimmedPendingPetName.isNotEmpty() && trimmedPendingPetName.all { it.isLetter() }
|
||||
val canKeepPetName = hasValidPetNameLetters && !isReservedPetName
|
||||
val pendingPetTemplate = lcdPetTemplateById(pendingPetTemplateId)
|
||||
val selectedPetTemplate = lcdPetTemplateById(petTemplateId)
|
||||
|
||||
val bondRelationship = when {
|
||||
bond >= 100 -> "BFF"
|
||||
@@ -796,13 +871,13 @@ fun Greeting(name: String, modifier: Modifier = Modifier) {
|
||||
}
|
||||
|
||||
val petArt = buildAnnotatedString {
|
||||
append(" /---\\ \n")
|
||||
append("( ")
|
||||
append(selectedPetTemplate.topLine)
|
||||
append(selectedPetTemplate.facePrefix)
|
||||
withStyle(SpanStyle(fontWeight = if (pottyFaceOverride.isNotEmpty()) FontWeight.Bold else FontWeight.Normal)) {
|
||||
append(petExpression)
|
||||
}
|
||||
append(" )\n")
|
||||
append(" /| |\\ ")
|
||||
append(selectedPetTemplate.faceSuffix)
|
||||
append(selectedPetTemplate.feetLine)
|
||||
}
|
||||
|
||||
val petColor = if (status == "Sick") sickGreen else lcdDark
|
||||
@@ -1343,6 +1418,8 @@ fun Greeting(name: String, modifier: Modifier = Modifier) {
|
||||
careJournalEntries = emptyList()
|
||||
petName = ""
|
||||
pendingPetName = ""
|
||||
petTemplateId = "classic"
|
||||
pendingPetTemplateId = "classic"
|
||||
happyOutsideTrip = false
|
||||
petAgeDays = 0
|
||||
careScore = 0
|
||||
@@ -1397,6 +1474,7 @@ fun Greeting(name: String, modifier: Modifier = Modifier) {
|
||||
tradeInProgress = 0,
|
||||
currentWant = currentWant,
|
||||
petName = petName,
|
||||
petTemplateId = petTemplateId,
|
||||
isSleeping = isSleeping,
|
||||
sleepMode = sleepMode,
|
||||
roughWakeAlert = roughWakeAlert,
|
||||
@@ -1438,6 +1516,7 @@ fun Greeting(name: String, modifier: Modifier = Modifier) {
|
||||
tradeInProgress = 0,
|
||||
currentWant = currentWant,
|
||||
petName = petName,
|
||||
petTemplateId = petTemplateId,
|
||||
isSleeping = isSleeping,
|
||||
sleepMode = sleepMode,
|
||||
roughWakeAlert = roughWakeAlert,
|
||||
@@ -1652,6 +1731,7 @@ fun Greeting(name: String, modifier: Modifier = Modifier) {
|
||||
tradeInProgress = tradeInProgress,
|
||||
currentWant = currentWant,
|
||||
petName = petName,
|
||||
petTemplateId = petTemplateId,
|
||||
isSleeping = isSleeping,
|
||||
sleepMode = sleepMode,
|
||||
roughWakeAlert = roughWakeAlert,
|
||||
@@ -1700,6 +1780,7 @@ fun Greeting(name: String, modifier: Modifier = Modifier) {
|
||||
tradeInProgress = tradeInProgressBlocks,
|
||||
currentWant = currentWant,
|
||||
petName = petName,
|
||||
petTemplateId = petTemplateId,
|
||||
isSleeping = isSleeping,
|
||||
sleepMode = sleepMode,
|
||||
roughWakeAlert = roughWakeAlert,
|
||||
@@ -2310,6 +2391,7 @@ fun Greeting(name: String, modifier: Modifier = Modifier) {
|
||||
tradeInProgress = tradeInProgress,
|
||||
currentWant = currentWant,
|
||||
petName = petName,
|
||||
petTemplateId = petTemplateId,
|
||||
isSleeping = true,
|
||||
sleepMode = "Auto",
|
||||
roughWakeAlert = roughWakeAlert,
|
||||
@@ -2470,7 +2552,75 @@ fun Greeting(name: String, modifier: Modifier = Modifier) {
|
||||
verticalArrangement = Arrangement.spacedBy(6.dp)
|
||||
) {
|
||||
Text(
|
||||
text = "NAME NEW PET",
|
||||
text = "CHOOSE NEW PET",
|
||||
fontWeight = FontWeight.Bold,
|
||||
textAlign = TextAlign.Center,
|
||||
modifier = Modifier.fillMaxWidth()
|
||||
)
|
||||
|
||||
Text(
|
||||
text = "PET TEMPLATE",
|
||||
fontWeight = FontWeight.Bold,
|
||||
textAlign = TextAlign.Center,
|
||||
modifier = Modifier.fillMaxWidth()
|
||||
)
|
||||
|
||||
Text(
|
||||
text = "Selected: ${pendingPetTemplate.label}",
|
||||
color = lcdDark,
|
||||
fontWeight = FontWeight.Bold,
|
||||
textAlign = TextAlign.Center,
|
||||
modifier = Modifier.fillMaxWidth()
|
||||
)
|
||||
|
||||
lcdPetTemplates.chunked(2).forEach { rowTemplates ->
|
||||
Row(
|
||||
modifier = Modifier.fillMaxWidth(),
|
||||
horizontalArrangement = Arrangement.spacedBy(6.dp)
|
||||
) {
|
||||
rowTemplates.forEach { template ->
|
||||
val isSelectedTemplate = pendingPetTemplateId == template.id
|
||||
|
||||
Box(
|
||||
modifier = Modifier
|
||||
.weight(1f)
|
||||
.border(
|
||||
width = if (isSelectedTemplate) 2.dp else 1.dp,
|
||||
color = if (isSelectedTemplate) lcdDark else lcdFaded
|
||||
)
|
||||
.clickable {
|
||||
pendingPetTemplateId = template.id
|
||||
}
|
||||
.padding(vertical = 4.dp, horizontal = 2.dp),
|
||||
contentAlignment = Alignment.Center
|
||||
) {
|
||||
Column(
|
||||
horizontalAlignment = Alignment.CenterHorizontally
|
||||
) {
|
||||
Text(
|
||||
text = renderPetTemplateText(template, "^_^"),
|
||||
fontSize = 11.sp,
|
||||
lineHeight = 11.sp,
|
||||
fontFamily = FontFamily.Monospace,
|
||||
textAlign = TextAlign.Center,
|
||||
color = lcdDark
|
||||
)
|
||||
Text(
|
||||
text = template.label.uppercase(),
|
||||
fontSize = 10.sp,
|
||||
lineHeight = 10.sp,
|
||||
fontWeight = FontWeight.Bold,
|
||||
textAlign = TextAlign.Center,
|
||||
color = lcdDark
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Text(
|
||||
text = "NAME PET",
|
||||
fontWeight = FontWeight.Bold,
|
||||
textAlign = TextAlign.Center,
|
||||
modifier = Modifier.fillMaxWidth()
|
||||
@@ -2522,6 +2672,7 @@ fun Greeting(name: String, modifier: Modifier = Modifier) {
|
||||
lcdDark = lcdDark,
|
||||
lcdFaded = lcdFaded,
|
||||
onClick = {
|
||||
petTemplateId = pendingPetTemplateId
|
||||
petName = trimmedPendingPetName.take(12)
|
||||
pendingPetName = petName
|
||||
statsMenuOpen = false
|
||||
|
||||
Reference in New Issue
Block a user