DXライブラリ用のカラークラス

DXライブラリで、カラーに名前を割り振って使うクラス。
を、作ってみた。

#ifndef		COLOR_DEF
#define		COLOR_DEF

#include	<DxLib.h>
#include	<map>
#include	<string>

class Color {

private:
	int	color_;
	
public:
	// 無指定は黒
	Color(int color = 0) { color_ = color; }
	virtual ~Color() {}
	
	int	setColor(int color) { color_ = color; }
	int	setRGB(int r, int g, int b) { color_ = GetColor(r, g, b); }
	
	int	getColor() { return color_; }
};

class Colors {
	
private:
	map<string, Color>	m;

public:
	
	Colors() {}
	virtual ~Colors() { m.clear(); }
	
	virtual bool	push(
			// 積み込み(color)
	string		name,	// 色の名前
	int		num
	)
	{
		map<string, Color>::iterator	it = m.find(name);
		bool	bl = FALSE;
		if (it == m.end()) {
			// 同じ名前のが見つかったら積み込まない
			Color	color(num);
			m.insert(map<string, Color>::value_type(name, color));
			bl = TRUE;
		}
		return bl;
	}
	virtual bool	push(
			// 積み込み(RGB)
	string		name,	// 色の名前
	int		r,
	int		g,
	int		b
	)
	{
		map<string, Color>::iterator	it = m.find(name);
		bool	bl = FALSE;
		if (it == m.end()) {
			// 同じ名前のが見つかったら積み込まない
			Color	color;
			color.setRGB(r, g, b);
			m.insert(map<string, Color>::value_type(name, color));
			bl = TRUE;
		}
		return bl;
	}
	
	virtual int	getColor(
			// 名前から色を取得
	const char *	name
	)
	
	{
		map<string, Color>::iterator	it = m.find(name);
		int	color = 0;
		if (it != m.end()) {
			color = it->second.getColor();
		}
		return color;
	}
	
	virtual Color *	getPtr(
			// 名前からカラークラスのポインタを取得
	const char *	name
	)
	
	{
		map<string, Color>::iterator	it = m.find(name);
		Color * ptr = NULL;
		if (it != m.end()) {
			ptr = &it->second;
		}
		return ptr;
	}
};

#endif


使い方〜。

{
	// 前略
	
	Colors	colors;
	
	// 白色を積み込む
	colors.push("white", 255, 255, 255);
	
	// 赤色を積み込む
	// このように、GetColorで渡してもいいよ
	colors.push("red", GetColor(255, 0, 0));
	
	// 中略
	
	DrawString(0, 0, "白だよ", colors.getColor("white"));
	DrawString(0, 100, "赤かもね", colors.getColor("red"));
}


可読性のある名前で指定できるようになったよ、やったね!
積み込みも簡単。


GetColorで毎回指定するのが面倒だから何とかしたいとか、
統一性を持たせた色を使いたいとかいう時に便利……なはず。