georges.patch

aquiles, 10/31/2010 08:30 pm

Download (199.1 kB)

b/code/ryzom/tools/leveldesign/CMakeLists.txt Sun Oct 31 20:26:05 2010 +0100
9 9
  ADD_SUBDIRECTORY(world_editor)
10 10
ENDIF(WIN32)
11 11

12
IF(WITH_QT)
13
  ADD_SUBDIRECTORY(georges_editor_qt)
14
ENDIF(WITH_QT)
15

12 16
# folders not handled yet.
13 17
#georges_convert
14 18
#georges_dll
b/code/ryzom/tools/leveldesign/georges_editor_qt/CMakeLists.txt Sun Oct 31 20:26:05 2010 +0100
1
#-----------------------------------------------------------------------------
2
#
3
#   Georges Editor Qt
4
#   Copyright (C) 2010 Adrian J?kel <aj at elane2k dot com>
5
#
6
#-----------------------------------------------------------------------------
7

8
# This tells the application(s) where to find the installed data.
9
ADD_DEFINITIONS(-DDATA_DIR="\\"${NL_SHARE_PREFIX}/georges_editor_qt/\\"")
10

11
ADD_SUBDIRECTORY(src)
12

13
INSTALL(DIRECTORY data/
14
        DESTINATION share/georges_editor_qt/data
15
        COMPONENT data
16
        PATTERN "CVS" EXCLUDE
17
        PATTERN ".svn" EXCLUDE
18
        PATTERN "Makefile*" EXCLUDE)
19

b/code/ryzom/tools/leveldesign/georges_editor_qt/data/georges_editor.cfg Sun Oct 31 20:26:05 2010 +0100
1
RootConfigFilename   = "georges_editor_default.cfg";
2
SearchPaths          = {
3
	"G:/ryzom_assets/ryzom_assets/Stuff/Matis", "G:/ryzom_assets/bnps/characters_shapes" 
4
};
5
GraphicsDriver       = "OpenGL";
6
BackgroundColor      = {
7
	173, 205, 234 
8
};
9
LeveldesignPath      = "D:/Dev/Ryzom/code/ryzom/common/data_leveldesign/leveldesign";
10
QtWindowState        = "%00%00%00%FF%00%00%00%00%FD%00%00%00%03%00%00%00%00%00%00%02%A6%00%00%00%E9%FC%02%00%00%00%01%FB%00%00%00%2A%00C%00G%00e%00o%00r%00g%00e%00s%00D%00i%00r%00T%00r%00e%00e%00D%00i%00a%00l%00o%00g%01%00%00%00%3B%00%00%00%E9%00%00%00t%00%FF%FF%FF%00%00%00%02%00%00%00%00%00%00%00%00%FC%01%00%00%00%01%FB%00%00%00%26%00C%00O%00b%00j%00e%00c%00t%00V%00i%00e%00w%00e%00r%00D%00i%00a%00l%00o%00g%00%00%00%00%00%FF%FF%FF%FF%00%00%00N%00%FF%FF%FF%00%00%00%03%00%00%02%A6%00%00%01c%FC%01%00%00%00%01%FB%00%00%00%22%00C%00G%00e%00o%00r%00g%00e%00s%00L%00o%00g%00D%00i%00a%00l%00o%00g%01%00%00%00%00%00%00%02%A6%00%00%00%5D%00%FF%FF%FF%00%00%00%00%00%00%00%E9%00%00%00%04%00%00%00%04%00%00%00%08%00%00%00%08%FC%00%00%00%01%00%00%00%02%00%00%00%01%FF%FF%FF%FF%01%00%00%00%00%FF%FF%FF%FF%00%00%00%00%00%00%00%00";
11
QtWindowGeometry     = "%01%D9%D0%CB%00%01%00%00%00%00%00%D6%00%00%00%C0%00%00%03%83%00%00%03%82%00%00%00%DA%00%00%00%DE%00%00%03%7F%00%00%03~%00%00%00%00%00%00";
b/code/ryzom/tools/leveldesign/georges_editor_qt/data/georges_editor_default.cfg Sun Oct 31 20:26:05 2010 +0100
1
//////////////////////////////////////////////////////////////////////////////
2
// Config file for Georges Editor Qt ////////////////////////////////////////////////////
3
//////////////////////////////////////////////////////////////////////////////
4

5
//
6
// This file is used to setup the georges editor tool.
7
//
8

9

10
//////////////////////////////////////////////////////////////////////////////
11
// NeL Qt ////////////////////////////////////////////////////////////////////
12
//////////////////////////////////////////////////////////////////////////////
13

14
// Root directory where we can find the client datas (zones, tiles, maps, ...)
15
// You must uncomment this line on GNU/Linux and comment the next one
16
//SearchPaths = { "/usr/local/share/games/nel_qt/" };
17
SearchPaths = { "data" };
18
LeveldesignPath = "";
19

20
// Which extensions to remap to what if needed (pairs of 2)
21
RemapExtensions = { "png", "tga" };
22

23
// The language code of the client
24
LanguageCode = "en";
25

26
// If changes to the config should be saved on exit
27
SaveConfig = 1;
28

29

30
//////////////////////////////////////////////////////////////////////////////
31
// Qt ////////////////////////////////////////////////////////////////////////
32
//////////////////////////////////////////////////////////////////////////////
33

34
QtStyle = "Cleanlooks";
35
QtPalette = 0;
36
QtWindowState        = "";
37
QtWindowGeometry     = "";
38

39
//////////////////////////////////////////////////////////////////////////////
40
// Graphics //////////////////////////////////////////////////////////////////
41
//////////////////////////////////////////////////////////////////////////////
42

43
// Use OpenGL or Direct3D (Windows)
44
GraphicsEnabled = 1;
45
GraphicsDrivers = { "OpenGL", "Direct3D" };
46
GraphicsDriver = "OpenGL";
47

48
// Font name used for all text in the client (it can be a .ttf, .fon, .pfb)
49
FontName = "andbasr.ttf";
50
FontShadow = 1;
51

52
// Background color
53
BackgroundColor = { 151, 156, 182 };
54

55
SunDirection = { -2.935, +0.107, -1.22 };
56
SunAmbient = { 190, 170, 150 };
57
SunDiffuse = { 255, 248, 255 };
58
SunSpecular = { 255, 255, 255};
59

60
//////////////////////////////////////////////////////////////////////////////
61
// Time //////////////////////////////////////////////////////////////////////
62
//////////////////////////////////////////////////////////////////////////////
63

64
FpsSmoothing = 64;
65

66
//////////////////////////////////////////////////////////////////////////////
67
// Interface /////////////////////////////////////////////////////////////////
68
//////////////////////////////////////////////////////////////////////////////
69

