-
Notifications
You must be signed in to change notification settings - Fork 6
/
texture_layer.cpp
122 lines (95 loc) · 2.97 KB
/
texture_layer.cpp
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
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
// Copyright 2002-2004 Frozenbyte Ltd.
#pragma warning(disable:4103)
#pragma warning(disable:4786)
#include "texture_layer.h"
#include "common_dialog.h"
#include "terrain_textures.h"
#include "terrain_texture_generator.h"
#include <map>
#include <cassert>
#include <windows.h>
#include "resource/resource.h"
namespace frozenbyte {
namespace editor {
struct TextureLayerData
{
TerrainTextures &terrainTextures;
Storm &storm;
TextureLayerData(TerrainTextures &terrainTextures_, Storm &storm_)
: terrainTextures(terrainTextures_),
storm(storm_)
{
}
~TextureLayerData()
{
}
void initComboBox(HWND windowHandle, int id)
{
SendDlgItemMessage(windowHandle, id, CB_RESETCONTENT, 0, 0);
if(id == IDC_BOTTOM_TEXTURE)
SendDlgItemMessage(windowHandle, id, CB_ADDSTRING, 0, reinterpret_cast<LPARAM> ("(none)"));
for(int i = 0; i < terrainTextures.getTextureCount(); ++i)
{
std::string string = getFileName(terrainTextures.getTexture(i));
SendDlgItemMessage(windowHandle, id, CB_ADDSTRING, 0, reinterpret_cast<LPARAM> (string.c_str()));
}
SendDlgItemMessage(windowHandle, id, CB_SETCURSEL, 0, 0);
}
int getTexture(HWND windowHandle, int id)
{
int index = SendDlgItemMessage(windowHandle, id, CB_GETCURSEL, 0, 0);
if(id == IDC_BOTTOM_TEXTURE)
return index - 1;
return index;
}
static BOOL CALLBACK DialogHandler(HWND windowHandle, UINT message, WPARAM wParam, LPARAM lParam)
{
TextureLayerData *data = reinterpret_cast<TextureLayerData *> (GetWindowLong(windowHandle, GWL_USERDATA));
if(message == WM_INITDIALOG)
{
SetWindowLong(windowHandle, GWL_USERDATA, lParam);
data = reinterpret_cast<TextureLayerData *> (lParam);
data->initComboBox(windowHandle, IDC_TERRAIN_TEXTURE1);
data->initComboBox(windowHandle, IDC_TERRAIN_TEXTURE2);
data->initComboBox(windowHandle, IDC_BOTTOM_TEXTURE);
}
else if(message == WM_COMMAND)
{
int command = LOWORD(wParam);
if(command == WM_DESTROY)
EndDialog(windowHandle, 0);
if(command == IDC_GENERATE)
{
TerrainTextureGenerator generator(data->storm, data->terrainTextures);
generator.setTerrainTexture(0, data->getTexture(windowHandle, IDC_TERRAIN_TEXTURE1));
generator.setTerrainTexture(1, data->getTexture(windowHandle, IDC_TERRAIN_TEXTURE2));
generator.setWater(data->getTexture(windowHandle, IDC_BOTTOM_TEXTURE), 0);
generator.generate();
EndDialog(windowHandle, 1);
}
}
return 0;
}
bool show()
{
if(terrainTextures.getTextureCount() == 0)
return false;
if(DialogBoxParam(GetModuleHandle(0), MAKEINTRESOURCE(IDD_TEXTURELAYERS), 0, DialogHandler, reinterpret_cast<LPARAM> (this)) == 1)
return true;
return false;
}
};
TextureLayer::TextureLayer(TerrainTextures &textures, Storm &storm)
{
boost::scoped_ptr<TextureLayerData> tempData(new TextureLayerData(textures, storm));
data.swap(tempData);
}
TextureLayer::~TextureLayer()
{
}
bool TextureLayer::show()
{
return data->show();
}
} // end of namespace editor
} // end of namespace frozenbyte