Initial commit
This commit is contained in:
@@ -0,0 +1,21 @@
|
||||
plugins {
|
||||
kotlin("multiplatform")
|
||||
alias(libs.plugins.kotlin.serialization)
|
||||
}
|
||||
|
||||
repositories {
|
||||
mavenCentral()
|
||||
}
|
||||
|
||||
kotlin {
|
||||
jvm()
|
||||
|
||||
sourceSets {
|
||||
commonMain.dependencies {
|
||||
implementation(libs.kotlinx.serialization)
|
||||
implementation(libs.kotlinx.datetime)
|
||||
}
|
||||
|
||||
jvmMain.dependencies {}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,22 @@
|
||||
package dev.geekback.dopewars.shared
|
||||
|
||||
// import io.ktor.openapi.JsonSchema
|
||||
import kotlinx.serialization.Serializable
|
||||
import kotlin.random.Random
|
||||
|
||||
@Serializable
|
||||
enum class Drug {
|
||||
WEED,
|
||||
COCAINE,
|
||||
HASH,
|
||||
ACID,
|
||||
HEROIN,
|
||||
MUSHROOMS,
|
||||
METH;
|
||||
|
||||
companion object {
|
||||
fun all() = listOf(WEED, COCAINE, HASH, ACID, HEROIN, MUSHROOMS, METH)
|
||||
|
||||
fun random() = Drug.WEED
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,15 @@
|
||||
package dev.geekback.dopewars.shared
|
||||
|
||||
import kotlinx.serialization.Serializable
|
||||
import kotlin.random.Random
|
||||
|
||||
@Serializable
|
||||
data class DrugInfo(
|
||||
val drug: Drug,
|
||||
val minValue: Float,
|
||||
val maxValue: Float,
|
||||
) {
|
||||
fun newPrice(): Float {
|
||||
return Random.nextFloat() * (this.maxValue - this.minValue)
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,15 @@
|
||||
package dev.geekback.dopewars.shared
|
||||
|
||||
object Drugs {
|
||||
val all = listOf(
|
||||
DrugInfo(Drug.WEED, 300.0f, 1000.0f),
|
||||
DrugInfo(Drug.ACID, 1000.0f, 4500.0f),
|
||||
DrugInfo(Drug.COCAINE, 15000.0f, 30000.0f),
|
||||
DrugInfo(Drug.HASH, 5000.0f, 14000.0f),
|
||||
DrugInfo(Drug.MUSHROOMS, 500.0f, 2500.0f),
|
||||
DrugInfo(Drug.METH, 2000.0f, 9000.0f),
|
||||
DrugInfo(Drug.HEROIN, minValue = 4000.0f, 9500.0f)
|
||||
)
|
||||
|
||||
fun random() = all.random()
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
package dev.geekback.dopewars.shared
|
||||
|
||||
import kotlinx.serialization.Serializable
|
||||
|
||||
@Serializable
|
||||
data class InventoryItem(
|
||||
val drug: Drug,
|
||||
var quantity: Int
|
||||
)
|
||||
@@ -0,0 +1,8 @@
|
||||
package dev.geekback.dopewars.shared
|
||||
|
||||
import kotlinx.serialization.Serializable
|
||||
|
||||
@Serializable
|
||||
data class Location(
|
||||
var name: String
|
||||
)
|
||||
@@ -0,0 +1,13 @@
|
||||
package dev.geekback.dopewars.shared
|
||||
|
||||
object Locations {
|
||||
val all = listOf(
|
||||
Location("Brooklyn"),
|
||||
Location("Bronx"),
|
||||
Location("Queens"),
|
||||
Location("Statten Island"),
|
||||
)
|
||||
|
||||
fun random() = all.random()
|
||||
}
|
||||
|
||||
@@ -0,0 +1,12 @@
|
||||
package dev.geekback.dopewars.shared
|
||||
|
||||
import kotlinx.serialization.Serializable
|
||||
|
||||
@Serializable
|
||||
data class Market(
|
||||
val location: Location,
|
||||
val prices: Map<Drug, Float>
|
||||
) {
|
||||
companion object {
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,27 @@
|
||||
package dev.geekback.dopewars.shared
|
||||
|
||||
import kotlinx.serialization.Serializable
|
||||
import kotlin.time.Clock
|
||||
|
||||
@Serializable
|
||||
data class Player(
|
||||
val id: String,
|
||||
val name: String,
|
||||
var cash: Float = 2000f,
|
||||
var debt: Float = 5500f,
|
||||
var health: Int = 100,
|
||||
var location: Location = Location("Brooklyn"),
|
||||
var day: Int = 1,
|
||||
val inventory: MutableList<InventoryItem> = mutableListOf(),
|
||||
var lastMarket: Market? = null,
|
||||
val lastActionTime: Long = Clock.System.now().epochSeconds
|
||||
) {
|
||||
companion object {
|
||||
fun new(): Player {
|
||||
return Player(
|
||||
id = "",
|
||||
name = "Default Player",
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,3 @@
|
||||
package dev.geekback.dopewars.shared
|
||||
|
||||
const val DRUG_MAX_PRICE: Float = 100_000f;
|
||||
@@ -0,0 +1,9 @@
|
||||
package dev.geekback.dopewars.shared.api
|
||||
|
||||
import dev.geekback.dopewars.shared.Location
|
||||
import kotlinx.serialization.Serializable
|
||||
|
||||
@Serializable
|
||||
data class MarketRequest(
|
||||
val location: Location
|
||||
)
|
||||
@@ -0,0 +1,9 @@
|
||||
package dev.geekback.dopewars.shared.api
|
||||
|
||||
import dev.geekback.dopewars.shared.Market
|
||||
import kotlinx.serialization.Serializable
|
||||
|
||||
@Serializable
|
||||
data class MarketResult(
|
||||
val market: Market) {
|
||||
}
|
||||
+8
@@ -0,0 +1,8 @@
|
||||
package dev.geekback.dopewars.shared.api
|
||||
|
||||
import kotlinx.serialization.Serializable
|
||||
|
||||
@Serializable
|
||||
data class PlayerNameUpdateRequest(
|
||||
val newName: String
|
||||
)
|
||||
+7
@@ -0,0 +1,7 @@
|
||||
package dev.geekback.dopewars.shared.api
|
||||
|
||||
import dev.geekback.dopewars.shared.Player
|
||||
import kotlinx.serialization.Serializable
|
||||
|
||||
@Serializable
|
||||
data class PlayerNameUpdateResponse(val updatedPlayer: Player)
|
||||
@@ -0,0 +1,10 @@
|
||||
package dev.geekback.dopewars.shared.api
|
||||
|
||||
import kotlinx.serialization.Serializable
|
||||
|
||||
@Serializable
|
||||
enum class TradeAction {
|
||||
BUY,
|
||||
SELL
|
||||
}
|
||||
|
||||
@@ -0,0 +1,13 @@
|
||||
package dev.geekback.dopewars.shared.api
|
||||
|
||||
import dev.geekback.dopewars.shared.Drug
|
||||
import kotlinx.serialization.Serializable
|
||||
|
||||
@Serializable
|
||||
data class TradeRequest(
|
||||
val action: TradeAction,
|
||||
val drug: Drug,
|
||||
val quantity: Int
|
||||
)
|
||||
|
||||
|
||||
@@ -0,0 +1,9 @@
|
||||
package dev.geekback.dopewars.shared.api
|
||||
|
||||
import dev.geekback.dopewars.shared.Location
|
||||
import kotlinx.serialization.Serializable
|
||||
|
||||
@Serializable
|
||||
data class TravelRequest(
|
||||
val destination: Location
|
||||
)
|
||||
@@ -0,0 +1,12 @@
|
||||
package dev.geekback.dopewars.shared.api
|
||||
|
||||
import dev.geekback.dopewars.shared.Location
|
||||
import dev.geekback.dopewars.shared.Market
|
||||
import kotlinx.serialization.Serializable
|
||||
|
||||
@Serializable
|
||||
data class TravelResult(
|
||||
val location: Location,
|
||||
val day: Int,
|
||||
val market: Market
|
||||
)
|
||||
Reference in New Issue
Block a user