Skip to content

Commit 1686e0f

Browse files
committed
Add game mode model
1 parent b550080 commit 1686e0f

File tree

7 files changed

+221
-23
lines changed

7 files changed

+221
-23
lines changed

.github/workflows/dart.yml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,8 @@ jobs:
3838
run: |
3939
cd rust_builder
4040
flutter pub get
41+
cd cargokit/build_tool
42+
flutter pub get
4143
# Uncomment this step to verify the use of 'dart format' on each commit.
4244
- name: Verify formatting
4345
run: dart format --output=none --set-exit-if-changed .

api/lib/models.dart

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ export 'src/models/definition.dart';
66
export 'src/models/dialog.dart';
77
export 'src/models/info.dart';
88
export 'src/models/meta.dart';
9+
export 'src/models/mode.dart';
910
export 'src/models/server.dart';
1011
export 'src/models/table.dart';
1112
export 'src/models/translation.dart';

api/lib/src/models/data.dart

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import 'background.dart';
88
import 'deck.dart';
99
import 'info.dart';
1010
import 'meta.dart';
11+
import 'mode.dart';
1112
import 'definition.dart';
1213
import 'table.dart';
1314
import 'translation.dart';
@@ -20,6 +21,8 @@ const kPackBoardsPath = 'boards';
2021
const kPackTexturesPath = 'textures';
2122
const kPackTranslationsPath = 'translations';
2223
const kPackBackgroundsPath = 'backgrounds';
24+
const kPackScriptsPath = 'scripts';
25+
const kPackModesPath = 'modes';
2326

2427
const kGameTablePath = 'tables';
2528
const kGameTeamPath = 'teams.json';
@@ -273,6 +276,27 @@ class SetonixData extends ArchiveData<SetonixData> {
273276

274277
SetonixData removeTexture(String texture) =>
275278
removeAsset('$kPackTexturesPath/$texture');
279+
280+
String? getScript(String id) {
281+
final data = getAsset('$kPackScriptsPath/$id');
282+
if (data == null) return null;
283+
return utf8.decode(data);
284+
}
285+
286+
Iterable<String> getModes() => getAssets(kPackModesPath, true);
287+
288+
GameMode? getMode(String id) {
289+
final data = getAsset('$kPackModesPath/$id.json');
290+
if (data == null) return null;
291+
final content = utf8.decode(data);
292+
return GameModeMapper.fromJson(content);
293+
}
294+
295+
Map<String, GameMode> getModesData() => Map.fromEntries(getModes().map((e) {
296+
final mode = getMode(e);
297+
if (mode == null) return null;
298+
return MapEntry(e, mode);
299+
}).nonNulls);
276300
}
277301