70
// This setting is used to bind keys to actions.
71
//  "key_handler", "args", "***", "Key1|Key2", 
72
//                          *** -> CTRL, SHIFT, ALT don't matter
73
//                          --- -> CTRL, SHIFT, ALT must all be disabled
74
//                          -+- -> only SHIFT must be down
75
KeySettings = {
76
	"screenshot", "", "***", "KeyF5", 
77
	"command", "set_state Exit", "-+-", "KeyESCAPE", 
78
	"command", "set_state Login", "+--", "KeyESCAPE", 
79
	"command", "set_state Unload", "***", "KeyF8", 
80
	"command", "set_state Demo", "***", "KeyF7", 
81
	"move_forward", "", "***", "KeyUP|KeyZ|KeyW", 
82
	"move_backward", "", "***", "KeyDOWN|KeyS", 
83
	"move_left", "", "***", "KeyLEFT|KeyQ|KeyA", 
84
	"move_right", "", "***", "KeyRIGHT|KeyD", 
85
	"move_forward", "", "***", "KeyZ|KeyW", 
86
	"move_backward", "", "***", "KeyS", 
87
	"move_left", "", "***", "KeyQ|KeyA", 
88
	"move_right", "", "***", "KeyD", 
89
	"chat_begin", "", "***", "KeyT", 
90
	"chat_send", "", "***", "KeyENTER", 
91
	"chat_leave", "", "***", "KeyESCAPE", 
92
	"display_test", "", "***", "KeyTAB", 
93
	"send_action", "0", "---", "Key1", 
94
	"send_action", "1", "---", "Key2", 
95
	"send_action", "2", "---", "Key3", 
96
	"send_action", "3", "---", "Key4", 
97
	"send_action", "4", "---", "Key5", 
98
	"send_action", "5", "---", "Key6", 
99
	"send_action", "6", "---", "Key7", 
100
	"send_action", "7", "---", "Key8", 
101
	"send_action", "8", "---", "Key9", 
102
	"send_action", "9", "---", "Key0", 
103
	"demo_crystal_spawn", "", "---", "KeyO", 
104
	"demo_crystal_explode", "", "---", "KeyP", 
105
	"free_camera_forward", "", "---", "KeyNUMPAD8", 
106
	"free_camera_backward", "", "---", "KeyNUMPAD2", 
107
	"free_camera_left", "", "---", "KeyNUMPAD4", 
108
	"free_camera_right", "", "---", "KeyNUMPAD6", 
109
	"switch_camera", "", "---", "KeyF4", 
110
	"switch_ui_visible" ,"", "---", "KeyF6", 
111
};
112

113
// end of file
b/code/ryzom/tools/leveldesign/georges_editor_qt/src/CMakeLists.txt Sun Oct 31 20:26:05 2010 +0100
1
INCLUDE_DIRECTORIES(${CMAKE_CURRENT_BINARY_DIR} ${CMAKE_CURRENT_SOURCE_DIR} ${LIBXML2_INCLUDE_DIR} ${NEL_INCLUDE_DIR} ${QT_INCLUDES})
2
INCLUDE( ${QT_USE_FILE} )
3

4
FILE(GLOB GEORGES_EDITOR_SRC *.cpp)
5
SET(GEORGES_EDITOR_HDR georges_dirtree_dialog.h georges_treeview_dialog.h georgesform_model.h main_window.h
6
	log_dialog.h objectviewer_dialog.h settings_dialog.h)
7
SET(GEORGES_EDITOR_UIS settings_form.ui objectviewer_form.ui log_form.ui georges_treeview_form.ui georges_dirtree_form.ui)
8
SET(GEORGES_EDITOR_RCS georges_editor_qt.qrc)
9

10
SET(QT_USE_QTGUI TRUE)
11
SET(QT_USE_QTOPENGL TRUE)
12

13
QT4_ADD_RESOURCES( GEORGES_EDITOR_RC_SRCS ${GEORGES_EDITOR_RCS} )
14
QT4_WRAP_CPP( GEORGES_EDITOR_MOC_SRCS ${GEORGES_EDITOR_HDR} )
15
QT4_WRAP_UI( GEORGES_EDITOR_UI_HDRS ${GEORGES_EDITOR_UIS} )
16

17
ADD_EXECUTABLE(georges_editor_qt WIN32 ${GEORGES_EDITOR_SRC} ${GEORGES_EDITOR_MOC_SRCS} ${GEORGES_EDITOR_RC_SRCS} ${GEORGES_EDITOR_UI_HDRS})
18

19
TARGET_LINK_LIBRARIES(georges_editor_qt
20
		nelmisc 
21
		nel3d
22
		nelgeorges
23
		${QT_LIBRARIES}
24
		${QT_QTOPENGL_LIBRARY}
25
		${QT_QTMAIN_LIBRARY})
26

27
ADD_DEFINITIONS(-DQT_NO_KEYWORDS ${LIBXML2_DEFINITIONS} ${QT_DEFINITIONS})
28
NL_DEFAULT_PROPS(georges_editor_qt "Ryzom, Tools, World: Georges Editor Qt")
29
NL_ADD_RUNTIME_FLAGS(georges_editor_qt)
30

31
IF(WITH_PCH)
32
  ADD_NATIVE_PRECOMPILED_HEADER(georges_editor_qt ${CMAKE_CURRENT_SOURCE_DIR}/stdpch.h ${CMAKE_CURRENT_SOURCE_DIR}/stdpch.cpp)
33
ENDIF(WITH_PCH)
34

35
INSTALL(TARGETS georges_editor_qt RUNTIME DESTINATION bin COMPONENT runtime)
b/code/ryzom/tools/leveldesign/georges_editor_qt/src/callback.cpp Sun Oct 31 20:26:05 2010 +0100
1
/* 
2
 * Copyright (C) 2010  by authors
3
 * 
4
 * This file is part of NEL QT.
5
 * NEL QT is free software: you can redistribute it and/or modify it
6
 * under the terms of the GNU General Public License as published by
7
 * the Free Software Foundation, either version 2 of the License, or
8
 * (at your option) any later version.
9
 * 
10
 * NEL QT is distributed in the hope that it will be useful, but
11
 * WITHOUT ANY WARRANTY; without even the implied warranty of
12
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
13
 * General Public License for more details.
14
 * 
15
 * You should have received a copy of the GNU General Public License
16
 * along with NEL QT; see the file COPYING.  If not, see
17
 * <http://www.gnu.org/licenses/>.
18
 */
19

20
#include <nel/misc/types_nl.h>
21
#include "callback.h"
22

23
namespace NLQT {
24

25
} /* namespace NLQT */
26

27
/* end of file */
b/code/ryzom/tools/leveldesign/georges_editor_qt/src/callback.h Sun Oct 31 20:26:05 2010 +0100
1
/* 
2
 * Copyright (C) 2010  by authors
3
 * 
4
 * This file is part of NEL QT.
5
 * NEL QT is free software: you can redistribute it and/or modify it
6
 * under the terms of the GNU General Public License as published by
7
 * the Free Software Foundation, either version 2 of the License, or
8
 * (at your option) any later version.
9
 * 
10
 * NEL QT is distributed in the hope that it will be useful, but
11
 * WITHOUT ANY WARRANTY; without even the implied warranty of
12
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
13
 * General Public License for more details.
14
 * 
15
 * You should have received a copy of the GNU General Public License
16
 * along with NEL QT; see the file COPYING.  If not, see
17
 * <http://www.gnu.org/licenses/>.
18
 */
19

20
#ifndef NLQT_CALLBACK_H
21
#define NLQT_CALLBACK_H
22
#include <nel/misc/types_nl.h>
23

24
// STL includes
25

26
// NeL includes
27
#include <nel/misc/debug.h>
28

29
// Project includes
30

