Initial porting to the new component API.
[tagua/yd.git] / src / hlvariant / graphicalapi_unwrapped.h
blobc2507196d8f1b2313115feaef7d889c504a8e6bf
1 /*
2 Copyright (c) 2007 Paolo Capriotti <p.capriotti@gmail.com>
3 (c) 2007 Maurizio Monge <maurizio.monge@kdemail.net>
5 This program is free software; you can redistribute it and/or modify
6 it under the terms of the GNU General Public License as published by
7 the Free Software Foundation; either version 2 of the License, or
8 (at your option) any later version.
9 */
11 #ifndef HLVARIANT__UNWRAPPEDGRAPHICALAPI_H
12 #define HLVARIANT__UNWRAPPEDGRAPHICALAPI_H
14 #include <core/taguaapi.h>
15 #include "variantdata.h"
17 namespace HLVariant {
19 /**
20 * This class moves the interface that will be used by the animator to modify
21 * tagua graphics into the variant's semantics.
23 template <typename Variant>
24 class UnwrappedGraphicalAPI {
25 GraphicalAPI* m_graphical_api;
27 typedef typename VariantData<Variant>::GameState GameState;
28 typedef typename VariantData<Variant>::Piece Piece;
29 public:
30 typedef boost::shared_ptr<UnwrappedGraphicalAPI> Ptr;
32 UnwrappedGraphicalAPI(GraphicalAPI* interface)
33 : m_graphical_api(interface) {
36 virtual ~UnwrappedGraphicalAPI(){}
38 virtual const GameState* position() {
39 const WrappedPosition<Variant> *p = dynamic_cast<const WrappedPosition<Variant>*>(m_graphical_api->position().get());
40 if (p) {
41 return &p->inner();
43 else {
44 MISMATCH(m_graphical_api->position(), WrappedPosition<Variant>);
45 return NULL;
49 virtual NamedSprite setPiece(const Point& p, const Piece& piece, bool show) {
50 WrappedPiece<Variant> wpiece(piece);
51 return m_graphical_api->setPiece(p, &wpiece, show);
54 virtual NamedSprite createPiece(const Point& p, const Piece& piece, bool show) {
55 WrappedPiece<Variant> wpiece(piece);
56 return m_graphical_api->createPiece(p, &wpiece, show);
59 virtual void setSprite(const Point& p, const NamedSprite& s) {
60 m_graphical_api->setSprite(p, s);
63 virtual NamedSprite getSprite(const Point& p) {
64 return m_graphical_api->getSprite(p);
67 virtual NamedSprite takeSprite(const Point& p) {
68 return m_graphical_api->takeSprite(p);
71 virtual int poolSize(int pool) const {
72 return m_graphical_api->poolSize(pool);
75 virtual NamedSprite insertPoolPiece(int pool, int index, const Piece& piece) {
76 WrappedPiece<Variant> wpiece(piece);
77 return m_graphical_api->insertPoolPiece(pool, index, &wpiece);
80 virtual NamedSprite getPoolSprite(int pool, int index) {
81 return m_graphical_api->getPoolSprite(pool, index);
84 virtual void removePoolSprite(int pool, int index) {
85 m_graphical_api->removePoolSprite(pool, index);
88 virtual NamedSprite takePoolSprite(int pool, int index) {
89 return m_graphical_api->takePoolSprite(pool, index);
92 virtual std::pair<int, int> droppedPoolPiece() {
93 return m_graphical_api->droppedPoolPiece();
96 virtual AnimationPtr animate(const Animate::Scheme& scheme, Animate::AnimationType type = Animate::Normal) {
97 return m_graphical_api->animate(scheme, type);
100 GraphicalAPI* inner() const { return m_graphical_api; }
105 #endif // HLVARIANT__UNWRAPPEDGRAPHICALAPI_H