de.pewpewproject.lasertag.lasertaggame.state.synced.implementation.SyncedState   A
last analyzed

Complexity

Total Complexity 16

Size/Duplication

Total Lines 137
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
eloc 84
dl 0
loc 137
rs 10
c 0
b 0
f 0
wmc 16

16 Methods

Rating   Name   Duplication   Size   Complexity  
A getCaptureTheFlagState() 0 3 1
A getTeamsConfigState() 0 3 1
A SyncedState() 0 14 1
A toJson() 0 10 1
A fromJson(String) 0 13 1
A getEliminationState() 0 3 1
A getGameModeState() 0 3 1
A getSettingsPresetsNamesState() 0 3 1
A getLasertargetState() 0 3 1
A getActivationState() 0 3 1
A getSettingsState() 0 3 1
A getTeamsState() 0 3 1
A getScoreState() 0 3 1
A getUIState() 0 3 1
A addTypeAdapterFactoriesForSubStates(GsonBuilder) 0 10 1
A getPlayerNamesState() 0 3 1
1
package de.pewpewproject.lasertag.lasertaggame.state.synced.implementation;
2
3
import com.google.common.reflect.TypeToken;
4
import com.google.gson.GsonBuilder;
5
import com.google.gson.ToNumberPolicy;
6
import com.google.gson.typeadapters.RuntimeTypeAdapterFactory;
7
import de.pewpewproject.lasertag.lasertaggame.state.synced.*;
8
import de.pewpewproject.lasertag.lasertaggame.team.TeamDto;
9
import de.pewpewproject.lasertag.lasertaggame.team.serialize.TeamConfigManagerDeserializer;
10
import de.pewpewproject.lasertag.lasertaggame.team.serialize.TeamDtoSerializer;
11
12
import java.util.HashMap;
13
14
/**
15
 * Implementation of ISyncedState for the lasertag game.
16
 *
17
 * @author Étienne Muser
18
 */
19
public class SyncedState implements ISyncedState {
20
21
    //region The sub-states
22
23
    private final IActivationState activationState;
24
    private final ICaptureTheFlagState captureTheFlagState;
25
    private final GameModeState gameModeState;
26
    private final IPlayerNamesState playerNamesState;
27
    private final IScoreState scoreState;
28
    private final ISettingsPresetsNamesState settingsPresetsNamesState;
29
    private final SettingsState settingsState;
30
    private final ITeamsState teamsState;
31
    private final ITeamsConfigState teamsConfigState;
32
    private final UIState uiState;
33
    private final IEliminationState eliminationState;
34
    private final ILasertargetState lasertargetState;
35
36
    //endregion
37
38
    public SyncedState() {
39
40
        activationState = new ActivationState();
41
        captureTheFlagState = new CaptureTheFlagState();
42
        gameModeState = new GameModeState();
43
        playerNamesState = new PlayerNamesState();
44
        scoreState = new ScoreState();
45
        settingsPresetsNamesState = new SettingsPresetsNamesState();
46
        settingsState = new SettingsState();
47
        teamsConfigState = new TeamsConfigState();
48
        teamsState = new TeamsState(teamsConfigState);
49
        uiState = new UIState();
50
        eliminationState = new EliminationState();
51
        lasertargetState = new LasertargetState();
52
    }
53
54
    //region Public methods
55
56
    @Override
57
    public IActivationState getActivationState() {
58
        return activationState;
59
    }
60
61
    @Override
62
    public ICaptureTheFlagState getCaptureTheFlagState() {
63
        return captureTheFlagState;
64
    }
65
66
    @Override
67
    public GameModeState getGameModeState() {
68
        return gameModeState;
69
    }
70
71
    @Override
72
    public IPlayerNamesState getPlayerNamesState() {
73
        return playerNamesState;
74
    }
75
76
    @Override
77
    public IScoreState getScoreState() {
78
        return scoreState;
79
    }
80
81
    @Override
82
    public ISettingsPresetsNamesState getSettingsPresetsNamesState() {
83
        return settingsPresetsNamesState;
84
    }
85
86
    @Override
87
    public SettingsState getSettingsState() {
88
        return settingsState;
89
    }
90
91
    @Override
92
    public ITeamsState getTeamsState() {
93
        return teamsState;
94
    }
95
96
    @Override
97
    public ITeamsConfigState getTeamsConfigState() {
98
        return teamsConfigState;
99
    }
100
101
    @Override
102
    public UIState getUIState() {
103
        return uiState;
104
    }
105
106
    @Override
107
    public IEliminationState getEliminationState() {
108
        return eliminationState;
109
    }
110
111
    @Override
112
    public ILasertargetState getLasertargetState() {
113
        return lasertargetState;
114
    }
115
116
    //endregion
117
118
119
    @Override
120
    public String toJson() {
121
        var builder = new GsonBuilder();
122
123
        // Register team serializer
124
        builder.registerTypeAdapter(TeamDto.class, TeamDtoSerializer.getSerializer());
125
126
        addTypeAdapterFactoriesForSubStates(builder);
127
128
        return builder.enableComplexMapKeySerialization().create().toJson(this);
129
    }
130
131
    public static SyncedState fromJson(String jsonString) {
132
133
        var builder = new GsonBuilder();
134
135
        // Set number strategy
136
        builder.setObjectToNumberStrategy(ToNumberPolicy.LONG_OR_DOUBLE);
137
138
        // Register team serializer
139
        builder.registerTypeAdapter(new TypeToken<HashMap<String, TeamDto>>() {}.getType(), TeamConfigManagerDeserializer.getDeserializer());
140
141
        addTypeAdapterFactoriesForSubStates(builder);
142
143
        return builder.create().fromJson(jsonString, SyncedState.class);
144
    }
145
146
    private static void addTypeAdapterFactoriesForSubStates(GsonBuilder builder) {
147
        builder.registerTypeAdapterFactory(RuntimeTypeAdapterFactory.of(IActivationState.class).registerSubtype(ActivationState.class));
148
        builder.registerTypeAdapterFactory(RuntimeTypeAdapterFactory.of(ICaptureTheFlagState.class).registerSubtype(CaptureTheFlagState.class));
149
        builder.registerTypeAdapterFactory(RuntimeTypeAdapterFactory.of(IPlayerNamesState.class).registerSubtype(PlayerNamesState.class));
150
        builder.registerTypeAdapterFactory(RuntimeTypeAdapterFactory.of(IScoreState.class).registerSubtype(ScoreState.class));
151
        builder.registerTypeAdapterFactory(RuntimeTypeAdapterFactory.of(ISettingsPresetsNamesState.class).registerSubtype(SettingsPresetsNamesState.class));
152
        builder.registerTypeAdapterFactory(RuntimeTypeAdapterFactory.of(ITeamsState.class).registerSubtype(TeamsState.class));
153
        builder.registerTypeAdapterFactory(RuntimeTypeAdapterFactory.of(ITeamsConfigState.class).registerSubtype(TeamsConfigState.class));
154
        builder.registerTypeAdapterFactory(RuntimeTypeAdapterFactory.of(IEliminationState.class).registerSubtype(EliminationState.class));
155
        builder.registerTypeAdapterFactory(RuntimeTypeAdapterFactory.of(ILasertargetState.class).registerSubtype(LasertargetState.class));
156
    }
157
}
158