DEADSOFTWARE

Update version script
[cavedroid.git] / core / src / ru / deadsoftware / cavedroid / game / model / dto / SaveDataDto.kt
1 package ru.deadsoftware.cavedroid.game.model.dto
3 import kotlinx.serialization.Contextual
4 import kotlinx.serialization.Serializable
5 import ru.deadsoftware.cavedroid.game.mobs.Mob
6 import ru.deadsoftware.cavedroid.game.mobs.player.Player.ControlMode
8 @Serializable
9 sealed class SaveDataDto {
11 abstract val version: Int
13 fun verifyVersion(expectedVersion: Int) {
14 require(version == expectedVersion) {
15 "${this::class.simpleName} version mismatch ($version != $expectedVersion)"
16 }
17 }
19 @Serializable
20 sealed class ContainerSaveDataDto : SaveDataDto() {
21 abstract val size: Int
22 abstract val items: List<InventoryItemSaveData>
23 }
25 @Serializable
26 sealed class RectangleObjectSaveDataDto : SaveDataDto() {
27 abstract val x: Float
28 abstract val y: Float
29 abstract val width: Float
30 abstract val height: Float
31 abstract val velocityX: Float
32 abstract val velocityY: Float
33 }
35 @Serializable
36 sealed class MobSaveDataDto : RectangleObjectSaveDataDto() {
37 abstract val type: Mob.Type
38 abstract val animDelta: Int
39 abstract val anim: Float
40 abstract val direction: Mob.Direction
41 abstract val dead: Boolean
42 abstract val canJump: Boolean
43 abstract val flyMode: Boolean
44 abstract val maxHealth: Int
45 abstract val health: Int
46 }
48 @Serializable
49 data class InventoryItemSaveData(
50 override val version: Int,
51 val itemKey: String,
52 val amount: Int,
53 ) : SaveDataDto()
55 @Serializable
56 data class InventorySaveData(
57 override val version: Int,
58 override val size: Int,
59 val hotbarSize: Int,
60 val activeSlot: Int,
61 override val items: List<InventoryItemSaveData>,
62 ) : ContainerSaveDataDto()
64 @Serializable
65 data class FurnaceSaveData(
66 override val version: Int,
67 override val size: Int,
68 val currentFuelItemKey: String?,
69 override val items: List<InventoryItemSaveData>,
70 val startBurnTimeMs: Long,
71 val startSmeltTimeMs: Long,
72 val burnProgress: Float,
73 val smeltProgress: Float,
74 ) : ContainerSaveDataDto()
76 @Serializable
77 data class ChestSaveData(
78 override val version: Int,
79 override val size: Int,
80 override val items: List<InventoryItemSaveData>
81 ) : ContainerSaveDataDto()
83 @Serializable
84 data class ContainerControllerSaveData(
85 override val version: Int,
86 val containerMap: Map<String, @Contextual ContainerSaveDataDto>,
87 ): SaveDataDto()
89 @Serializable
90 data class DropSaveData(
91 override val version: Int,
92 override val x: Float,
93 override val y: Float,
94 override val width: Float,
95 override val height: Float,
96 override val velocityX: Float,
97 override val velocityY: Float,
98 val itemKey: String,
99 val amount: Int,
100 val pickedUp: Boolean
101 ) : RectangleObjectSaveDataDto()
103 @Serializable
104 data class DropControllerSaveData(
105 override val version: Int,
106 val drops: List<DropSaveData>
107 ) : SaveDataDto()
109 @Serializable
110 data class PigSaveData(
111 override val version: Int,
112 override val x: Float,
113 override val y: Float,
114 override val width: Float,
115 override val height: Float,
116 override val velocityX: Float,
117 override val velocityY: Float,
118 override val type: Mob.Type,
119 override val animDelta: Int,
120 override val anim: Float,
121 override val direction: Mob.Direction,
122 override val dead: Boolean,
123 override val canJump: Boolean,
124 override val flyMode: Boolean,
125 override val maxHealth: Int,
126 override val health: Int,
127 ) : MobSaveDataDto()
129 @Serializable
130 data class FallingBlockSaveData(
131 override val version: Int,
132 override val x: Float,
133 override val y: Float,
134 override val width: Float,
135 override val height: Float,
136 override val velocityX: Float,
137 override val velocityY: Float,
138 override val type: Mob.Type,
139 override val animDelta: Int,
140 override val anim: Float,
141 override val direction: Mob.Direction,
142 override val dead: Boolean,
143 override val canJump: Boolean,
144 override val flyMode: Boolean,
145 override val maxHealth: Int,
146 override val health: Int,
147 val blockKey: String,
148 ) : MobSaveDataDto()
150 @Serializable
151 data class PlayerSaveData(
152 override val version: Int,
153 override val type: Mob.Type,
154 override val animDelta: Int,
155 override val anim: Float,
156 override val direction: Mob.Direction,
157 override val dead: Boolean,
158 override val canJump: Boolean,
159 override val flyMode: Boolean,
160 override val maxHealth: Int,
161 override val health: Int,
162 override val x: Float,
163 override val y: Float,
164 override val width: Float,
165 override val height: Float,
166 override val velocityX: Float,
167 override val velocityY: Float,
168 val hitting: Boolean,
169 val hittingWithDamage: Boolean,
170 val hitAnim: Float,
171 val hitAnimDelta: Float,
172 val inventory: InventorySaveData,
173 val gameMode: Int,
174 val swim: Boolean,
175 val headRotation: Float,
176 val blockDamage: Float,
177 val cursorX: Int,
178 val cursorY: Int,
179 val spawnPointX: Float,
180 val spawnPointY: Float,
181 val controlMode: ControlMode,
182 ) : MobSaveDataDto()
184 @Serializable
185 data class MobsControllerSaveData(
186 override val version: Int,
187 val mobs: List<@Contextual MobSaveDataDto>,
188 val player: PlayerSaveData,
189 ) : SaveDataDto()