31
namespace NLQT {
32

33
#define NLQT_CALLBACK_TEMPLATE \
34
/** \
35
 * \brief NLQT_CALLBACK_ARGS_CLASS \
36
 * \date 2009-03-03 18:09GMT \
37
 * \author Jan Boon (Kaetemi) \
38
 * Awesome callback template \
39
 */ \
40
template<typename TReturn NLQT_CALLBACK_ARGS_TYPENAME> \
41
class NLQT_CALLBACK_ARGS_CLASS \
42
{ \
43
	/* Very simple reference counting callback base */ \
44
	class CCallbackBase \
45
	{ \
46
	public: \
47
		CCallbackBase() : m_RefCount(0) \
48
		{ \
49
			 \
50
		} \
51
		 \
52
		virtual ~CCallbackBase() \
53
		{ \
54
			nlassert(!m_RefCount); \
55
		} \
56
		 \
57
		void refAdd() \
58
		{ \
59
			++m_RefCount; \
60
		} \
61
		 \
62
		void refRemove() \
63
		{ \
64
			--m_RefCount; \
65
			if (!m_RefCount) \
66
				delete this; \
67
		} \
68
		 \
69
		virtual TReturn callback(NLQT_CALLBACK_ARGS_DECL) = 0; \
70
		 \
71
		virtual bool equals(const CCallbackBase *callbackBase) = 0; \
72
		 \
73
		/* disable copy */ \
74
		CCallbackBase(const CCallbackBase &); \
75
		CCallbackBase &operator=(const CCallbackBase &); \
76
		 \
77
	private: \
78
		uint m_RefCount; \
79
	}; \
80
	 \
81
	typedef TReturn TCallbackFunction(NLQT_CALLBACK_ARGS_DECL); \
82
	class CCallbackFunction : public CCallbackBase \
83
	{ \
84
	public: \
85
		CCallbackFunction(TCallbackFunction *callbackFunction) : m_CallbackFunction(callbackFunction) \
86
		{ \
87
			nlassert(m_CallbackFunction); \
88
		} \
89
		 \
90
		virtual ~CCallbackFunction() \
91
		{ \
92
			m_CallbackFunction = NULL; \
93
		} \
94
		 \
95
		virtual TReturn callback(NLQT_CALLBACK_ARGS_DECL) \
96
		{ \
97
			return m_CallbackFunction(NLQT_CALLBACK_ARGS_IMPL); \
98
		} \
99
		 \
100
		virtual bool equals(const CCallbackBase *callbackBase) \
101
		{ \
102
			const CCallbackFunction *callbackFunction = \
103
				dynamic_cast<const CCallbackFunction *>(callbackBase); \
104
			if (!callbackFunction) return false; \
105
			return m_CallbackFunction == callbackFunction->m_CallbackFunction; \
106
		} \
107
		 \
108
	private: \
109
		TCallbackFunction *m_CallbackFunction; \
110
	}; \
111
	 \
112
	template<typename TClass> \
113
	class CCallbackMethod : public CCallbackBase \
114
	{ \
115
		typedef TReturn (TClass::*TCallbackMethod)(NLQT_CALLBACK_ARGS_DECL); \
116
	public: \
117
		CCallbackMethod(TClass *callbackObject, TCallbackMethod callbackMethod) : m_CallbackObject(callbackObject), m_CallbackMethod(callbackMethod) \
118
		{ \
119
			nlassert(m_CallbackObject); \
120
			nlassert(m_CallbackMethod); \
121
		} \
122
		 \
123
		virtual ~CCallbackMethod() \
124
		{ \
125
			m_CallbackObject = NULL; \
126
			m_CallbackMethod = NULL; \
127
		} \
128
		 \
129
		virtual TReturn callback(NLQT_CALLBACK_ARGS_DECL) \
130
		{ \
131
			return (m_CallbackObject->*m_CallbackMethod)(NLQT_CALLBACK_ARGS_IMPL); \
132
		} \
133
		 \
134
		virtual bool equals(const CCallbackBase *callbackBase) \
135
		{ \
136
			const CCallbackMethod *callbackMethod = \
137
				dynamic_cast<const CCallbackMethod *>(callbackBase); \
138
			if (!callbackMethod) return false; \
139
			return m_CallbackObject == callbackMethod->m_CallbackObject \
140
				&& m_CallbackMethod == callbackMethod->m_CallbackMethod; \
141
		} \
142
		 \
143
	private: \
144
		TClass *m_CallbackObject; \
145
		TCallbackMethod m_CallbackMethod; \
146
	}; \
147
	 \
148
public: \
149
	CCallback() : m_CallbackBase(NULL) \
150
	{ \
151
		 \
152
	} \
153
	 \
154
	CCallback(TCallbackFunction *callbackFunction) : m_CallbackBase(new CCallbackFunction(callbackFunction)) \
155
	{ \
156
		nlassert(m_CallbackBase); \
157
		m_CallbackBase->refAdd(); \
158
	} \
159
	 \
160
	template<typename TClass> \
161
	CCallback(TClass *callbackObject, TReturn (TClass::*callbackMethod)(NLQT_CALLBACK_ARGS_DECL)) : m_CallbackBase(new CCallbackMethod<TClass>(callbackObject, callbackMethod)) \
162
	{ \
163
		nlassert(m_CallbackBase); \
164
		m_CallbackBase->refAdd(); \
165
	} \
166
	 \
167
	CCallback(const CCallback &callback) \
168
	{ \
169
		m_CallbackBase = callback.m_CallbackBase; \
170
		if (m_CallbackBase) \
171
			m_CallbackBase->refAdd(); \
172
	} \
173
	 \
174
	CCallback &operator=(const CCallback &callback) \
175
	{ \
176
		if (m_CallbackBase != callback.m_CallbackBase) \
177
		{ \
178
			if (m_CallbackBase) \
179
				m_CallbackBase->refRemove(); \
180
			m_CallbackBase = callback.m_CallbackBase; \
181
			if (m_CallbackBase) \
182
				m_CallbackBase->refAdd(); \
183
		} \
184
		return *this; \
185
	} \
186
	 \
187
	~CCallback() \
188
	{ \
189
		if (m_CallbackBase) \
190
		{ \
191
			m_CallbackBase->refRemove(); \
192
			m_CallbackBase = NULL; \
193
		} \
194
	} \
195
	 \
196
	TReturn callback(NLQT_CALLBACK_ARGS_DECL) \
197
	{ \
198
		nlassert(m_CallbackBase); \
199
		return m_CallbackBase->callback(NLQT_CALLBACK_ARGS_IMPL); \
200
	} \
201
	 \
202
	TReturn operator()(NLQT_CALLBACK_ARGS_DECL) \
203
	{ \
204
		nlassert(m_CallbackBase); \
205
		return m_CallbackBase->callback(NLQT_CALLBACK_ARGS_IMPL); \
206
	} \
207
	 \
208
	bool valid() const \
209
	{ \
210
		return m_CallbackBase != NULL; \
211
	} \
212
	 \
213
	operator bool() const \
214
	{ \
215
		return m_CallbackBase != NULL; \
216
	} \
217
	 \
218
	bool operator==(const CCallback &callback) \
219
	{ \
220
		return m_CallbackBase->equals(callback.m_CallbackBase); \
221
	} \
222
	 \
223
private: \
224
	CCallbackBase *m_CallbackBase; \
225
	 \
226
}; /* class CCallback */ \
227

228
template<typename TReturn, typename TArgsA = void, typename TArgsB = void, typename TArgsC = void, typename TArgsD = void, typename TArgsE = void, typename TArgsF = void, typename TArgsG = void, typename TDummy = void>
229
class CCallback;
230

231
#define NLQT_CALLBACK_ARGS_CLASS CCallback<TReturn, void, void, void, void, void, void, void, void>
232
#define NLQT_CALLBACK_ARGS_TYPENAME 
233
#define NLQT_CALLBACK_ARGS_DECL 
234
#define NLQT_CALLBACK_ARGS_IMPL 
235
NLQT_CALLBACK_TEMPLATE
236
#undef NLQT_CALLBACK_ARGS_CLASS
237
#undef NLQT_CALLBACK_ARGS_TYPENAME
238
#undef NLQT_CALLBACK_ARGS_DECL
239
#undef NLQT_CALLBACK_ARGS_IMPL
240

241
#define NLQT_CALLBACK_ARGS_CLASS CCallback<TReturn, TArgsA, void, void, void, void, void, void, void>
242
#define NLQT_CALLBACK_ARGS_TYPENAME , typename TArgsA
243
#define NLQT_CALLBACK_ARGS_DECL TArgsA argsA
244
#define NLQT_CALLBACK_ARGS_IMPL argsA
245
NLQT_CALLBACK_TEMPLATE
246
#undef NLQT_CALLBACK_ARGS_CLASS
247
#undef NLQT_CALLBACK_ARGS_TYPENAME
248
#undef NLQT_CALLBACK_ARGS_DECL
249
#undef NLQT_CALLBACK_ARGS_IMPL
250

251
#define NLQT_CALLBACK_ARGS_CLASS CCallback<TReturn, TArgsA, TArgsB, void, void, void, void, void, void>
252
#define NLQT_CALLBACK_ARGS_TYPENAME , typename TArgsA, typename TArgsB
253
#define NLQT_CALLBACK_ARGS_DECL TArgsA argsA, TArgsB argsB
254
#define NLQT_CALLBACK_ARGS_IMPL argsA, argsB
255
NLQT_CALLBACK_TEMPLATE
256
#undef NLQT_CALLBACK_ARGS_CLASS
257
#undef NLQT_CALLBACK_ARGS_TYPENAME
258
#undef NLQT_CALLBACK_ARGS_DECL
259
#undef NLQT_CALLBACK_ARGS_IMPL
260

261
#define NLQT_CALLBACK_ARGS_CLASS CCallback<TReturn, TArgsA, TArgsB, TArgsC, void, void, void, void, void>
262
#define NLQT_CALLBACK_ARGS_TYPENAME , typename TArgsA, typename TArgsB, typename TArgsC
263
#define NLQT_CALLBACK_ARGS_DECL TArgsA argsA, TArgsB argsB, TArgsC argsC
264
#define NLQT_CALLBACK_ARGS_IMPL argsA, argsB, argsC
265
NLQT_CALLBACK_TEMPLATE
266
#undef NLQT_CALLBACK_ARGS_CLASS
267
#undef NLQT_CALLBACK_ARGS_TYPENAME
268
#undef NLQT_CALLBACK_ARGS_DECL
269
#undef NLQT_CALLBACK_ARGS_IMPL
270

271
#define NLQT_CALLBACK_ARGS_CLASS CCallback<TReturn, TArgsA, TArgsB, TArgsC, TArgsD, void, void, void, void>
272
#define NLQT_CALLBACK_ARGS_TYPENAME , typename TArgsA, typename TArgsB, typename TArgsC, typename TArgsD
273
#define NLQT_CALLBACK_ARGS_DECL TArgsA argsA, TArgsB argsB, TArgsC argsC, TArgsD argsD
274
#define NLQT_CALLBACK_ARGS_IMPL argsA, argsB, argsC, argsD
275
NLQT_CALLBACK_TEMPLATE
276
#undef NLQT_CALLBACK_ARGS_CLASS
277
#undef NLQT_CALLBACK_ARGS_TYPENAME
278
#undef NLQT_CALLBACK_ARGS_DECL
279
#undef NLQT_CALLBACK_ARGS_IMPL
280

281
#define NLQT_CALLBACK_ARGS_CLASS CCallback<TReturn, TArgsA, TArgsB, TArgsC, TArgsD, TArgsE, void, void, void>
282
#define NLQT_CALLBACK_ARGS_TYPENAME , typename TArgsA, typename TArgsB, typename TArgsC, typename TArgsD, typename TArgsE
283
#define NLQT_CALLBACK_ARGS_DECL TArgsA argsA, TArgsB argsB, TArgsC argsC, TArgsD argsD, TArgsE argsE
284
#define NLQT_CALLBACK_ARGS_IMPL argsA, argsB, argsC, argsD, argsE
285
NLQT_CALLBACK_TEMPLATE
286
#undef NLQT_CALLBACK_ARGS_CLASS
287
#undef NLQT_CALLBACK_ARGS_TYPENAME
288
#undef NLQT_CALLBACK_ARGS_DECL
289
#undef NLQT_CALLBACK_ARGS_IMPL
290

291
#define NLQT_CALLBACK_ARGS_CLASS CCallback<TReturn, TArgsA, TArgsB, TArgsC, TArgsD, TArgsE, TArgsF, void, void>
292
#define NLQT_CALLBACK_ARGS_TYPENAME , typename TArgsA, typename TArgsB, typename TArgsC, typename TArgsD, typename TArgsE, typename TArgsF
293
#define NLQT_CALLBACK_ARGS_DECL TArgsA argsA, TArgsB argsB, TArgsC argsC, TArgsD argsD, TArgsE argsE, TArgsF argsF
294
#define NLQT_CALLBACK_ARGS_IMPL argsA, argsB, argsC, argsD, argsE, argsF
295
NLQT_CALLBACK_TEMPLATE
296
#undef NLQT_CALLBACK_ARGS_CLASS
297
#undef NLQT_CALLBACK_ARGS_TYPENAME
298
#undef NLQT_CALLBACK_ARGS_DECL
299
#undef NLQT_CALLBACK_ARGS_IMPL
300

301
#define NLQT_CALLBACK_ARGS_CLASS CCallback<TReturn, TArgsA, TArgsB, TArgsC, TArgsD, TArgsE, TArgsF, TArgsG, void>
302
#define NLQT_CALLBACK_ARGS_TYPENAME , typename TArgsA, typename TArgsB, typename TArgsC, typename TArgsD, typename TArgsE, typename TArgsF, typename TArgsG
303
#define NLQT_CALLBACK_ARGS_DECL TArgsA argsA, TArgsB argsB, TArgsC argsC, TArgsD argsD, TArgsE argsE, TArgsF argsF, TArgsG argsG
304
#define NLQT_CALLBACK_ARGS_IMPL argsA, argsB, argsC, argsD, argsE, argsF, argsG
305
NLQT_CALLBACK_TEMPLATE
306
#undef NLQT_CALLBACK_ARGS_CLASS
307
#undef NLQT_CALLBACK_ARGS_TYPENAME
308
#undef NLQT_CALLBACK_ARGS_DECL
309
#undef NLQT_CALLBACK_ARGS_IMPL
310
#undef NLQT_CALLBACK_ARGS_CLASSNAME
311

312
#undef NLQT_CALLBACK_TEMPLATE
313

314
typedef CCallback<void> CEmptyCallback;
315

316
} /* namespace NLQT */
317

