summaryrefslogtreecommitdiff
path: root/Runtime/BaseClasses/Tags.h
blob: 9d790a944fb1d15c8894cc91c3b1593595dc4c4e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
#pragma once

#include <map>
#include <string>
#include "Runtime/Misc/Allocator.h"

class Object;

enum BitMasks
{
	// Can't modify these without breaking backwards compatibility!
	kDefaultLayer = 0,
	kNoFXLayer = 1,
	kIgnoreRaycastLayer = 2,
	kIgnoreCollisionLayer = 3,
	kWaterLayer = 4,
	kNumLayers = 32,
	
	kDefaultLayerMask = 1 << kDefaultLayer,
	kNoFXLayerMask = 1 << kNoFXLayer,
	kIgnoreRaycastMask = 1 << kIgnoreRaycastLayer,
	kIgnoreCollisionMask = 1 << kIgnoreCollisionLayer,
	kPreUnity2UnusedLayer = 1 << 5,
	
	kUserLayer = 8,
};

enum Tags
{
	kUntagged = 0,
	kRespawnTag = 1,
	kFinishTag = 2,
	kEditorOnlyTag = 3,
	kMainCameraTag = 5,
	kPlayerTag = 6,
	kGameControllerTag = 7,
	kFirstUserTag = 20000,
	kLastUserTag = 30000,
	kUndefinedTag = -1
};

// converts tag to string
UInt32 StringToTag (const std::string& tag); 
UInt32 StringToTagAddIfUnavailable (const std::string& name);
const std::string& TagToString (UInt32 tag);

// Converts between layer [0..31] and string
UInt32 StringToLayerMask (const std::string& layerName); 
const std::string& LayerToString (UInt32 layer);
UInt32 StringToLayer (const std::string& layer);
// Converts a layer mask (1 << [0..31]) to a string
const std::string& LayerMaskToString (UInt32 mask);

void RegisterLayer (UInt32 layer, const std::string& name);

typedef std::pair<const UInt32, std::string> UInt32StringPair;
typedef std::map<UInt32, std::string, std::less<UInt32>, STL_ALLOCATOR(kMemPermanent, UInt32StringPair) > UnsignedToString;
UnsignedToString GetTags ();

void RegisterDefaultTagsAndLayerMasks ();

Object& GetTagManager ();


// -------------------------------------------------------------------
// Global sorting layers:
//
// Defined globally, and can be reordered in the inspector. The drawing order is as shown in the inspector.
// Internally each global sorting layer has "unique ID" (GUID hashed into an int), and in-editor Renderers that want to
// use them refer to the layer by this ID.
//
// @TODO:
// * Do we need this "user friendly ID"?

int GetSortingLayerCount();
UnityStr GetSortingLayerName(int index);
UnityStr GetSortingLayerNameFromUniqueID(int id);
int GetSortingLayerUniqueID(int index);
int GetSortingLayerUserID(int index);

UnityStr GetSortingLayerNameFromValue(int layerValue);
int GetSortingLayerUserIDFromValue(int layerValue);
int GetSortingLayerUniqueIDFromValue(int layerValue);
int GetSortingLayerIndexFromValue(int layerValue);

// these return final sorting layer values
// (i.e. zero is always "default" - the returned value can be negative or positive)
int GetSortingLayerValueFromUniqueID(int id);
int GetSortingLayerValueFromUserID(int id);
int GetSortingLayerValueFromName(const UnityStr& name);


#if UNITY_EDITOR
void SetSortingLayerName(int index, const std::string& name);
void AddSortingLayer();
void UpdateSortingLayersOrder();
void SetSortingLayerLocked(int index, bool locked);
bool GetSortingLayerLocked(int index);
bool IsSortingLayerDefault(int index);
void SwapSortingLayers(int idx1, int idx2);

extern int g_LockedPickingLayers;

#endif // #if UNITY_EDITOR