/*
* The Mana Client
* Copyright (C) 2010-2012 The Mana Developers
*
* This file is part of The Mana Client.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see .
*/
#pragma once
#include "actor.h"
#include "compoundsprite.h"
#include "map.h"
#include "particle.h"
class SimpleAnimation;
class ActorSprite : public Actor
{
public:
enum Type
{
UNKNOWN,
PLAYER,
NPC,
MONSTER,
FLOOR_ITEM,
PORTAL
};
enum TargetCursorSize
{
TC_SMALL = 0,
TC_MEDIUM,
TC_LARGE,
NUM_TC
};
enum TargetCursorType
{
TCT_NONE = -1,
TCT_NORMAL = 0,
TCT_IN_RANGE,
NUM_TCT
};
ActorSprite(int id);
~ActorSprite() override;
int getId() const
{ return mId; }
void setId(int id) { mId = id; }
/**
* Returns the type of the ActorSprite.
*/
virtual Type getType() const { return UNKNOWN; }
int getDrawOrder() const override;
bool draw(Graphics *graphics, int offsetX, int offsetY) const override;
bool drawSpriteAt(Graphics *graphics, int x, int y) const;
virtual void logic();
void setMap(Map* map) override;
/**
* Gets the way the object blocks pathfinding for other objects
*/
virtual Map::BlockType getBlockType() const
{ return Map::BLOCKTYPE_NONE; }
/**
* Take control of a particle.
*/
void controlParticle(Particle *particle);
/**
* Returns the required size of a target cursor for this being.
*/
virtual TargetCursorSize getTargetCursorSize() const
{ return TC_MEDIUM; }
/**
* Sets the target animation for this actor.
*/
void setTargetType(TargetCursorType type);
/**
* Untargets the actor.
*/
void untarget() { mUsedTargetCursor = nullptr; }
void setAlpha(float alpha) override { mSprites.setAlpha(alpha); }
float getAlpha() const override { return mSprites.getAlpha(); }
int getWidth() const { return mSprites.getWidth(); }
int getHeight() const { return mSprites.getHeight(); }
static void load();
static void unload();
protected:
void setupSpriteDisplay(const SpriteDisplay &display,
bool forceDisplay = true);
int mId;
std::vector mChildParticleEffects;
CompoundSprite mSprites;
private:
/** Load the target cursors into memory */
static void initTargetCursor();
/** Remove the target cursors from memory */
static void cleanupTargetCursors();
/**
* Helper function for loading target cursors
*/
static void loadTargetCursor(const std::string &filename,
int width, int height, int type, int size);
/** Images of the target cursor. */
static ResourceRef targetCursorImages[NUM_TCT][NUM_TC];
/** Animated target cursors. */
static SimpleAnimation *targetCursor[NUM_TCT][NUM_TC];
static bool loaded;
/** Target cursor being used */
SimpleAnimation *mUsedTargetCursor = nullptr;
};