fr.quatrevieux.araknemu.game.fight.fighter.DefaultFighterFactory   A
last analyzed

Complexity

Total Complexity 6

Size/Duplication

Total Lines 48
Duplicated Lines 0 %

Test Coverage

Coverage 100%

Importance

Changes 1
Bugs 0 Features 0
Metric Value
dl 0
loc 48
ccs 23
cts 23
cp 1
rs 10
c 1
b 0
f 0
eloc 32
wmc 6

5 Methods

Rating   Name   Duplication   Size   Complexity  
A create(Monster,FightTeam) 0 3 1
A DefaultFighterFactory(Dispatcher) 0 2 1
A generate(FighterGenerator) 0 9 2
A create(GamePlayer) 0 16 1
A DefaultFighterFactory(Dispatcher,int) 0 3 1
1
/*
2
 * This file is part of Araknemu.
3
 *
4
 * Araknemu is free software: you can redistribute it and/or modify
5
 * it under the terms of the GNU Lesser General Public License as published by
6
 * the Free Software Foundation, either version 3 of the License, or
7
 * (at your option) any later version.
8
 *
9
 * Araknemu is distributed in the hope that it will be useful,
10
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12
 * GNU Lesser General Public License for more details.
13
 *
14
 * You should have received a copy of the GNU Lesser General Public License
15
 * along with Araknemu.  If not, see <https://www.gnu.org/licenses/>.
16
 *
17
 * Copyright (c) 2017-2019 Vincent Quatrevieux
18
 */
19
20
package fr.quatrevieux.araknemu.game.fight.fighter;
21
22
import fr.quatrevieux.araknemu.core.event.Dispatcher;
23
import fr.quatrevieux.araknemu.game.fight.fighter.event.PlayerFighterCreated;
24
import fr.quatrevieux.araknemu.game.fight.fighter.monster.MonsterFighter;
25
import fr.quatrevieux.araknemu.game.fight.fighter.player.PlayerFighter;
26
import fr.quatrevieux.araknemu.game.fight.team.FightTeam;
27
import fr.quatrevieux.araknemu.game.listener.fight.SendFightJoined;
28
import fr.quatrevieux.araknemu.game.listener.fight.fighter.ApplyEndFightReward;
29
import fr.quatrevieux.araknemu.game.listener.fight.fighter.ApplyLeaveReward;
30
import fr.quatrevieux.araknemu.game.listener.fight.fighter.LeaveOnDisconnect;
31
import fr.quatrevieux.araknemu.game.listener.fight.fighter.SendFightLeaved;
32
import fr.quatrevieux.araknemu.game.listener.fight.fighter.SendSpellBoosted;
33
import fr.quatrevieux.araknemu.game.listener.fight.fighter.SendStats;
34
import fr.quatrevieux.araknemu.game.listener.fight.fighter.StopFightSession;
35
import fr.quatrevieux.araknemu.game.monster.Monster;
36
import fr.quatrevieux.araknemu.game.player.GamePlayer;
37
38
import java.util.concurrent.atomic.AtomicInteger;
39
40
/**
41
 * Default implementation of the fighter factory
42
 */
43
public final class DefaultFighterFactory implements FighterFactory {
44
    private static final int MIN_ID = -1_000_000_000;
45
46
    private final Dispatcher dispatcher;
47 1
    private final AtomicInteger lastId = new AtomicInteger();
48
    private final int minId;
49
50
    public DefaultFighterFactory(Dispatcher dispatcher) {
51 1
        this(dispatcher, MIN_ID);
52 1
    }
53
54 1
    public DefaultFighterFactory(Dispatcher dispatcher, int minId) {
55 1
        this.dispatcher = dispatcher;
56 1
        this.minId = minId;
57 1
    }
58
59
    @Override
60
    public PlayerFighter create(GamePlayer player) {
61 1
        final PlayerFighter fighter = new PlayerFighter(player);
62
63 1
        fighter.dispatcher().add(new SendFightJoined(fighter));
64 1
        fighter.dispatcher().add(new ApplyEndFightReward(fighter));
65 1
        fighter.dispatcher().add(new StopFightSession(fighter));
66 1
        fighter.dispatcher().add(new SendFightLeaved(fighter));
67 1
        fighter.dispatcher().add(new LeaveOnDisconnect(fighter));
68 1
        fighter.dispatcher().add(new ApplyLeaveReward(fighter));
69 1
        fighter.dispatcher().add(new SendStats(fighter));
70 1
        fighter.dispatcher().add(new SendSpellBoosted(fighter));
71
72 1
        dispatcher.dispatch(new PlayerFighterCreated(fighter));
73
74 1
        return fighter;
75
    }
76
77
    @Override
78
    public Fighter create(Monster monster, FightTeam team) {
79 1
        return generate(id -> new MonsterFighter(id, monster, team));
80
    }
81
82
    @Override
83
    public Fighter generate(FighterGenerator generator) {
84 1
        final int id = lastId.updateAndGet(last -> {
85 1
            final int next = last - 1;
86
87 1
            return next < minId ? -1 : next;
88
        });
89
90 1
        return generator.create(id);
91
    }
92
}
93