Renamed AnimationSettings -> AnimationManager.
[tagua/yd.git] / src / components.cpp
bloba912525d3ade1ec071b8011f5b21765cd7afc291
1 /*
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.
8 */
10 #include "components.h"
12 #include <KDebug>
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) {
25 setVariant(variant);
28 void Components::setVariant(Variant* variant) {
29 if (!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) {
55 bool ok;
56 int index = it.key().toInt(&ok);
57 if (!ok) continue;
58 IColor* color = requestInterface<IColor>(it.value());
59 if (!color) continue;
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(); }