sobota, 13 listopada 2010

IActor

IActor to klasa reprezentująca jak sama nazwa wskazuje aktora. Jest abstrakcyjną klasą bazową po której dziedziczy nasza klasa aktora, w której dodajemy np. zdrowie postaci. Poza tym reprezentuje graficzną formę, zawiera CSprite. Klasa jest zintegrowana z Boxem i została stworzona właśnie do Renderowania ciał(b2Body) na ekranie. Poza tym zawiera kilka flag do zarządzania tym ciałem(czy ma zostać zniszczone, czy ma być rysowane, czy "żyje").




#pragma once
#include
#include
#include
#include "CSprite.h"
namespace DarkStorm2D
{
class DLLDARKSTORM2D IActor
{
protected:
b2Body* m_Body;
GraphicsCore::CSprite* m_Sprite;
unsigned int ID;

enum ActorFlags
{
Alive,
Destroy,
Visible,
ActorFlagsCount
};
std::bitset m_Flags;
public:
IActor()
{
m_Body = 0;
m_Sprite = 0;
m_Flags.reset();
}

~IActor()
{
m_Body = 0;
m_Sprite = 0;
m_Flags.reset();
}
void Render(float ScaleFactory)
{
if ( m_Flags[Alive]&& !m_Flags[Destroy])
{
float rot = m_Body->GetAngle();
b2Vec2 pos = m_Body->GetPosition();
//if (rot)
//m_Sprite->Render(pos.x/ScaleFactory-(float)m_Sprite->GetWidth()/2.0f, pos.y/ScaleFactory-(float)m_Sprite->GetHeight()/2.0f);
//else
m_Sprite->Render(pos.x/ScaleFactory-(float)m_Sprite->GetWidth()/2.0f, pos.y/ScaleFactory-(float)m_Sprite->GetHeight()/2.0f);
}
}

GraphicsCore::CSprite* GetSprite()
{
return m_Sprite;
}
bool IsAlive()
{
return m_Flags[Alive];
}

bool IsDestroy()
{
return m_Flags[Destroy];
}

bool IsVisible()
{
return m_Flags[Visible];
}
};
};


Na razie nie jest aż tak funkcjonalna ale to się zmieni. Dzięki niej można wyrenderować świat Boxa za pomocą jednej komend(klasy CWorld - Render() // iteruje ona przez wszystkie body i renderuje ich aktorów). To na razie tyle o aktorach.

1 komentarz:

  1. Fajne rozwiązanie z tą komendą. W tworzeniu gier bardzo się przydaje coś takiego, bo w procesie tworzenia nie ma czasu na zabawę ( jeśli gra ma mały budżet ) ;)

    Dla poprawy czytelności kodu przeniósł bym deklaracje funkcji i konstruktorów do innego pliku a tu zostawił tylko ciało klasy

    OdpowiedzUsuń