#ifndef __Geode__
#define __Geode__

#ifndef CORE_DLL 
    #ifdef CORE_BUILD
	    #define CORE_DLL __declspec(dllexport)
    #else
	    #define CORE_DLL __declspec(dllimport)
        #pragma comment(lib, "Core.lib")
    #endif
#endif

#include "../../Core/types.h"
#include "Transform.h"
#include "Texture.h"
#include "Material.h"

#include <vector>


#pragma warning(push)
#pragma warning(disable:4251)


class CORE_DLL Geode : public Transform {
public:
    class CORE_DLL Drawable {
    public:
        Drawable();
        ~Drawable();

        void* getResourceHandle();
        void  setResourceHandle(void* resourceHandle);
        
        Material** ppGetMaterial();
        Material*  getMaterial();
        void setMaterial(Material* material);

    protected:
        void*     _resourceHandle;
        Material* _material;
    };

    Geode(const wchar_t* fileName = L"");
    virtual ~Geode();

    const wchar_t* getFileName();
    void setFileName(const wchar_t* fileName);

    void addDrawable(Drawable* drawable);

    size_t getNumDrawables();
    Drawable** getDrawables();

protected:
    std::wstring _fileName;
    std::vector<Drawable*> _drawables;
};


#pragma warning(pop)

#endif