318
#endif /* #ifndef NLQT_CALLBACK_H */
319

320
/* end of file */
b/code/ryzom/tools/leveldesign/georges_editor_qt/src/configuration.cpp Sun Oct 31 20:26:05 2010 +0100
1
/*
2
    Georges Editor Qt
3
	Copyright (C) 2010 Adrian Jaekel <aj at elane2k dot com>
4

5
    This program is free software: you can redistribute it and/or modify
6
    it under the terms of the GNU General Public License as published by
7
    the Free Software Foundation, either version 3 of the License, or
8
    (at your option) any later version.
9

10
    This program is distributed in the hope that it will be useful,
11
    but WITHOUT ANY WARRANTY; without even the implied warranty of
12
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13
    GNU General Public License for more details.
14

15
    You should have received a copy of the GNU General Public License
16
    along with this program.  If not, see <http://www.gnu.org/licenses/>.
17

18
*/
19

20
#include "configuration.h"
21

22
// STL includes
23

24
// Qt includes
25
#include <QFile>
26

27
// NeL includes
28
#include <nel/misc/debug.h>
29
#include <nel/misc/hierarchical_timer.h>
30
#include <nel/misc/config_file.h>
31
#include <nel/misc/path.h>
32

33
#include "modules.h"
34

35
#include <QFile>
36

37
using namespace std;
38
using namespace NLMISC;
39

