#ifndef DMSDK_GUI_H
#define DMSDK_GUI_H
#include <stdint.h>
#include <dmsdk/dlib/hash.h>
#include <dmsdk/script/script.h>
namespace dmGui
{
typedef struct Scene* HScene;
typedef uint32_t HNode;
const HNode INVALID_HANDLE = 0;
enum Playback
{
PLAYBACK_ONCE_FORWARD = 0,
PLAYBACK_ONCE_BACKWARD = 1,
PLAYBACK_ONCE_PINGPONG = 2,
PLAYBACK_LOOP_FORWARD = 3,
PLAYBACK_LOOP_BACKWARD = 4,
PLAYBACK_LOOP_PINGPONG = 5,
PLAYBACK_NONE = 6,
PLAYBACK_COUNT = 7,
};
enum AdjustReference
{
ADJUST_REFERENCE_LEGACY = 0,
ADJUST_REFERENCE_PARENT = 1,
ADJUST_REFERENCE_DISABLED = 2
};
enum NodeTextureType
{
NODE_TEXTURE_TYPE_NONE,
NODE_TEXTURE_TYPE_TEXTURE,
NODE_TEXTURE_TYPE_TEXTURE_SET,
NODE_TEXTURE_TYPE_DYNAMIC
};
enum NodeType
{
NODE_TYPE_BOX = 0,
NODE_TYPE_TEXT = 1,
NODE_TYPE_PIE = 2,
NODE_TYPE_TEMPLATE = 3,
NODE_TYPE_SPINE = 4, NODE_TYPE_PARTICLEFX = 5,
NODE_TYPE_CUSTOM = 6,
NODE_TYPE_COUNT = 7,
};
enum Result
{
RESULT_OK = 0,
RESULT_SYNTAX_ERROR = -1,
RESULT_SCRIPT_ERROR = -2,
RESULT_OUT_OF_RESOURCES = -4,
RESULT_RESOURCE_NOT_FOUND = -5,
RESULT_TEXTURE_ALREADY_EXISTS = -6,
RESULT_INVAL_ERROR = -7,
RESULT_INF_RECURSION = -8,
RESULT_DATA_ERROR = -9,
RESULT_WRONG_TYPE = -10,
};
HNode NewNode(HScene scene, const dmVMath::Point3& position, const dmVMath::Vector3& size, NodeType node_type, uint32_t custom_type);
void DeleteNode(HScene scene, HNode node);
void SetNodeId(HScene scene, HNode node, dmhash_t id);
dmhash_t GetNodeId(HScene scene, HNode node);
Result SetNodeParent(HScene scene, HNode node, HNode parent, bool keep_scene_transform);
HNode GetNodeParent(HScene scene, HNode node);
HNode GetFirstChildNode(HScene scene, HNode node);
HNode GetNextNode(HScene scene, HNode node);
bool GetNodeIsBone(HScene scene, HNode node);
void SetNodeIsBone(HScene scene, HNode node, bool is_bone);
enum Property
{
PROPERTY_POSITION = 0,
PROPERTY_ROTATION = 1,
PROPERTY_SCALE = 2,
PROPERTY_COLOR = 3,
PROPERTY_SIZE = 4,
PROPERTY_OUTLINE = 5,
PROPERTY_SHADOW = 6,
PROPERTY_SLICE9 = 7,
PROPERTY_PIE_PARAMS = 8,
PROPERTY_TEXT_PARAMS= 9,
PROPERTY_COUNT = 10,
};
dmVMath::Vector4 GetNodeProperty(HScene scene, HNode node, Property property);
void SetNodeProperty(HScene scene, HNode node, Property property, const dmVMath::Vector4& value);
enum AdjustMode
{
ADJUST_MODE_FIT = 0,
ADJUST_MODE_ZOOM = 1,
ADJUST_MODE_STRETCH = 2,
};
void SetNodeAdjustMode(HScene scene, HNode node, AdjustMode adjust_mode);
uint32_t GetNodeCustomType(HScene scene, HNode node);
void* GetNodeCustomData(HScene scene, HNode node);
dmhash_t GetNodeTextureId(HScene scene, HNode node);
Result SetNodeTexture(HScene scene, HNode node, dmhash_t texture_id);
Result SetNodeTexture(HScene scene, HNode node, NodeTextureType type, void* texture);
void* GetResource(dmGui::HScene scene, dmhash_t resource_id, dmhash_t suffix_with_dot);
void LuaPushNode(lua_State* L, dmGui::HScene scene, dmGui::HNode node);
HScene LuaCheckScene(lua_State* L);
HNode LuaCheckNode(lua_State* L, int index);
}
#endif