2 Copyright (c) 2007 Paolo Capriotti <p.capriotti@gmail.com>
4 This program is free software; you can redistribute it and/or modify
5 it under the terms of the GNU General Public License as published by
6 the Free Software Foundation; either version 2 of the License, or
7 (at your option) any later version.
10 #include "components.h"
14 #include <core/component.h>
15 #include <core/animator.h>
16 #include <core/color.h>
17 #include <core/moveserializer.h>
18 #include <core/namer.h>
19 #include <core/policy.h>
20 #include <core/state.h>
21 #include <core/statefactory.h>
22 #include <core/validator.h>
24 Components::Components(Variant
* variant
) {
28 void Components::setVariant(Variant
* variant
) {
30 kError() << "Creating a component collection using a null variant";
32 m_variant
= std::auto_ptr
<Variant
>(variant
);
34 m_animator_factory
= requestComponent
<IAnimatorFactory
>(
35 m_variant
.get(), "animator_factory");
36 m_state_factory
= requestComponent
<IStateFactory
>(
37 m_variant
.get(), "state_factory");
39 Repository::ComponentMap serializers
=
40 m_variant
->repository()->listComponents("move_serializer/");
41 for (Repository::ComponentMap::iterator it
= serializers
.begin(),
42 end
= serializers
.end(); it
!= end
; ++it
) {
43 IMoveSerializer
* s
= requestInterface
<IMoveSerializer
>(it
.value());
44 if (s
) m_move_serializers
[it
.key()] = s
;
47 m_namer
= requestComponent
<INamer
>(m_variant
.get(), "namer");
48 m_policy
= requestComponent
<IPolicy
>(m_variant
.get(), "policy");
49 m_validator
= requestComponent
<IValidator
>(m_variant
.get(), "validator");
51 Repository::ComponentMap players
=
52 m_variant
->repository()->listComponents("player");
53 for (Repository::ComponentMap::iterator it
= players
.begin(),
54 end
= players
.end(); it
!= end
; ++it
) {
56 int index
= it
.key().toInt(&ok
);
58 IColor
* color
= requestInterface
<IColor
>(it
.value());
61 m_players
[index
] = color
;
65 IAnimator
* Components::createAnimator(TaguaAPI
* api
) const {
66 return m_animator_factory
->create(api
, m_namer
);
69 IState
* Components::createState() const {
70 return m_state_factory
->createState();
73 IMoveSerializer
* Components::moveSerializer(const QString
& type
) {
74 return m_move_serializers
[type
];
77 INamer
* Components::namer() { return m_namer
; }
79 IPolicy
* Components::policy() { return m_policy
; }
81 IValidator
* Components::validator() { return m_validator
; }
83 IColor
* Components::player(int index
) { return m_players
[index
]; }
85 QMap
<int, IColor
*> Components::players() { return m_players
; }
87 Variant
* Components::variant() { return m_variant
.get(); }