From b2f945390625cd1eb951dd5f4e6aa1ca255560dc Mon Sep 17 00:00:00 2001 From: Joffrey Bion Date: Fri, 9 Jun 2023 02:15:26 +0200 Subject: Add ability to randomly generate game name --- .../ui/components/gameBrowser/CreateGameForm.kt | 53 +- .../ui/components/home/ChooseNameForm.kt | 63 +-- .../ui/components/home/RandomNameGenerator.kt | 488 ------------------ .../sevenwonders/ui/names/RandomNameGenerator.kt | 546 +++++++++++++++++++++ 4 files changed, 596 insertions(+), 554 deletions(-) delete mode 100644 sw-ui/src/main/kotlin/org/luxons/sevenwonders/ui/components/home/RandomNameGenerator.kt create mode 100644 sw-ui/src/main/kotlin/org/luxons/sevenwonders/ui/names/RandomNameGenerator.kt diff --git a/sw-ui/src/main/kotlin/org/luxons/sevenwonders/ui/components/gameBrowser/CreateGameForm.kt b/sw-ui/src/main/kotlin/org/luxons/sevenwonders/ui/components/gameBrowser/CreateGameForm.kt index ae79125b..acc64aaf 100644 --- a/sw-ui/src/main/kotlin/org/luxons/sevenwonders/ui/components/gameBrowser/CreateGameForm.kt +++ b/sw-ui/src/main/kotlin/org/luxons/sevenwonders/ui/components/gameBrowser/CreateGameForm.kt @@ -4,9 +4,9 @@ import blueprintjs.core.* import blueprintjs.icons.* import csstype.* import emotion.react.* +import org.luxons.sevenwonders.ui.names.* import org.luxons.sevenwonders.ui.redux.* import react.* -import react.dom.html.ReactHTML.div import react.dom.html.ReactHTML.form val CreateGameForm = VFC { @@ -15,34 +15,43 @@ val CreateGameForm = VFC { val dispatch = useSwDispatch() val createGame = { dispatch(RequestCreateGame(gameName)) } - div { + form { css { display = Display.flex flexDirection = FlexDirection.row - justifyContent = JustifyContent.spaceBetween } - form { - onSubmit = { e -> - e.preventDefault() + onSubmit = { e -> + e.preventDefault() + createGame() + } + + BpInputGroup { + large = true + placeholder = "Game name" + value = gameName + onChange = { e -> + val input = e.currentTarget + gameName = input.value + } + rightElement = BpButton.create { + title = "Generate random name" + icon = IconNames.RANDOM + minimal = true + onClick = { gameName = randomGameName() } + } + } + BpButton { + title = "Create the game" + intent = Intent.PRIMARY + icon = IconNames.ARROW_RIGHT + large = true + onClick = { e -> + e.preventDefault() // prevents refreshing the page when pressing Enter createGame() } - BpInputGroup { - large = true - placeholder = "Game name" - onChange = { e -> - val input = e.currentTarget - gameName = input.value - } - rightElement = BpButton.create { - minimal = true - intent = Intent.PRIMARY - icon = IconNames.ADD - onClick = { e -> - e.preventDefault() // prevents refreshing the page when pressing Enter - createGame() - } - } + css { + marginLeft = 0.2.rem } } } diff --git a/sw-ui/src/main/kotlin/org/luxons/sevenwonders/ui/components/home/ChooseNameForm.kt b/sw-ui/src/main/kotlin/org/luxons/sevenwonders/ui/components/home/ChooseNameForm.kt index 8de9f53e..47c76a91 100644 --- a/sw-ui/src/main/kotlin/org/luxons/sevenwonders/ui/components/home/ChooseNameForm.kt +++ b/sw-ui/src/main/kotlin/org/luxons/sevenwonders/ui/components/home/ChooseNameForm.kt @@ -4,13 +4,10 @@ import blueprintjs.core.* import blueprintjs.icons.* import csstype.* import emotion.react.* +import org.luxons.sevenwonders.ui.names.* import org.luxons.sevenwonders.ui.redux.* -import org.luxons.sevenwonders.ui.utils.* import react.* -import react.dom.events.* -import react.dom.html.ReactHTML.div import react.dom.html.ReactHTML.form -import web.html.* val ChooseNameForm = VFC { val dispatch = useSwDispatch() @@ -35,56 +32,34 @@ private val ChooseNameFormPresenter = FC { props - e.preventDefault() props.chooseUsername(usernameState) } - RandomNameButton { - onClick = { usernameState = randomGreekName() } - } - spacer() BpInputGroup { large = true placeholder = "Username" - rightElement = SubmitButton.create { - onClick = { e -> - e.preventDefault() - props.chooseUsername(usernameState) - } - } value = usernameState onChange = { e -> val input = e.currentTarget usernameState = input.value } + rightElement = BpButton.create { + title = "Generate random name" + icon = IconNames.RANDOM + minimal = true + onClick = { usernameState = randomGreekName() } + } } - } -} - -private external interface SpecificButtonProps : Props { - var onClick: MouseEventHandler? -} - -private val SubmitButton = FC { props -> - BpButton { - minimal = true - icon = IconNames.ARROW_RIGHT - intent = Intent.PRIMARY - onClick = props.onClick - } -} - -private val RandomNameButton = FC { props -> - BpButton { - title = "Generate random name" - large = true - icon = IconNames.RANDOM - intent = Intent.PRIMARY - onClick = props.onClick - } -} + BpButton { + title = "Start" + icon = IconNames.ARROW_RIGHT + intent = Intent.PRIMARY + large = true + onClick = { e -> + e.preventDefault() + props.chooseUsername(usernameState) + } -// TODO this is so bad I'm dying inside -private fun ChildrenBuilder.spacer() { - div { - css { - margin = Margin(all = 2.px) + css { + marginLeft = 0.2.rem + } } } } diff --git a/sw-ui/src/main/kotlin/org/luxons/sevenwonders/ui/components/home/RandomNameGenerator.kt b/sw-ui/src/main/kotlin/org/luxons/sevenwonders/ui/components/home/RandomNameGenerator.kt deleted file mode 100644 index 2394fa20..00000000 --- a/sw-ui/src/main/kotlin/org/luxons/sevenwonders/ui/components/home/RandomNameGenerator.kt +++ /dev/null @@ -1,488 +0,0 @@ -package org.luxons.sevenwonders.ui.components.home - -import kotlin.random.Random - -internal fun randomGreekName(): String { - val randName = prefixes.random() + suffixes.random() - return if (Random.nextBoolean()) randName else "$randName of ${cities.random()}" -} - -private val prefixes = - listOf( - "Aba", - "Abde", - "Abre", - "Aby", - "Aca", - "Acle", - "Acri", - "Acro", - "Adme", - "Adra", - "Aea", - "Aegi", - "Aei", - "Aeo", - "Aese", - "Aeto", - "Aga", - "Age", - "Agi", - "Agri", - "Aia", - "Aka", - "Akti", - "Ala", - "Alco", - "Ale", - "Alka", - "Alki", - "Alo", - "Alphi", - "Ama", - "Ame", - "Ami", - "Amphi", - "Ana", - "Anchi", - "Andro", - "Ane", - "Anta", - "Anthe", - "Anti", - "Ape", - "Aphi", - "Apo", - "Arca", - "Arche", - "Arci", - "Arga", - "Ari", - "Arra", - "Arte", - "Asca", - "Asta", - "Asty", - "Atro", - "Atta", - "Aute", - "Bace", - "Bae", - "Bali", - "Bio", - "Boe", - "Bria", - "Care", - "Carpo", - "Casto", - "Cea", - "Cebri", - "Cele", - "Cephi", - "Chae", - "Chare", - "Chari", - "Choe", - "Chromi", - "Chryso", - "Cine", - "Cisse", - "Clea", - "Cleo", - "Clyto", - "Cnoe", - "Coe", - "Cordy", - "Cory", - "Crati", - "Creti", - "Croe", - "Ctea", - "Cyre", - "Dae", - "Dami", - "Damo", - "Dana", - "Daphi", - "Davo", - "Dei", - "Dema", - "Demo", - "Deo", - "Derky", - "Dexi", - "Dia", - "Dio", - "Dithy", - "Dore", - "Dori", - "Doro", - "Drya", - "Dymno", - "Eche", - "Eio", - "Ela", - "Elpe", - "Empe", - "Endy", - "Enge", - "Epa", - "Epe", - "Ephi", - "Era", - "Ere", - "Ergi", - "Erxa", - "Euca", - "Euche", - "Eudo", - "Eue", - "Euge", - "Euma", - "Eune", - "Eury", - "Euthy", - "Eva", - "Eve", - "Fae", - "Gale", - "Gany", - "Gaua", - "Genna", - "Gera", - "Glau", - "Gorgo", - "Gyra", - "Hae", - "Hagi", - "Hali", - "Harma", - "Harmo", - "Harpa", - "Hege", - "Heira", - "Heiro", - "Helge", - "Heli", - "Hera", - "Hermo", - "Hiero", - "Hippo", - "Hya", - "Hype", - "Hyrca", - "Iatro", - "Iby", - "Ica", - "Ido", - "Illy", - "Ina", - "Iphi", - "Iro", - "Isa", - "Isma", - "Iso", - "Ithe", - "Kae", - "Kale", - "Kalli", - "Kame", - "Kapa", - "Kari", - "Karo", - "Kau", - "Keo", - "Kera", - "Kleo", - "Krini", - "Krito", - "Labo", - "Lae", - "Lama", - "Lamu", - "Lao", - "Laso", - "Lea", - "Lei", - "Leo", - "Linu", - "Luko", - "Lyca", - "Lyco", - "Lysa", - "Lysi", - "Maca", - "Macha", - "Mae", - "Maia", - "Maka", - "Male", - "Mante", - "Marci", - "Marsy", - "Mega", - "Megi", - "Mela", - "Mele", - "Metho", - "Midy", - "Mise", - "Mono", - "Morsi", - "Myrsi", - "Naste", - "Nausi", - "Nea", - "Nele", - "Neri", - "Nica", - "Nico", - "Nire", - "Nomi", - "Nycti", - "Oche", - "Ocho", - "Oea", - "Oene", - "Oeno", - "Oile", - "Ona", - "One", - "Ophe", - "Ori", - "Orsi", - "Ory", - "Pae", - "Pala", - "Pana", - "Pandi", - "Pani", - "Panta", - "Para", - "Pata", - "Peiri", - "Pele", - "Peli", - "Peri", - "Phae", - "Phala", - "Philo", - "Phyla", - "Poe", - "Poly", - "Praxi", - "Prota", - "Pryta", - "Saby", - "Saty", - "Scama", - "Scytha", - "Sele", - "Sila", - "Simo", - "Sisy", - "Sopho", - "Stesa", - "Sya", - "Sylo", - "Syne", - "Tala", - "Teba", - "Tele", - "Tene", - "Theo", - "Therse", - "Thrasy", - "Tima", - "Tiry", - "Trio", - "Xanthi", - "Xena", - "Xeno", - ) - -private val suffixesMale = - listOf( - "ndros", - "bios", - "bulos", - "chus", - "cles", - "cydes", - "damos", - "dides", - "don", - "doros", - "dotus", - "gnis", - "goras", - "kles", - "kos", - "krates", - "laktos", - "laus", - "leon", - "llias", - "llos", - "llus", - "machos", - "machus", - "menes", - "menos", - "mos", - "ndius", - "nes", - "neus", - "nidas", - "nides", - "nos", - "nthius", - "patros", - "phanes", - "phantes", - "phimus", - "phnus", - "phon", - "phoros", - "phorus", - "phus", - "pides", - "pompos", - "pompus", - "pon", - "ppos", - "rax", - "reas", - "rides", - "ros", - "sias", - "sides", - "sius", - "stius", - "stor", - "stos", - "stus", - "talos", - "thenes", - "theus", - "tios", - ) - -private val suffixesFemale = - listOf( - "ndria", - "boea", - "casta", - "caste", - "cheia", - "chis", - "cleia", - "dee", - "deia", - "dike", - "dina", - "doce", - "dora", - "dusa", - "gaea", - "kia", - "laia", - "lea", - "line", - "llis", - "lope", - "mache", - "mathe", - "meda", - "mede", - "meia", - "mela", - "mene", - "mere", - "mia", - "mina", - "mpias", - "ndra", - "ne", - "neira", - "nessa", - "nia", - "nice", - "niera", - "nike", - "nippe", - "nna", - "nome", - "nope", - "nta", - "nthia", - "pe", - "phae", - "phana", - "phane", - "phile", - "phobe", - "phone", - "pia", - "polis", - "pris", - "pyle", - "reia", - "rine", - "ris", - "rista", - "rpia", - "sia", - "ssa", - "steia", - "stis", - "syne", - "ta", - "tea", - "thea", - "theia", - "thia", - "thippe", - "thra", - "thusa", - "thyia", - "tis", - "trite", - ) - -private val suffixes = suffixesMale + suffixesFemale - -private val cities = - listOf( - "Argos", - "Assos", - "Astypalaia", - "Carystus", - "Chalcis", - "Chios", - "Corfu", - "Corinth", - "Eretria", - "Erythrae", - "Karpathos", - "Kasos", - "Kos", - "Leros", - "Lindos", - "Marathon", - "Megara", - "Miletus", - "Mytilene", - "Naxos", - "Oenoe", - "Paros", - "Patmos", - "Patras", - "Phocis", - "Rhodes", - "Salamis", - "Skiathos", - "Sparta", - "Thasos", - "Thebes", - ) diff --git a/sw-ui/src/main/kotlin/org/luxons/sevenwonders/ui/names/RandomNameGenerator.kt b/sw-ui/src/main/kotlin/org/luxons/sevenwonders/ui/names/RandomNameGenerator.kt new file mode 100644 index 00000000..393df78d --- /dev/null +++ b/sw-ui/src/main/kotlin/org/luxons/sevenwonders/ui/names/RandomNameGenerator.kt @@ -0,0 +1,546 @@ +package org.luxons.sevenwonders.ui.names + +import kotlin.random.Random + +internal fun randomGameName(): String = gameNames.random() + +internal fun randomGreekName(): String { + val randName = prefixes.random() + suffixes.random() + return if (Random.nextBoolean()) randName else "$randName of ${cities.random()}" +} + +private val gameNames = listOf( + "Age of Antiquity", + "Age of Civilization", + "Age of Discovery", + "Age of Empires", + "Age of Wonders", + "Ancient Capitals", + "Ancient Kingdoms", + "Ancient Wonders", + "Cities of Antiquity", + "City of Wonders", + "Empire Builders", + "Empires of the Past", + "Great Monuments", + "Legendary Cities", + "Legends of the Past", + "Lost Empires", + "Magnificent Monuments", + "Magnificent Seven", + "Monuments of the Past", + "Monuments of the World", + "Mythical Kingdoms", + "Secrets of the Past", + "Seven Ancient Wonders", + "Seven Colossi", + "Seven Kingdoms", + "Seven Marvels", + "Seven Wonders Adventures", + "Seven Wonders Chronicles", + "Seven Wonders Enigma", + "Seven Wonders Expedition", + "Seven Wonders Frontier", + "Seven Wonders Legacy", + "Seven Wonders Odyssey", + "Seven Wonders Quest", + "Seven Wonders Saga", + "Seven Wonders Treasures", + "Seven Wonders Voyage", + "Seven Wonders and Beyond", + "The Great Discoveries", + "The Legacy of Wonders", + "The Magic of Seven", + "The Marvelous Seven", + "The Mysteries of Antiquity", + "The Seven Continents", + "The Seven Kingdoms", + "The Seven Legends", + "The Seven Secrets", + "The Seven Treasures", + "Wonders of Nature", + "Wonders of the Ages", + "Wonders of the World", + "Wonders of Time", + "World Treasures", +) + +private val prefixes = + listOf( + "Aba", + "Abde", + "Abre", + "Aby", + "Aca", + "Acle", + "Acri", + "Acro", + "Adme", + "Adra", + "Aea", + "Aegi", + "Aei", + "Aeo", + "Aese", + "Aeto", + "Aga", + "Age", + "Agi", + "Agri", + "Aia", + "Aka", + "Akti", + "Ala", + "Alco", + "Ale", + "Alka", + "Alki", + "Alo", + "Alphi", + "Ama", + "Ame", + "Ami", + "Amphi", + "Ana", + "Anchi", + "Andro", + "Ane", + "Anta", + "Anthe", + "Anti", + "Ape", + "Aphi", + "Apo", + "Arca", + "Arche", + "Arci", + "Arga", + "Ari", + "Arra", + "Arte", + "Asca", + "Asta", + "Asty", + "Atro", + "Atta", + "Aute", + "Bace", + "Bae", + "Bali", + "Bio", + "Boe", + "Bria", + "Care", + "Carpo", + "Casto", + "Cea", + "Cebri", + "Cele", + "Cephi", + "Chae", + "Chare", + "Chari", + "Choe", + "Chromi", + "Chryso", + "Cine", + "Cisse", + "Clea", + "Cleo", + "Clyto", + "Cnoe", + "Coe", + "Cordy", + "Cory", + "Crati", + "Creti", + "Croe", + "Ctea", + "Cyre", + "Dae", + "Dami", + "Damo", + "Dana", + "Daphi", + "Davo", + "Dei", + "Dema", + "Demo", + "Deo", + "Derky", + "Dexi", + "Dia", + "Dio", + "Dithy", + "Dore", + "Dori", + "Doro", + "Drya", + "Dymno", + "Eche", + "Eio", + "Ela", + "Elpe", + "Empe", + "Endy", + "Enge", + "Epa", + "Epe", + "Ephi", + "Era", + "Ere", + "Ergi", + "Erxa", + "Euca", + "Euche", + "Eudo", + "Eue", + "Euge", + "Euma", + "Eune", + "Eury", + "Euthy", + "Eva", + "Eve", + "Fae", + "Gale", + "Gany", + "Gaua", + "Genna", + "Gera", + "Glau", + "Gorgo", + "Gyra", + "Hae", + "Hagi", + "Hali", + "Harma", + "Harmo", + "Harpa", + "Hege", + "Heira", + "Heiro", + "Helge", + "Heli", + "Hera", + "Hermo", + "Hiero", + "Hippo", + "Hya", + "Hype", + "Hyrca", + "Iatro", + "Iby", + "Ica", + "Ido", + "Illy", + "Ina", + "Iphi", + "Iro", + "Isa", + "Isma", + "Iso", + "Ithe", + "Kae", + "Kale", + "Kalli", + "Kame", + "Kapa", + "Kari", + "Karo", + "Kau", + "Keo", + "Kera", + "Kleo", + "Krini", + "Krito", + "Labo", + "Lae", + "Lama", + "Lamu", + "Lao", + "Laso", + "Lea", + "Lei", + "Leo", + "Linu", + "Luko", + "Lyca", + "Lyco", + "Lysa", + "Lysi", + "Maca", + "Macha", + "Mae", + "Maia", + "Maka", + "Male", + "Mante", + "Marci", + "Marsy", + "Mega", + "Megi", + "Mela", + "Mele", + "Metho", + "Midy", + "Mise", + "Mono", + "Morsi", + "Myrsi", + "Naste", + "Nausi", + "Nea", + "Nele", + "Neri", + "Nica", + "Nico", + "Nire", + "Nomi", + "Nycti", + "Oche", + "Ocho", + "Oea", + "Oene", + "Oeno", + "Oile", + "Ona", + "One", + "Ophe", + "Ori", + "Orsi", + "Ory", + "Pae", + "Pala", + "Pana", + "Pandi", + "Pani", + "Panta", + "Para", + "Pata", + "Peiri", + "Pele", + "Peli", + "Peri", + "Phae", + "Phala", + "Philo", + "Phyla", + "Poe", + "Poly", + "Praxi", + "Prota", + "Pryta", + "Saby", + "Saty", + "Scama", + "Scytha", + "Sele", + "Sila", + "Simo", + "Sisy", + "Sopho", + "Stesa", + "Sya", + "Sylo", + "Syne", + "Tala", + "Teba", + "Tele", + "Tene", + "Theo", + "Therse", + "Thrasy", + "Tima", + "Tiry", + "Trio", + "Xanthi", + "Xena", + "Xeno", + ) + +private val suffixesMale = + listOf( + "ndros", + "bios", + "bulos", + "chus", + "cles", + "cydes", + "damos", + "dides", + "don", + "doros", + "dotus", + "gnis", + "goras", + "kles", + "kos", + "krates", + "laktos", + "laus", + "leon", + "llias", + "llos", + "llus", + "machos", + "machus", + "menes", + "menos", + "mos", + "ndius", + "nes", + "neus", + "nidas", + "nides", + "nos", + "nthius", + "patros", + "phanes", + "phantes", + "phimus", + "phnus", + "phon", + "phoros", + "phorus", + "phus", + "pides", + "pompos", + "pompus", + "pon", + "ppos", + "rax", + "reas", + "rides", + "ros", + "sias", + "sides", + "sius", + "stius", + "stor", + "stos", + "stus", + "talos", + "thenes", + "theus", + "tios", + ) + +private val suffixesFemale = + listOf( + "ndria", + "boea", + "casta", + "caste", + "cheia", + "chis", + "cleia", + "dee", + "deia", + "dike", + "dina", + "doce", + "dora", + "dusa", + "gaea", + "kia", + "laia", + "lea", + "line", + "llis", + "lope", + "mache", + "mathe", + "meda", + "mede", + "meia", + "mela", + "mene", + "mere", + "mia", + "mina", + "mpias", + "ndra", + "ne", + "neira", + "nessa", + "nia", + "nice", + "niera", + "nike", + "nippe", + "nna", + "nome", + "nope", + "nta", + "nthia", + "pe", + "phae", + "phana", + "phane", + "phile", + "phobe", + "phone", + "pia", + "polis", + "pris", + "pyle", + "reia", + "rine", + "ris", + "rista", + "rpia", + "sia", + "ssa", + "steia", + "stis", + "syne", + "ta", + "tea", + "thea", + "theia", + "thia", + "thippe", + "thra", + "thusa", + "thyia", + "tis", + "trite", + ) + +private val suffixes = suffixesMale + suffixesFemale + +private val cities = + listOf( + "Argos", + "Assos", + "Astypalaia", + "Carystus", + "Chalcis", + "Chios", + "Corfu", + "Corinth", + "Eretria", + "Erythrae", + "Karpathos", + "Kasos", + "Kos", + "Leros", + "Lindos", + "Marathon", + "Megara", + "Miletus", + "Mytilene", + "Naxos", + "Oenoe", + "Paros", + "Patmos", + "Patras", + "Phocis", + "Rhodes", + "Salamis", + "Skiathos", + "Sparta", + "Thasos", + "Thebes", + ) -- cgit