Skip to content

Commit

Permalink
feat(battle): Visual and physical tank config
Browse files Browse the repository at this point in the history
  • Loading branch information
Assasans committed Mar 18, 2022
1 parent 95dc010 commit 665ff05
Show file tree
Hide file tree
Showing 18 changed files with 1,070 additions and 49 deletions.
1 change: 1 addition & 0 deletions build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@ dependencies {

implementation("com.squareup.moshi:moshi:1.13.0")
implementation("com.squareup.moshi:moshi-kotlin:1.13.0")
implementation("com.squareup.moshi:moshi-adapters:1.13.0")

implementation("io.insert-koin:koin-core:$koinVersion")
implementation("io.insert-koin:koin-logger-slf4j:$koinVersion")
Expand Down
13 changes: 13 additions & 0 deletions src/main/kotlin/jp/assasans/protanki/server/Main.kt
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import java.io.ByteArrayOutputStream
import java.nio.file.Paths
import kotlin.io.path.absolute
import com.squareup.moshi.Moshi
import com.squareup.moshi.adapters.PolymorphicJsonAdapterFactory
import com.squareup.moshi.kotlin.reflect.KotlinJsonAdapterFactory
import io.ktor.network.selector.*
import io.ktor.network.sockets.*
Expand Down Expand Up @@ -90,6 +91,18 @@ suspend fun main(args: Array<String>) {
single<IMapRegistry> { MapRegistry() }
single {
Moshi.Builder()
.add(
PolymorphicJsonAdapterFactory.of(WeaponVisual::class.java, "\$type")
.withSubtype(SmokyVisual::class.java, "smoky")
.withSubtype(RailgunVisual::class.java, "railgun")
.withSubtype(ThunderVisual::class.java, "thunder")
.withSubtype(FlamethrowerVisual::class.java, "flamethrower")
.withSubtype(FreezeVisual::class.java, "freeze")
.withSubtype(IsidaVisual::class.java, "isida")
.withSubtype(TwinsVisual::class.java, "twins")
.withSubtype(ShaftVisual::class.java, "shaft")
.withSubtype(RicochetVisual::class.java, "ricochet")
)
.add(KotlinJsonAdapterFactory())
.add(GarageItemTypeAdapter())
.add(ResourceTypeAdapter())
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -307,6 +307,20 @@ class BattlePlayer(
nickname = player.user.username,
team_type = player.team.key,

// Hull physics
maxSpeed = tank.hull.modification.physics.speed,
maxTurnSpeed = tank.hull.modification.physics.turnSpeed,
acceleration = tank.hull.modification.physics.acceleration,
reverseAcceleration = tank.hull.modification.physics.reverseAcceleration,
sideAcceleration = tank.hull.modification.physics.sideAcceleration,
turnAcceleration = tank.hull.modification.physics.turnAcceleration,
reverseTurnAcceleration = tank.hull.modification.physics.turnSpeed,
dampingCoeff = tank.hull.modification.physics.damping,

// Weapon physics
turret_turn_speed = tank.weapon.item.modification.physics.turretRotationSpeed,
turretTurnAcceleration = tank.weapon.item.modification.physics.turretTurnAcceleration,

// Weapon visual
sfxData = (tank.weapon.item.modification.visual
?: tank.weapon.item.marketItem.modifications[0]!!.visual)!!.toJson() // TODO(Assasans)
Expand Down Expand Up @@ -334,6 +348,20 @@ class BattlePlayer(
nickname = user.username,
team_type = team.key,

// Hull physics
maxSpeed = tank.hull.modification.physics.speed,
maxTurnSpeed = tank.hull.modification.physics.turnSpeed,
acceleration = tank.hull.modification.physics.acceleration,
reverseAcceleration = tank.hull.modification.physics.reverseAcceleration,
sideAcceleration = tank.hull.modification.physics.sideAcceleration,
turnAcceleration = tank.hull.modification.physics.turnAcceleration,
reverseTurnAcceleration = tank.hull.modification.physics.turnSpeed,
dampingCoeff = tank.hull.modification.physics.damping,

// Weapon physics
turret_turn_speed = tank.weapon.item.modification.physics.turretRotationSpeed,
turretTurnAcceleration = tank.weapon.item.modification.physics.turretTurnAcceleration,

// Weapon visual
sfxData = (tank.weapon.item.modification.visual
?: tank.weapon.item.marketItem.modifications[0]!!.visual)!!.toJson() // TODO(Assasans)
Expand All @@ -360,7 +388,20 @@ class BattlePlayer(
x = 0.0,
y = 0.0,
z = 1000.0,
rot = 0.0
rot = 0.0,

// Hull physics
speed = tank.hull.modification.physics.speed,
turn_speed = tank.hull.modification.physics.turnSpeed,
acceleration = tank.hull.modification.physics.acceleration,
reverseAcceleration = tank.hull.modification.physics.reverseAcceleration,
sideAcceleration = tank.hull.modification.physics.sideAcceleration,
turnAcceleration = tank.hull.modification.physics.turnAcceleration,
reverseTurnAcceleration = tank.hull.modification.physics.turnSpeed,

// Weapon physics
turret_rotation_speed = tank.weapon.item.modification.physics.turretRotationSpeed,
turretTurnAcceleration = tank.weapon.item.modification.physics.turretTurnAcceleration
).toJson()
)
).send(socket)
Expand All @@ -383,20 +424,35 @@ class BattlePlayer(

suspend fun spawnTankForAnother() {
battle.players.forEach { player ->
val tank = tank ?: throw Exception("No Tank")

// Spawn self for other players
if(!isSpectator) {
Command(
CommandName.SpawnTank,
listOf(
SpawnTankData(
tank_id = (tank ?: throw Exception("No Tank")).id,
tank_id = tank.id,
health = 10000,
incration_id = incarnation,
team_type = team.key,
x = 0.0,
y = 0.0,
z = 1000.0,
rot = 0.0
rot = 0.0,

// Hull physics
speed = tank.hull.modification.physics.speed,
turn_speed = tank.hull.modification.physics.turnSpeed,
acceleration = tank.hull.modification.physics.acceleration,
reverseAcceleration = tank.hull.modification.physics.reverseAcceleration,
sideAcceleration = tank.hull.modification.physics.sideAcceleration,
turnAcceleration = tank.hull.modification.physics.turnAcceleration,
reverseTurnAcceleration = tank.hull.modification.physics.turnSpeed,

// Weapon physics
turret_rotation_speed = tank.weapon.item.modification.physics.turretRotationSpeed,
turretTurnAcceleration = tank.weapon.item.modification.physics.turretTurnAcceleration
).toJson()
)
).send(player)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -111,7 +111,20 @@ class BattleTank(
x = 0.0,
y = 0.0,
z = 1000.0,
rot = 0.0
rot = 0.0,

// Hull physics
speed = hull.modification.physics.speed,
turn_speed = hull.modification.physics.turnSpeed,
acceleration = hull.modification.physics.acceleration,
reverseAcceleration = hull.modification.physics.reverseAcceleration,
sideAcceleration = hull.modification.physics.sideAcceleration,
turnAcceleration = hull.modification.physics.turnAcceleration,
reverseTurnAcceleration = hull.modification.physics.turnSpeed,

// Weapon physics
turret_rotation_speed = weapon.item.modification.physics.turretRotationSpeed,
turretTurnAcceleration = weapon.item.modification.physics.turretTurnAcceleration
).toJson()
)
).send(this)
Expand Down
41 changes: 20 additions & 21 deletions src/main/kotlin/jp/assasans/protanki/server/client/Entities.kt
Original file line number Diff line number Diff line change
Expand Up @@ -86,29 +86,28 @@ data class InitTankData(
@Json val partsObject: String,
@Json val hullResource: Int,
@Json val turretResource: Int,
@Json
val sfxData: String = "{\"chargingPart1\":114424,\"chargingPart2\":468379,\"chargingPart3\":932241,\"hitMarkTexture\":670581,\"powTexture\":963502,\"ringsTexture\":966691,\"shotSound\":900596,\"smokeImage\":882103,\"sphereTexture\":212409,\"trailImage\":550305,\"lighting\":[{\"name\":\"charge\",\"light\":[{\"attenuationBegin\":200,\"attenuationEnd\":200,\"color\":5883129,\"intensity\":0.7,\"time\":0},{\"attenuationBegin\":200,\"attenuationEnd\":800,\"color\":5883129,\"intensity\":0.3,\"time\":600}]},{\"name\":\"shot\",\"light\":[{\"attenuationBegin\":100,\"attenuationEnd\":600,\"color\":5883129,\"intensity\":0.7,\"time\":0},{\"attenuationBegin\":1,\"attenuationEnd\":2,\"color\":5883129,\"intensity\":0,\"time\":300}]},{\"name\":\"hit\",\"light\":[{\"attenuationBegin\":200,\"attenuationEnd\":600,\"color\":5883129,\"intensity\":0.7,\"time\":0},{\"attenuationBegin\":1,\"attenuationEnd\":2,\"color\":5883129,\"intensity\":0,\"time\":300}]},{\"name\":\"rail\",\"light\":[{\"attenuationBegin\":100,\"attenuationEnd\":500,\"color\":5883129,\"intensity\":0.5,\"time\":0},{\"attenuationBegin\":1,\"attenuationEnd\":2,\"color\":5883129,\"intensity\":0,\"time\":1800}]}],\"bcsh\":[{\"brightness\":0,\"contrast\":0,\"saturation\":0,\"hue\":0,\"key\":\"trail\"},{\"brightness\":0,\"contrast\":0,\"saturation\":0,\"hue\":0,\"key\":\"charge\"}]}",
@Json val sfxData: String,
@Json val position: String = "0.0@0.0@0.0@0.0",
@Json val incration: Int = 2,
@Json val tank_id: String,
@Json val nickname: String,
@Json val team_type: String,
@Json val state: String = "active",
@Json val maxSpeed: Int = 8,
@Json val maxTurnSpeed: Double = 1.3229597,
@Json val acceleration: Double = 9.09,
@Json val reverseAcceleration: Double = 11.74,
@Json val sideAcceleration: Double = 7.74,
@Json val turnAcceleration: Double = 2.2462387,
@Json val reverseTurnAcceleration: Double = 3.6576867,
@Json val maxSpeed: Double,
@Json val maxTurnSpeed: Double,
@Json val acceleration: Double,
@Json val reverseAcceleration: Double,
@Json val sideAcceleration: Double,
@Json val turnAcceleration: Double,
@Json val reverseTurnAcceleration: Double,
@Json val mass: Int = 1761,
@Json val power: Double = 9.09,
@Json val dampingCoeff: Int = 1500,
@Json val turret_turn_speed: Double = 0.9815731713216109,
@Json val dampingCoeff: Int,
@Json val turret_turn_speed: Double,
@Json val health: Int = 10000,
@Json val rank: Int = 4,
@Json val kickback: Double = 2.138,
@Json val turretTurnAcceleration: Double = 1.214225560612455,
@Json val turretTurnAcceleration: Double,
@Json val impact_force: Double = 3.6958,
@Json val state_null: Boolean = true
)
Expand All @@ -130,15 +129,15 @@ data class InitEffectsData(
data class SpawnTankData(
@Json val tank_id: String,
@Json val health: Int,
@Json val speed: Int = 8,
@Json val turn_speed: Double = 1.3229597,
@Json val turret_rotation_speed: Double = 0.9815731713216109,
@Json val turretTurnAcceleration: Double = 1.214225560612455,
@Json val acceleration: Double = 9.09,
@Json val reverseAcceleration: Double = 11.74,
@Json val sideAcceleration: Double = 7.74,
@Json val turnAcceleration: Double = 2.2462387,
@Json val reverseTurnAcceleration: Double = 3.6576867,
@Json val speed: Double,
@Json val turn_speed: Double,
@Json val turret_rotation_speed: Double,
@Json val turretTurnAcceleration: Double,
@Json val acceleration: Double,
@Json val reverseAcceleration: Double,
@Json val sideAcceleration: Double,
@Json val turnAcceleration: Double,
@Json val reverseTurnAcceleration: Double,
@Json val incration_id: Int,
@Json val team_type: String,
@Json val x: Double,
Expand Down
171 changes: 171 additions & 0 deletions src/main/kotlin/jp/assasans/protanki/server/client/WeaponVisuals.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,171 @@
package jp.assasans.protanki.server.client

import com.squareup.moshi.Json

data class WeaponLightning(
@Json val attenuationBegin: Int,
@Json val attenuationEnd: Int,
@Json val color: Int,
@Json val intensity: Double,
@Json val time: Int
)

data class WeaponLightningGroup(
@Json val name: String,
@Json val light: List<WeaponLightning>
)

data class WeaponVisualColor(
@Json val key: String,
@Json val brightness: Double,
@Json val contrast: Double,
@Json val saturation: Double,
@Json val hue: Double
)

data class WeaponVisualColorTransform(
@Json val redMultiplier: Double,
@Json val greenMultiplier: Double,
@Json val blueMultiplier: Double,
@Json val alphaMultiplier: Double,
@Json val redOffset: Double,
@Json val greenOffset: Double,
@Json val blueOffset: Double,
@Json val alphaOffset: Double,
@Json val t: Double
)

abstract class WeaponVisual(
@Json val lighting: List<WeaponLightningGroup>,
@Json val bcsh: List<WeaponVisualColor>
) {
@Json(name = "\$type") lateinit var type: String
}

class SmokyVisual(
@Json val criticalHitSize: Int,
@Json val criticalHitTexture: Int,

@Json val explosionMarkTexture: Int,
@Json val explosionSize: Int,
@Json val explosionSound: Int,
@Json val explosionTexture: Int,

@Json val shotSound: Int,
@Json val shotTexture: Int,

lighting: List<WeaponLightningGroup>,
bcsh: List<WeaponVisualColor>
) : WeaponVisual(lighting, bcsh)

class RailgunVisual(
@Json val chargingPart1: Int,
@Json val chargingPart2: Int,
@Json val chargingPart3: Int,

@Json val hitMarkTexture: Int,
@Json val powTexture: Int,
@Json val ringsTexture: Int,
@Json val shotSound: Int,
@Json val smokeImage: Int,
@Json val sphereTexture: Int,
@Json val trailImage: Int,

lighting: List<WeaponLightningGroup>,
bcsh: List<WeaponVisualColor>
) : WeaponVisual(lighting, bcsh)

class ThunderVisual(
@Json val explosionMarkTexture: Int,
@Json val explosionSize: Int,
@Json val explosionSound: Int,
@Json val explosionTexture: Int,

@Json val shotSound: Int,
@Json val shotTexture: Int,

lighting: List<WeaponLightningGroup>,
bcsh: List<WeaponVisualColor>
) : WeaponVisual(lighting, bcsh)

class FlamethrowerVisual(
@Json val fireTexture: Int,
@Json val flameSound: Int,

@Json val muzzlePlaneTexture: Int,

lighting: List<WeaponLightningGroup>,
bcsh: List<WeaponVisualColor>,
@Json val colorTransform: List<WeaponVisualColorTransform>
) : WeaponVisual(lighting, bcsh)

class FreezeVisual(
@Json val particleSpeed: Int,
@Json val particleTextureResource: Int,

@Json val planeTextureResource: Int,
@Json val shotSoundResource: Int,

lighting: List<WeaponLightningGroup>,
bcsh: List<WeaponVisualColor>
) : WeaponVisual(lighting, bcsh)

class IsidaVisual(
@Json val damagingBall: Int,
@Json val damagingRay: Int,
@Json val damagingSound: Int,

@Json val healingBall: Int,
@Json val healingRay: Int,
@Json val healingSound: Int,

@Json val idleSound: Int,

lighting: List<WeaponLightningGroup>,
bcsh: List<WeaponVisualColor>
) : WeaponVisual(lighting, bcsh)

class TwinsVisual(
@Json val explosionTexture: Int,
@Json val hitMarkTexture: Int,
@Json val muzzleFlashTexture: Int,

@Json val shotSound: Int,
@Json val shotTexture: Int,

lighting: List<WeaponLightningGroup>,
bcsh: List<WeaponVisualColor>
) : WeaponVisual(lighting, bcsh)

class ShaftVisual(
@Json val explosionSound: Int,
@Json val explosionTexture: Int,

@Json val hitMarkTexture: Int,
@Json val muzzleFlashTexture: Int,
@Json val shotSound: Int,
@Json val targetingSound: Int,
@Json val trailTexture: Int,
@Json val zoomModeSound: Int,

lighting: List<WeaponLightningGroup>,
bcsh: List<WeaponVisualColor>
) : WeaponVisual(lighting, bcsh)

class RicochetVisual(
@Json val bumpFlashTexture: Int,

@Json val explosionTexture: Int,
@Json val explosionSound: Int,

@Json val ricochetSound: Int,

@Json val shotFlashTexture: Int,
@Json val shotSound: Int,
@Json val shotTexture: Int,

@Json val tailTrailTexutre: Int,

lighting: List<WeaponLightningGroup>,
bcsh: List<WeaponVisualColor>
) : WeaponVisual(lighting, bcsh)

0 comments on commit 665ff05

Please sign in to comment.