refresh 77518ae98cef372c3d26fc7e5c43c5ad4a09c6f5
[tagua/yd.git] / src / variants / shogi / shogi.cpp
blob0097040235feec1ada4954b84a4a57e7c031e978
1 #include <core/repository.h>
2 #include <core/variantloader.h>
4 #include "behaviour.h"
5 #include "colors.h"
6 #include "moveserializer.h"
7 #include "types.h"
8 #include "state.h"
9 #include "validator.h"
11 using namespace Shogi;
13 extern "C" KDE_EXPORT Repository*
14 taguashogi_initrepo(IVariantLoader* loader) {
15 Repository* repo = new Repository;
16 Repository* chess = loader->getRepository("chess");
17 if (!chess)
18 // bail out if there is no chess variant
19 return 0;
20 #if 0
21 Repository* crazyhouse = loader->getRepository("crazyhouse");
22 if (!crazyhouse)
23 // bail out if there is no crazyhouse variant
24 return 0;
25 #endif
27 repo->addComponent("player/0", dynamic_cast<Component*>(COLORS[0]));
28 repo->addComponent("player/1", dynamic_cast<Component*>(COLORS[1]));
30 repo->addComponent("type/king", King::self());
31 repo->addComponent("type/gold", Gold::self());
32 repo->addComponent("type/silver", Silver::self());
33 repo->addComponent("type/knight", Knight::self());
34 repo->addComponent("type/lance", Lance::self());
35 repo->addComponent("type/rook", Rook::self());
36 repo->addComponent("type/bishop", Bishop::self());
37 repo->addComponent("type/pawn", Pawn::self());
39 #if 0
40 // create crazyhouse behaviour
41 IState* crazyhouse_state = requestInterface<IState>(crazyhouse->getComponent("state"));
42 repo->addComponent("state", new State(crazyhouse_state->behaviour(), Point(9, 9)));
43 #else
44 IState* chess_state = requestInterface<IState>(chess->getComponent("state"));
45 repo->addComponent("state", new State(new Behaviour(chess_state->behaviour()), Point(9, 9)));
46 #endif
48 Validator* validator = new Validator;
49 repo->addComponent("validator", validator);
50 repo->addComponent("animator_factory", chess->getComponent("animator_factory"));
51 repo->addComponent("namer", chess->getComponent("namer"));
52 repo->addComponent("policy", chess->getComponent("policy"));
54 repo->addComponent("move_serializer/simple",
55 new MoveSerializer("simple", validator));
56 repo->addComponent("move_serializer/decorated",
57 new MoveSerializer("decorated", validator));
58 MoveSerializer* san = new MoveSerializer("compact", validator);
59 repo->addComponent("move_serializer/san", san);
60 repo->addComponent("move_serializer/compact", san);
62 return repo;