40
namespace NLQT {
41
  
42
CConfiguration::CConfiguration()
43
{
44
	
45
}
46

47
CConfiguration::~CConfiguration()
48
{
49
	
50
}
51

52
void CConfiguration::init()
53
{	
54
	// verify data
55
	nlassert(!ConfigCallbacks.size());
56
	
57
	// load config
58
	QFile file(NLQT_CONFIG_FILE);
59
	if (!file.exists()) {
60
		file.open( QIODevice::WriteOnly | QIODevice::Text );
61
		file.write("GraphicsDrivers = { \"OpenGL\", \"Direct3D\" };");
62
		file.write("\nSearchPaths = {\"\"};");
63
		file.write("\nRemapExtensions = { \"png\", \"tga\" };");
64
		file.write("\nBackgroundColor = { 0, 0, 0 };");
65
		file.write("\nQtStyle = \"\";");
66
		file.write("\nQtPalette = \"\";");
67
		file.close();
68
	}
69

70
	try {
71
	ConfigFile.load(NLQT_CONFIG_FILE);
72
	} catch(...) {
73
	}
74
	
75
	// setup config file callback
76
	Modules::config().setCallback("SearchPaths", CConfigCallback(this, &CConfiguration::cfcbSearchPaths));
77

78
}
79

80
void CConfiguration::release()
81
{
82
	Modules::config().dropCallback("SearchPaths");
83
	
84
	 // save and release the config file
85
	if (ConfigFile.exists("SaveConfig") && ConfigFile.getVarPtr("SaveConfig")->asBool()) 
86
	{
87
		ConfigFile.save();
88
	}
89
	ConfigFile.clear();
90
		
91
	// release the search paths etc
92
	CPath::releaseInstance();
93
	
94
	// verify data
95
	nlassert(!ConfigCallbacks.size());
96
}
97
 
98
void CConfiguration::updateUtilities()
99
{
100
	//H_AUTO2
101
	CConfigFile::checkConfigFiles();
102
}
103

104
void CConfiguration::configSearchPaths()
105
{
106
	cfcbSearchPaths(Modules::config().getConfigFile().getVar("SearchPaths"));
107
}
108

109
std::string CConfiguration::configLeveldesignPath()
110
{
111
	std::string path = Modules::config().getValue("LeveldesignPath", QString("").toStdString());
112
	cfcbSearchPaths(Modules::config().getConfigFile().getVar("LeveldesignPath"));
113

114
	return path;
115
}
116

117
void CConfiguration::configRemapExtensions()
118
{
119
	CConfigFile::CVar *var;
120
	var = ConfigFile.getVarPtr("RemapExtensions");
121
	uint varsize = var->size();
122
	for (uint i = 0; i < varsize; i += 2)
123
	CPath::remapExtension(var->asString(i), var->asString(i + 1), true);
124
}
125

126
void CConfiguration::setAndCallback(const std::string &varName, CConfigCallback configCallback)
127
{
128
	ConfigCallbacks[varName] = configCallback;
129
	ConfigFile.setCallback(varName, cbConfigCallback);
130
	configCallback(*ConfigFile.getVarPtr(varName));
131
}
132

133
void CConfiguration::setCallback(const std::string &varName, CConfigCallback configCallback)
134
{
135
	ConfigCallbacks[varName] = configCallback;
136
	ConfigFile.setCallback(varName, cbConfigCallback);
137
}
138

139
void CConfiguration::dropCallback(const std::string &varName)
140
{
141
	ConfigFile.setCallback(varName, NULL);
142
	ConfigCallbacks.erase(varName);
143
}
144

145
float CConfiguration::getValue(const string &varName, float defaultValue)
146
{
147
	if (ConfigFile.exists(varName)) return ConfigFile.getVar(varName).asFloat();
148
	CConfigFile::CVar varToCopy;
149
	varToCopy.forceAsDouble((double)defaultValue);	
150
	ConfigFile.insertVar(varName, varToCopy);
151
	return defaultValue;
152
}
153

154
double CConfiguration::getValue(const string &varName, double defaultValue)
155
{
156
	if (ConfigFile.exists(varName)) return ConfigFile.getVar(varName).asDouble();
157
	CConfigFile::CVar varToCopy;
158
	varToCopy.forceAsDouble(defaultValue);	
159
	ConfigFile.insertVar(varName, varToCopy);
160
	return defaultValue;
161
}
162

163
int CConfiguration::getValue(const string &varName, int defaultValue)
164
{
165
	if (ConfigFile.exists(varName)) return ConfigFile.getVar(varName).asInt();
166
	CConfigFile::CVar varToCopy;
167
	varToCopy.forceAsInt(defaultValue);	
168
	ConfigFile.insertVar(varName, varToCopy);
169
	return defaultValue;
170
}
171

172
string CConfiguration::getValue(const string &varName, const string &defaultValue)
173
{
174
	if (ConfigFile.exists(varName)) return ConfigFile.getVar(varName).asString();
175
	CConfigFile::CVar varToCopy;
176
	varToCopy.forceAsString(defaultValue);
177
	ConfigFile.insertVar(varName, varToCopy);
178
	return defaultValue;
179
}
180

181
ucstring CConfiguration::getValue(const string &varName, const ucstring &defaultValue)
182
{
183
	if (ConfigFile.exists(varName)) return ucstring::makeFromUtf8(ConfigFile.getVar(varName).asString());
184
	CConfigFile::CVar varToCopy;
185
	varToCopy.forceAsString(defaultValue.toUtf8());
186
	ConfigFile.insertVar(varName, varToCopy);
187
	return defaultValue;
188
}
189

190
bool CConfiguration::getValue(const string &varName, bool defaultValue)
191
{
192
	if (ConfigFile.exists(varName)) return ConfigFile.getVar(varName).asBool();
193
	CConfigFile::CVar varToCopy;
194
	varToCopy.forceAsInt(defaultValue ? 1 : 0);	
195
	ConfigFile.insertVar(varName, varToCopy);
196
	return defaultValue;
197
}
198

199
CRGBA CConfiguration::getValue(const string &varName, const CRGBA &defaultValue)
200
{
201
	if (ConfigFile.exists(varName)) 
202
	{
203
		return getValue(ConfigFile.getVar(varName), defaultValue);
204
	}
205
	else
206
	{
207
		// create a new value only if one doesn't exist
208
		CConfigFile::CVar varToCopy;
209
		varToCopy.forceAsInt(defaultValue.R);
210
		varToCopy.setAsInt(defaultValue.G, 1);
211
		varToCopy.setAsInt(defaultValue.B, 2);
212
		varToCopy.setAsInt(defaultValue.A, 3);
213
		ConfigFile.insertVar(varName, varToCopy);
214
	}
215
	return defaultValue;
216
}
217

218
CRGBA CConfiguration::getValue(const CConfigFile::CVar &var, const CRGBA &defaultValue)
219
{
220
	if (var.size() >= 3)
221
	{
222
		if (var.size() > 4) nlwarning("RGBA value in config value '%s' is too long, ignoring unused values");
223
		return CRGBA((uint8)var.asInt(0), (uint8)var.asInt(1), (uint8)var.asInt(2), var.size() >= 4 ? (uint8)var.asInt(3) : 255);
224
	}
225
	nlwarning("Invalid RGBA value in config value '%s', reverting to default { %i, %i, %i, %i }", var.Name.c_str(), (sint)defaultValue.R, (sint)defaultValue.G, (sint)defaultValue.B, (sint)defaultValue.A);	
226
	return defaultValue;
227
}
228

229
void CConfiguration::cbConfigCallback(NLMISC::CConfigFile::CVar &var)
230
{
231
	Modules::config().ConfigCallbacks[var.Name](var);
232
}
233

234
void CConfiguration::cfcbSearchPaths(NLMISC::CConfigFile::CVar &var)
235
{
236
	uint varsize = var.size();
237
	//CPath::clearMap();
238
	for (uint i = 0; i < varsize; ++i)
239
		CPath::addSearchPath(var.asString(i), true, false);
240
}
241

242
} /* namespace NLQT */
b/code/ryzom/tools/leveldesign/georges_editor_qt/src/configuration.h Sun Oct 31 20:26:05 2010 +0100
1
/*
2
    Georges Editor Qt
3
	Copyright (C) 2010 Adrian Jaekel <aj at elane2k dot com>
4

5
    This program is free software: you can redistribute it and/or modify
6
    it under the terms of the GNU General Public License as published by
7
    the Free Software Foundation, either version 3 of the License, or
8
    (at your option) any later version.
9

10
    This program is distributed in the hope that it will be useful,
11
    but WITHOUT ANY WARRANTY; without even the implied warranty of
12
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13
    GNU General Public License for more details.
14

15
    You should have received a copy of the GNU General Public License
16
    along with this program.  If not, see <http://www.gnu.org/licenses/>.
17

18
*/
19