278302
class SetonixFile {

api/lib/src/models/mode.dart

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
import 'package:dart_mappable/dart_mappable.dart';
2+
3+
import 'info.dart';
4+
import 'table.dart';
5+
6+
part 'mode.mapper.dart';
7+
8+
@MappableClass()
9+
final class GameMode with GameModeMappable {
10+
final String? script;
11+
12+
final Map<String, GameTable> table;
13+
final String tableName;
14+
final List<GameTeam> teams;
15+
16+
GameMode({
17+
required this.script,
18+
this.table = const {
19+
'': GameTable(),
20+
},
21+
this.tableName = '',
22+
this.teams = const [],
23+
});
24+
}

api/lib/src/models/mode.mapper.dart

Lines changed: 154 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,154 @@
1+
// coverage:ignore-file
2+
// GENERATED CODE - DO NOT MODIFY BY HAND
3+
// ignore_for_file: type=lint
4+
// ignore_for_file: unused_element, unnecessary_cast, override_on_non_overriding_member
5+
// ignore_for_file: strict_raw_type, inference_failure_on_untyped_parameter
6+
7+
part of 'mode.dart';
8+
9+
class GameModeMapper extends ClassMapperBase<GameMode> {
10+
GameModeMapper._();
11+
12+
static GameModeMapper? _instance;
13+
static GameModeMapper ensureInitialized() {
14+
if (_instance == null) {
15+
MapperContainer.globals.use(_instance = GameModeMapper._());
16+
GameTableMapper.ensureInitialized();
17+
GameTeamMapper.ensureInitialized();
18+
}
19+
return _instance!;
20+
}
21+
22+
@override
23+
final String id = 'GameMode';
24+
25+
static String? _$script(GameMode v) => v.script;
26+
static const Field<GameMode, String> _f$script = Field('script', _$script);
27+
static Map<String, GameTable> _$table(GameMode v) => v.table;
28+
static const Field<GameMode, Map<String, GameTable>> _f$table =
29+
Field('table', _$table, opt: true, def: const {'': GameTable()});
30+
static String _$tableName(GameMode v) => v.tableName;
31+
static const Field<GameMode, String> _f$tableName =
32+
Field('tableName', _$tableName, opt: true, def: '');
33+
static List<GameTeam> _$teams(GameMode v) => v.teams;
34+
static const Field<GameMode, List<GameTeam>> _f$teams =
35+
Field('teams', _$teams, opt: true, def: const []);
36+
37+
@override
38+
final MappableFields<GameMode> fields = const {
39+
#script: _f$script,
40+
#table: _f$table,
41+
#tableName: _f$tableName,
42+
#teams: _f$teams,
43+
};
44+
45+
static GameMode _instantiate(DecodingData data) {
46+
return GameMode(
47+
script: data.dec(_f$script),
48+
table: data.dec(_f$table),
49+
tableName: data.dec(_f$tableName),
50+
teams: data.dec(_f$teams));
51+
}
52+
53+
@override
54+
final Function instantiate = _instantiate;
55+
56+
static GameMode fromMap(Map<String, dynamic> map) {
57+
return ensureInitialized().decodeMap<GameMode>(map);
58+
}
59+
60+
static GameMode fromJson(String json) {
61+
return ensureInitialized().decodeJson<GameMode>(json);
62+
}
63+
}
64+
65+
mixin GameModeMappable {
66+
String toJson() {
67+
return GameModeMapper.ensureInitialized()
68+
.encodeJson<GameMode>(this as GameMode);
69+
}
70+
71+
Map<String, dynamic> toMap() {
72+
return GameModeMapper.ensureInitialized()
73+
.encodeMap<GameMode>(this as GameMode);
74+
}
75+
76+
GameModeCopyWith<GameMode, GameMode, GameMode> get copyWith =>
77+
_GameModeCopyWithImpl(this as GameMode, $identity, $identity);
78+
@override
79+
String toString() {
80+
return GameModeMapper.ensureInitialized().stringifyValue(this as GameMode);
81+
}
82+
83+
@override
84+
bool operator ==(Object other) {
85+
return GameModeMapper.ensureInitialized()
86+
.equalsValue(this as GameMode, other);
87+
}
88+
89+
@override
90+
int get hashCode {
91+
return GameModeMapper.ensureInitialized().hashValue(this as GameMode);
92+
}
93+
}
94+
95+
extension GameModeValueCopy<$R, $Out> on ObjectCopyWith<$R, GameMode, $Out> {
96+
GameModeCopyWith<$R, GameMode, $Out> get $asGameMode =>
97+
$base.as((v, t, t2) => _GameModeCopyWithImpl(v, t, t2));
98+
}
99+
100+
abstract class GameModeCopyWith<$R, $In extends GameMode, $Out>
101+
implements ClassCopyWith<$R, $In, $Out> {
102+
MapCopyWith<$R, String, GameTable,
103+
GameTableCopyWith<$R, GameTable, GameTable>> get table;
104+
ListCopyWith<$R, GameTeam, GameTeamCopyWith<$R, GameTeam, GameTeam>>
105+
get teams;
106+
$R call(
107+
{String? script,
108+
Map<String, GameTable>? table,
109+
String? tableName,
110+
List<GameTeam>? teams});
111+
GameModeCopyWith<$R2, $In, $Out2> $chain<$R2, $Out2>(Then<$Out2, $R2> t);
112+
}
113+
114+
class _GameModeCopyWithImpl<$R, $Out>
115+
extends ClassCopyWithBase<$R, GameMode, $Out>
116+
implements GameModeCopyWith<$R, GameMode, $Out> {
117+
_GameModeCopyWithImpl(super.value, super.then, super.then2);
118+
119+
@override
120+
late final ClassMapperBase<GameMode> $mapper =
121+
GameModeMapper.ensureInitialized();
122+
@override
123+
MapCopyWith<$R, String, GameTable,
124+
GameTableCopyWith<$R, GameTable, GameTable>>
125+
get table => MapCopyWith(
126+
$value.table, (v, t) => v.copyWith.$chain(t), (v) => call(table: v));
127+
@override
128+
ListCopyWith<$R, GameTeam, GameTeamCopyWith<$R, GameTeam, GameTeam>>
129+
get teams => ListCopyWith(
130+
$value.teams, (v, t) => v.copyWith.$chain(t), (v) => call(teams: v));
131+
@override
132+
$R call(
133+
{Object? script = $none,
134+
Map<String, GameTable>? table,
135+
String? tableName,
136+
List<GameTeam>? teams}) =>
137+
$apply(FieldCopyWithData({
138+
if (script != $none) #script: script,
139+
if (table != null) #table: table,
140+
if (tableName != null) #tableName: tableName,
141+
if (teams != null) #teams: teams
142+
}));
143+
@override
144+
GameMode $make(CopyWithData data) => GameMode(
145+
script: data.get(#script, or: $value.script),
146+
table: data.get(#table, or: $value.table),
147+
tableName: data.get(#tableName, or: $value.tableName),
148+
teams: data.get(#teams, or: $value.teams));
149+
150+
@override
151+
GameModeCopyWith<$R2, GameMode, $Out2> $chain<$R2, $Out2>(
152+
Then<$Out2, $R2> t) =>
153+
_GameModeCopyWithImpl($value, $cast, t);
154+
}

app/pubspec.lock

Lines changed: 14 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -379,10 +379,10 @@ packages:
379379
dependency: "direct main"
380380
description:
381381
name: flame
382-
sha256: "0bd0d5bfaf270e4c1624f8d966ca42951479d1b59371058898bdd6ce41bce27a"
382+
sha256: "75eb2b2814a0af2686e9f36649f72249f1921b565d11d5bf956d17f9d8cfa67f"
383383
url: "https://pub.dev"
384384
source: hosted
385-
version: "1.23.0"
385+
version: "1.24.0"
386386
flame_bloc:
387387
dependency: "direct main"
388388
description:
@@ -396,10 +396,10 @@ packages:
396396
dependency: "direct main"
397397
description:
398398
name: flame_tiled
399-
sha256: "243851c2609cee2a65c7a1deaf3a1364a73ef985d34bd10b01482a9008122cb4"
399+
sha256: "9fa050752afcc7600d77f0e1c16306e1f899ed2a8d09cd39684364627e8c532e"
400400
url: "https://pub.dev"
401401
source: hosted
402-
version: "1.21.2"
402+
version: "2.0.0"
403403
flex_color_scheme:
404404
dependency: "direct main"
405405
description:
@@ -459,10 +459,10 @@ packages:
459459
dependency: "direct main"
460460
description:
461461
name: flutter_markdown
462-
sha256: "46cdcdcd216f15ac04c80e24e814a89ea7143654442c53ba67fec349b4d44565"
462+
sha256: b3ff1ef5fb3924ee02b4d38b974ffae3969d50603e68787684ee9dd45f6f144a
463463
url: "https://pub.dev"
464464
source: hosted
465-
version: "0.7.6"
465+
version: "0.7.6+1"
466466
flutter_rust_bridge:
467467
dependency: transitive
468468
description:
@@ -1236,14 +1236,13 @@ packages:
12361236
source: hosted
12371237
version: "0.7.3"
12381238
tiled:
1239-
dependency: "direct overridden"
1239+
dependency: transitive
12401240
description:
1241-
path: "packages/tiled"
1242-
ref: c4fa680778ba36c4cb53f6e49474ea3881b69552
1243-
resolved-ref: c4fa680778ba36c4cb53f6e49474ea3881b69552
1244-
url: "https://github.com/CodeDoctorDE/tiled.dart.git"
1245-
source: git
1246-
version: "0.10.2"
1241+
name: tiled
1242+
sha256: d71b1397d8870af4b0e5a68a8be7a12d561408049fc0d55fe482dc8412e9f461
1243+
url: "https://pub.dev"
1244+
source: hosted
1245+
version: "0.11.0"
12471246
timing:
12481247
dependency: transitive
12491248
description:
@@ -1344,10 +1343,10 @@ packages:
13441343
dependency: transitive
13451344
description:
13461345
name: vector_graphics
1347-
sha256: a1870d398158844fe5db12441611ed9a2222ff4340258b539eaf3590c1b4bd7e
1346+
sha256: "44cc7104ff32563122a929e4620cf3efd584194eec6d1d913eb5ba593dbcf6de"
13481347
url: "https://pub.dev"
13491348
source: hosted
1350-
version: "1.1.17"
1349+
version: "1.1.18"
13511350
vector_graphics_codec:
13521351
dependency: transitive
13531352
description:

app/pubspec.yaml

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -51,8 +51,8 @@ dependencies:
5151
url: https://github.com/CodeDoctorDE/flame.git
5252
ref: 2d76592b9d40007ede2dc0cb9c87858e1ec50bb5
5353
path: packages/flame_bloc
54-
flame: ">=1.23.0 <1.24.0"
55-
flame_tiled: ">=1.21.1 <1.22.0"
54+
flame: ">=1.24.0 <1.25.0"
55+
flame_tiled: ">=2.0.0 <2.1.0"
5656
# Networking
5757
http: ^1.2.1
5858
web_socket_channel: ^3.0.0
@@ -97,12 +97,6 @@ dependencies:
9797
path: rust_builder
9898
setonix_plugin:
9999
path: ../plugin
100-
dependency_overrides:
101-
tiled:
102-
git:
103-
url: https://github.com/CodeDoctorDE/tiled.dart.git
104-
ref: c4fa680778ba36c4cb53f6e49474ea3881b69552
105-
path: packages/tiled
106100
dev_dependencies:
107101
flutter_test:
108102
sdk: flutter

0 commit comments

Comments
 (0)