1 package cz.cuni.amis.pogamut.ut2004multi.factory.guice.remoteagent;
2
3 import com.google.inject.AbstractModule;
4 import com.google.inject.Provider;
5 import com.google.inject.name.Names;
6
7 import cz.cuni.amis.pogamut.base.agent.IAgent;
8 import cz.cuni.amis.pogamut.base.communication.translator.IWorldMessageTranslator;
9 import cz.cuni.amis.pogamut.base.communication.worldview.ILockableWorldView;
10 import cz.cuni.amis.pogamut.base.communication.worldview.IWorldView;
11 import cz.cuni.amis.pogamut.base.component.bus.IComponentBus;
12 import cz.cuni.amis.pogamut.base.component.controller.ComponentDependencies;
13 import cz.cuni.amis.pogamut.base.component.lifecyclebus.ILifecycleBus;
14 import cz.cuni.amis.pogamut.base.component.lifecyclebus.LifecycleBus;
15 import cz.cuni.amis.pogamut.base.utils.guice.AdaptableProvider;
16 import cz.cuni.amis.pogamut.base3d.ILockableVisionWorldView;
17 import cz.cuni.amis.pogamut.base3d.agent.IAgent3D;
18 import cz.cuni.amis.pogamut.base3d.worldview.IVisionWorldView;
19 import cz.cuni.amis.pogamut.multi.agent.ITeamedAgentId;
20 import cz.cuni.amis.pogamut.multi.agent.impl.TeamedAgentId;
21 import cz.cuni.amis.pogamut.multi.communication.worldview.ISharedWorldView;
22 import cz.cuni.amis.pogamut.multi.communication.worldview.impl.BatchAwareLocalWorldView;
23 import cz.cuni.amis.pogamut.multi.communication.worldview.impl.LocalWorldViewAdapter;
24 import cz.cuni.amis.pogamut.ut2004.bot.IUT2004Bot;
25 import cz.cuni.amis.pogamut.ut2004.bot.IUT2004BotController;
26 import cz.cuni.amis.pogamut.ut2004.bot.impl.UT2004Bot;
27 import cz.cuni.amis.pogamut.ut2004.bot.params.UT2004BotParameters;
28 import cz.cuni.amis.pogamut.ut2004.communication.translator.bot.BotFSM;
29 import cz.cuni.amis.pogamut.ut2004.factory.guice.remoteagent.UT2004BotModule;
30 import cz.cuni.amis.pogamut.ut2004multi.communication.worldview.UT2004BatchAwareSharedWorldView;
31 import cz.cuni.amis.pogamut.ut2004multi.communication.worldview.UT2004LockableLocalWorldView;
32
33
34
35
36
37
38 public class UT2004MultiBotModule<PARAMS extends UT2004BotParameters> extends UT2004BotModule<PARAMS>
39 {
40
41 private Class<? extends IUT2004BotController> botControllerClass;
42
43 protected UT2004MultiBotModule()
44 {
45 }
46
47 public UT2004MultiBotModule(Class<? extends IUT2004BotController> botControllerClass) {
48 this.botControllerClass = botControllerClass;
49 }
50
51 @Override
52 public void prepareNewAgent(PARAMS agentParameters)
53 {
54 super.prepareNewAgent(agentParameters);
55 teamedIdProvider.set( (TeamedAgentId)agentParameters.getAgentId());
56 }
57
58 protected AdaptableProvider<TeamedAgentId> teamedIdProvider = new AdaptableProvider<TeamedAgentId>();
59
60 protected Provider<TeamedAgentId> getTeamedAgentIdProvider()
61 {
62 return this.teamedIdProvider;
63 }
64
65 @Override
66 protected void configureModules() {
67 super.configureModules();
68 addModule(new AbstractModule() {
69
70 @Override
71 public void configure() {
72
73 bind(IWorldMessageTranslator.class).to(BotFSM.class);
74 bind(IWorldView.class).to(IVisionWorldView.class);
75 bind(IVisionWorldView.class).to(ILockableVisionWorldView.class);
76 bind(ILockableWorldView.class).to(ILockableVisionWorldView.class);
77 bind(ILockableVisionWorldView.class).to(LocalWorldViewAdapter.class);
78 bind(BatchAwareLocalWorldView.class).to(UT2004LockableLocalWorldView.class);
79 bind(ISharedWorldView.class).to(UT2004BatchAwareSharedWorldView.class);
80
81 bind(IComponentBus.class).to(ILifecycleBus.class);
82 bind(ILifecycleBus.class).to(LifecycleBus.class);
83
84 bind(ITeamedAgentId.class).to(TeamedAgentId.class);
85 bind(TeamedAgentId.class).toProvider( getTeamedAgentIdProvider());
86
87 bind(ComponentDependencies.class).annotatedWith(Names.named(UT2004LockableLocalWorldView.WORLDVIEW_DEPENDENCY)).toProvider(worldViewDependenciesProvider);
88 bind(IAgent.class).to(IAgent3D.class);
89 bind(IAgent3D.class).to(IUT2004Bot.class);
90 bind(IUT2004Bot.class).to(UT2004Bot.class);
91
92 if (botControllerClass != null) {
93 bind(IUT2004BotController.class).to(botControllerClass);
94 }
95
96 }
97
98 });
99 }
100
101 }