20
#ifndef CONFIGURATION_H
21
#define CONFIGURATION_H
22

23
#include <nel/misc/types_nl.h>
24

25
// STL includes
26
#include <map>
27

28
// NeL includes
29
#include <nel/misc/config_file.h>
30
#include <nel/misc/rgba.h>
31
#include <nel/misc/ucstring.h>
32

33
// Project includes
34
#include "callback.h"
35

36
#define NLQT_CONFIG_FILE "georges_editor.cfg"
37

38
namespace NLQT {
39

40
typedef CCallback<void, NLMISC::CConfigFile::CVar &> CConfigCallback;
41

42
/**
43
 * CConfiguration
44
 * \brief CConfiguration
45
 * \date 2010-02-05 15:44GMT
46
 * \author Jan Boon (Kaetemi)
47
 */
48
class CConfiguration
49
{
50
public:
51
	CConfiguration();
52
	virtual ~CConfiguration();
53

54
	void init();
55
	void release();
56
	
57
	void updateUtilities();
58
	void configSearchPaths();
59
	std::string configLeveldesignPath();
60
	void configRemapExtensions();
61

62
	void setAndCallback(const std::string &varName, CConfigCallback configCallback);
63
	void setCallback(const std::string &varName, CConfigCallback configCallback);
64
	void dropCallback(const std::string &varName);
65
	
66
	float getValue(const std::string &varName, float defaultValue);
67
	double getValue(const std::string &varName, double defaultValue);
68
	int getValue(const std::string &varName, int defaultValue);
69
	std::string getValue(const std::string &varName, const std::string &defaultValue);
70
	ucstring getValue(const std::string &varName, const ucstring &defaultValue);
71
	bool getValue(const std::string &varName, bool defaultValue);
72
	NLMISC::CRGBA getValue(const std::string &varName, const NLMISC::CRGBA &defaultValue);
73
	NLMISC::CRGBA getValue(const NLMISC::CConfigFile::CVar &var, const NLMISC::CRGBA &defaultValue);
74
	
75
	inline NLMISC::CConfigFile &getConfigFile() { return ConfigFile; }
76

77
private:
78
	static void cbConfigCallback(NLMISC::CConfigFile::CVar &var);
79

80
	void cfcbSearchPaths(NLMISC::CConfigFile::CVar &var);
81

82
	CConfiguration(const CConfiguration &);
83
	CConfiguration &operator=(const CConfiguration &);
84

85
	NLMISC::CConfigFile ConfigFile;
86
	std::map<std::string, CConfigCallback> ConfigCallbacks;
87
	
88
};/* class CConfiguration */
89

90
} /* namespace NLQT */
91

92
#endif // CONFIGURATION_H
b/code/ryzom/tools/leveldesign/georges_editor_qt/src/entity.cpp Sun Oct 31 20:26:05 2010 +0100
1
/*
2
    Georges Editor Qt
3
	Copyright (C) 2010 Adrian Jaekel <aj at elane2k dot com>
4

5
    This program is free software: you can redistribute it and/or modify
6
    it under the terms of the GNU General Public License as published by
7
    the Free Software Foundation, either version 3 of the License, or
8
    (at your option) any later version.
9

10
    This program is distributed in the hope that it will be useful,
11
    but WITHOUT ANY WARRANTY; without even the implied warranty of
12
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13
    GNU General Public License for more details.
14

15
    You should have received a copy of the GNU General Public License
16
    along with this program.  If not, see <http://www.gnu.org/licenses/>.
17
*/
18

19
#include "entity.h"
20

21
// NeL includes
22
#include <nel/misc/path.h>
23
#include <nel/3d/u_camera.h>
24
#include <nel/3d/u_driver.h>
25
#include <nel/3d/u_text_context.h>
26
#include <nel/3d/u_instance.h>
27
#include <nel/3d/u_scene.h>
28
#include <nel/3d/u_material.h>
29
#include <nel/3d/u_landscape.h>
30
#include <nel/3d/u_skeleton.h>
31
#include <nel/3d/u_animation_set.h>
32
#include <nel/3d/u_animation.h>
33
#include <nel/3d/u_play_list_manager.h>
34
#include <nel/3d/u_play_list.h>
35
#include <nel/3d/u_track.h>
36

37
// Project includes
38
#include "modules.h"
39

40
using namespace NLMISC;
41
using namespace NL3D;
42

43
namespace NLQT {
44

45
CSlotInfo& CSlotInfo::operator=(const CSlotInfo & slotInfo)
46
{
47
	if ( this != &slotInfo)
48
	{
49
		Animation = slotInfo.Animation;
50
		ClampMode = slotInfo.ClampMode;
51
		Enable = slotInfo.Enable;
52
		EndBlend = slotInfo.EndBlend;
53
		EndTime = slotInfo.EndTime;
54
		Offset = slotInfo.Offset;
55
		Skeleton = slotInfo.Skeleton;
56
		SkeletonInverted = slotInfo.SkeletonInverted;
57
		Smoothness = slotInfo.Smoothness;
58
		SpeedFactor = slotInfo.SpeedFactor;
59
		StartBlend = slotInfo.StartBlend;
60
		StartTime = slotInfo.StartTime;
61
	}
62
	return *this;
63
}
64
  
65
CEntity::CEntity(void):
66
		_Name("<Unknown>"),
67
		_Instance(NULL), _Skeleton(NULL), 
68
		_PlayList(NULL), _AnimationSet(NULL)
69
{
70
}
71

72
CEntity::~CEntity(void)
73
{
74
}
75

76
void CEntity::loadAnimation(std::string &fileName)
77
{
78
	uint id = _AnimationSet->addAnimation(fileName.c_str(),CFile::getFilenameWithoutExtension(fileName).c_str());	
79
	_AnimationList.push_back(_AnimationSet->getAnimationName(id));
80
	_AnimationSet->build();
81
	if (!_Skeleton.empty()) _PlayList->registerTransform(_Skeleton);
82
	else _PlayList->registerTransform(_Instance);
83
}
84

85
void CEntity::loadSWT(std::string &fileName)
86
{
87
	uint id = _AnimationSet->addSkeletonWeight(fileName.c_str(),CFile::getFilenameWithoutExtension(fileName).c_str());
88
	_SWTList.push_back(_AnimationSet->getSkeletonWeightName(id));
89
}
90

91
void CEntity::addAnimToPlayList(std::string &name)
92
{
93
	_PlayListAnimation.push_back(name);
94
	
95
	_AnimationStatus.EndAnim = this->getPlayListLength();
96
}
97

98
void CEntity::removeAnimToPlayList(uint row)
99
{
100
	if (row < _PlayListAnimation.size())
101
	 _PlayListAnimation.erase(_PlayListAnimation.begin() + row);
102
	
103
	_AnimationStatus.EndAnim = this->getPlayListLength();
104
}
105

106
void CEntity::swapAnimToPlayList(uint row1, uint row2)
107
{
108
	if ((row1 < _PlayListAnimation.size()) && (row2 < _PlayListAnimation.size()))
109
	 std::swap(_PlayListAnimation[row1], _PlayListAnimation[row2]);
110
}
111

112
void CEntity::playbackAnim(bool play)
113
{
114
	_AnimationStatus.PlayAnim = play;
115
}
116

117
void CEntity::reset()
118
{
119
	_PlayListAnimation.clear();
120
	_AnimationList.clear();
121
	_SWTList.clear();
122
	
123
	_PlayList->resetAllChannels();
124
}
125

126
float CEntity::getPlayListLength()
127
{
128
	// Accumul all the time
129
	float time = 0;
130
	for(size_t i = 0; i < _PlayListAnimation.size(); ++i)
131
		time += getAnimLength(_PlayListAnimation[i]);
132
	return time;
133
}
134

135
float CEntity::getAnimLength(std::string name)
136
{
137
	uint id = _AnimationSet->getAnimationIdByName(name.c_str());
138
	NL3D::UAnimation *anim = _AnimationSet->getAnimation(id);
139
	return anim->getEndTime() - anim->getBeginTime();
140
}
141

142
void CEntity::update(NL3D::TAnimationTime time)
143
{
144
	this->resetChannel();
145
	switch (_AnimationStatus.Mode) 
146
	{
147
	case Mode::PlayList:  
148
		animatePlayList(time);
149
		break;
150
	case Mode::Mixer:
151
		animateChannelMixer();
152
		break;
153
	}
154
}
155

156

157
void CEntity::resetChannel()
158
{
159
	for(size_t i = 0; i < NL3D::CChannelMixer::NumAnimationSlot; i++)
160
	 _PlayList->setAnimation(i, UPlayList::empty);
161
}
162

163
void CEntity::animatePlayList(NL3D::TAnimationTime time)
164
{
165
	if (!_PlayListAnimation.empty())
166
	{
167
		// Animation index
168
		uint id = _AnimationSet->getAnimationIdByName(_PlayListAnimation[0].c_str());
169
		
170
		// Try channel AnimationSet
171
		NL3D::UAnimation *anim = _AnimationSet->getAnimation(id);
172
		
173
		// Accumul time
174
		float startTime = 0;
175
		float endTime = anim->getEndTime() - anim->getBeginTime();
176
		
177
		uint index = 0;
178
		while (time >= endTime)
179
		{
180
			index++;
181
			if (index < _PlayListAnimation.size())
182
			{
183
				id = _AnimationSet->getAnimationIdByName(_PlayListAnimation[index].c_str());
184
				anim = _AnimationSet->getAnimation(id);
185
			
186
				// Add start time
187
				startTime = endTime;
188
				endTime = startTime + (anim->getEndTime() - anim->getBeginTime());
189
			}
190
			else 
191
			  break;
192
		}
193
		
194
		// Time cropped ?
195
		if (index >= _PlayListAnimation.size())
196
		{
197
			// Yes
198
			index--;
199
			id = _AnimationSet->getAnimationIdByName(_PlayListAnimation[index].c_str());
200
			anim = _AnimationSet->getAnimation(id);
201
		
202
			// End time for last anim
203
			startTime = anim->getEndTime() - time;
204
		}
205
		else
206
		{
207
			// No 
208
			id = _AnimationSet->getAnimationIdByName(_PlayListAnimation[index].c_str());
209
			anim = _AnimationSet->getAnimation(id);
210
			
211
			// Final time
212
			startTime -= anim->getBeginTime();
213
		}
214
		
215
		// Set the slot
216
		_PlayList->setAnimation(0, id);
217
		_PlayList->setTimeOrigin(0, startTime);
218
		_PlayList->setWeightSmoothness(0, 1.0f);
219
		_PlayList->setStartWeight(0, 1, 0);
220
		_PlayList->setEndWeight(0, 1, 1);
221
		_PlayList->setWrapMode(0, UPlayList::Clamp);
222
	}
223
}
224

225
void CEntity::animateChannelMixer()
226
{
227
	for (uint i = 0; i < NL3D::CChannelMixer::NumAnimationSlot; i++)
228
	{
229
		if (_SlotInfo[i].Enable)
230
		{
231
			// Set the animation
232
			uint animId =  _AnimationSet->getAnimationIdByName(_SlotInfo[i].Animation);
233
			if (animId == UAnimationSet::NotFound) 
234
				_PlayList->setAnimation(i, UPlayList::empty);
235
			else 
236
				_PlayList->setAnimation(i, animId);
237
		
238
			// Set the skeleton weight
239
			uint skelId = _AnimationSet->getSkeletonWeightIdByName(_SlotInfo[i].Skeleton);
240
			if (skelId == UAnimationSet::NotFound)
241
				_PlayList->setSkeletonWeight(i, UPlayList::empty, false);
242
			else
243
				_PlayList->setSkeletonWeight(i, skelId, _SlotInfo[i].SkeletonInverted);
244

245
			// Set others values
246
			_PlayList->setTimeOrigin(i, _SlotInfo[i].Offset);
247
			_PlayList->setSpeedFactor(i, _SlotInfo[i].SpeedFactor);
248
			_PlayList->setStartWeight(i, _SlotInfo[i].StartBlend, _SlotInfo[i].StartTime);
249
			_PlayList->setEndWeight(i, _SlotInfo[i].EndBlend, _SlotInfo[i].EndTime);
250
			_PlayList->setWeightSmoothness(i, _SlotInfo[i].Smoothness);
251

252
			// Switch between wrap modes
253
			switch (_SlotInfo[i].ClampMode)
254
			{
255
			case 0:
256
				_PlayList->setWrapMode (i, UPlayList::Clamp);
257
				break;
258
			case 1:
259
				_PlayList->setWrapMode (i, UPlayList::Repeat);
260
				break;
261
			case 2:
262
				_PlayList->setWrapMode (i, UPlayList::Disable);
263
				break;
264
			}
265
		}
266
	}
267
}
268

269
} /* namespace NLQT */
b/code/ryzom/tools/leveldesign/georges_editor_qt/src/entity.h Sun Oct 31 20:26:05 2010 +0100
1
/*
2
    Georges Editor Qt
3
	Copyright (C) 2010 Adrian Jaekel <aj at elane2k dot com>
4

5
    This program is free software: you can redistribute it and/or modify
6
    it under the terms of the GNU General Public License as published by
7
    the Free Software Foundation, either version 3 of the License, or
8
    (at your option) any later version.
9

10
    This program is distributed in the hope that it will be useful,
11
    but WITHOUT ANY WARRANTY; without even the implied warranty of
12
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13
    GNU General Public License for more details.
14

15
    You should have received a copy of the GNU General Public License
16
    along with this program.  If not, see <http://www.gnu.org/licenses/>.
17
*/
18

19
#ifndef ENTITY_H
20
#define ENTITY_H
21

22
// STL includes
23
#include <map>
24
#include <string>
25
#include <vector>
26

27
// NeL includes
28
#include "nel/3d/animation_time.h"
29
#include <nel/3d/u_instance.h>
30
#include <nel/3d/u_skeleton.h>
31
#include "nel/3d/channel_mixer.h"
32

33
namespace NL3D {
34
	class UPlayList;
35
	class UAnimationSet;
36
}
37

38
namespace NLQT {
39
  
40
class CSlotInfo
41
{
42
public:
43
	CSlotInfo (): 	
44
		Animation("empty"), Skeleton("empty"),
45
		Offset(0), StartTime(0), EndTime(0),
46
		StartBlend(1),	EndBlend (1), Smoothness(1),
47
		SpeedFactor(1),	ClampMode(0),
48
		SkeletonInverted(false), 
49
		Enable(true)	{} ;
50

51
	std::string		Animation;
52
	std::string		Skeleton;
53
	float			Offset;
54
	float			StartTime;
55
	float			EndTime;
56

57
	float			StartBlend;
58
	float			EndBlend;
59
	float			Smoothness;
60
	float			SpeedFactor;
61
	sint32			ClampMode;
62
	bool			SkeletonInverted;
63
	bool			Enable;
64
	
65
	CSlotInfo &operator=(const CSlotInfo &);
66
};
67

68
	
69
/**
70
@class CEntity
71
Animated object. Allows you to upload animations for the shape. 
72
Contains a built-in playlist. Has management and playback Playlists or Mixer.
73
*/
74
class CEntity
75
{
76
public:
77
  	struct Mode
78
	{
79
		enum List
80
		{
81
			PlayList = 1,
82
			Mixer
83
		};
84
	};
85

86
	// will need for a single or multiple reproduction
87
	struct SAnimationStatus
88
	{
89
		bool	LoopAnim;
90
		bool	PlayAnim;
91
		float	CurrentTimeAnim;
92
		float	StartAnim;
93
		float	EndAnim;
94
		float	SpeedAnim;
95
		int	Mode;
96
		
97
		SAnimationStatus():
98
			LoopAnim(false), PlayAnim(false),
99
			CurrentTimeAnim(0), StartAnim(0),
100
			EndAnim(0), SpeedAnim(1), Mode(Mode::PlayList) {}
101
	};
102
  
103
	/// Constructor
104
	CEntity(void);
105

106
	/// Destructor
107
	~CEntity(void);
108

109
	/// Loads a file animations
110
	/// @param fileName - name animation file
111
	void loadAnimation(std::string &fileName);
112
	
113
	/// Loads a file skeleton weight
114
	void loadSWT(std::string &fileName);
115
	
116
	/// Adds an animation to a playlist
117
	/// @param name - name loaded animations
118
	void addAnimToPlayList(std::string &name);
119
	
120
	/// Removes the animation from a playlist
121
	/// @param row - number of animations in the playlist
122
	void removeAnimToPlayList(uint row);
123
	
124
	/// Swaps animations to a playlist
125
	/// @param row1 - first number of animations in the playlist
126
	/// @param row2 - second number of animations in the playlist
127
	void swapAnimToPlayList(uint row1, uint row2); 
128
	
129
	/// Playback animation 
130
	void playbackAnim(bool play);
131
	
132
	/// Reset playlist and animation
133
	void reset();
134
	
135
	/// Get the total time of animation playlist
136
	/// @return total time of animation
137
	float getPlayListLength();
138
	
139
	/// get time length single animation
140
	float getAnimLength(std::string name);
141
	
142
	/// Get slot infomation
143
	void setSlotInfo(uint num, CSlotInfo& slotInfo) { _SlotInfo[num] = slotInfo; }
144

145
	/// Set use mode playlist or mixer
146
	void setMode(int mode)	{ _AnimationStatus.Mode = mode; }
147

148
	/// Get information about the current status of playing a playlist
149
	/// @return struct containing current information playback
150
	SAnimationStatus& getStatus() { return _AnimationStatus; }
151
	
152
	/// Get name entity
153
	/// @return name entity
154
	std::string &getName() { return _Name; }
155
	
156
	/// Get slot information
157
	CSlotInfo& getSlotInfo(uint num) { return _SlotInfo[num]; }
158

159
	/// Get list loaded animations files
160
	std::vector<std::string>& getAnimationList() { return _AnimationList; }
161

162
	/// Get playlist animations
163
	std::vector<std::string>& getPlayListAnimation() { return _PlayListAnimation; }
164

165
	/// Get list loaded skeleton weight template files
166
	std::vector<std::string>& getSWTList() { return _SWTList; }
167

168
private:
169
  
170
	/// Update the animate from the playlist or channel mixer
171
	/// @param time - current time in second
172
	void update(NL3D::TAnimationTime time);
173
	
174
	void resetChannel();
175
	
176
	/// Update the animate from the playlist
177
	void animatePlayList(NL3D::TAnimationTime time);
178

179
	/// Update the animate from the mixer
180
	void animateChannelMixer();
181

182
	// The name of the entity
183
	std::string			_Name;
184
	
185
	SAnimationStatus		_AnimationStatus;
186
	
187
	// The mesh instance associated to this entity
188
	NL3D::UInstance			_Instance;
189

190
	// The skeleton binded to the instance
191
	NL3D::USkeleton			_Skeleton;
192

193
	NL3D::UPlayList			*_PlayList;
194

195
	NL3D::UAnimationSet		*_AnimationSet;
196

197
	// Animation input file
198
	std::vector<std::string>	_AnimationList;
199
	
200
	// Skeleton weight input file
201
	std::vector<std::string>	_SWTList;
202
	
203
	// Play list animation
204
	std::vector<std::string >	_PlayListAnimation;
205
		
206
	// Slot info for this object
207
	CSlotInfo			_SlotInfo[NL3D::CChannelMixer::NumAnimationSlot];
208

209
	friend class CObjectViewer;
210
}; /* class CEntity */
211

212
typedef std::map<std::string, CEntity>	CEntities;
213
typedef CEntities::iterator		EIT;
214

215
} /* namespace NLQT */
216

217
#endif // ENTITY_H
b/code/ryzom/tools/leveldesign/georges_editor_qt/src/filesystem_model.cpp Sun Oct 31 20:26:05 2010 +0100
1
/*
2
    Georges Editor Qt
3
	Copyright (C) 2010 Adrian Jaekel <aj at elane2k dot com>
4

5
    This program is free software: you can redistribute it and/or modify
6
    it under the terms of the GNU General Public License as published by
7
    the Free Software Foundation, either version 3 of the License, or
8
    (at your option) any later version.
9

10
    This program is distributed in the hope that it will be useful,
11
    but WITHOUT ANY WARRANTY; without even the implied warranty of
12
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13
    GNU General Public License for more details.
14

15
    You should have received a copy of the GNU General Public License
16
    along with this program.  If not, see <http://www.gnu.org/licenses/>.
17
*/
18

19
#include "filesystem_model.h"
20

21
#include <QtGui/QApplication>
22
#include <QtGui/QStyle>
23

24
namespace NLQT {
25

26
	CFileSystemModel::CFileSystemModel(QString ldPath, QObject *parent)
27
		: QFileSystemModel(parent),
28
		_ldPath(ldPath){
29

30
	}
31
	CFileSystemModel::~CFileSystemModel() {
32

33
	}
34

35
	QVariant CFileSystemModel::data(const QModelIndex& index, int role) const {
36
		
37
		if (role == Qt::DecorationRole) {
38
			if (_ldPath.isEmpty())
39
				return QVariant();
40
			if (isDir(index))
41
				return QApplication::style()->standardIcon(QStyle::SP_DirIcon);
42
		}
43
		if (_ldPath.isEmpty() && role == Qt::DisplayRole) {
44
			if (index.parent().isValid())
45
				return QVariant();
46
			return QString("Set a correct leveldesign path ...");
47
		}
48
		return QFileSystemModel::data(index, role);
49
	}
50

51
	int CFileSystemModel::columnCount(const QModelIndex &/*parent*/) const
52
	{
53
		return 1;
54
	}
55

56
	int CFileSystemModel::rowCount(const QModelIndex &parent) const
57
	{
58
		if (_ldPath.isEmpty()) {
59
			if(parent.isValid()) {
60
				return 0;
61
			} else {
62
				return qMin(QFileSystemModel::rowCount(parent),1);
63
			}
64
		}
65
		return QFileSystemModel::rowCount(parent);
66
	}
67

68
} /* namespace NLQT */
69

70
/* end of file */
b/code/ryzom/tools/leveldesign/georges_editor_qt/src/filesystem_model.h Sun Oct 31 20:26:05 2010 +0100
1
/*
2
    Georges Editor Qt
3
	Copyright (C) 2010 Adrian Jaekel <aj at elane2k dot com>
4

5
    This program is free software: you can redistribute it and/or modify
6
    it under the terms of the GNU General Public License as published by
7
    the Free Software Foundation, either version 3 of the License, or
8
    (at your option) any later version.
9

10
    This program is distributed in the hope that it will be useful,
11
    but WITHOUT ANY WARRANTY; without even the implied warranty of
12
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13
    GNU General Public License for more details.
14

15
    You should have received a copy of the GNU General Public License
16
    along with this program.  If not, see <http://www.gnu.org/licenses/>.
... This diff was truncated because it exceeds the maximum size that can be displayed.