Merge dev-common and various fixes to achieve compilation

- merged changes from dev-common
- fixed many compilation errors (CBrain, UI, ...)
- temporarily commented out some problematic code (e.g. input bindings)
- (partially) fixed #include styling
- everything compiles except for CRobotMain, CMainDialog and CStudio
dev-ui
Piotr Dziwinski 2012-09-15 18:50:51 +02:00
commit ad6bc13dc2
124 changed files with 1892 additions and 5313 deletions

View File

@ -1,14 +1,12 @@
# CBot shared library is built separately # CBot shared library is built separately
add_subdirectory(CBot) add_subdirectory(CBot)
<<<<<<< HEAD
# Tools directory is built separately # Tools directory is built separately
add_subdirectory(tools) add_subdirectory(tools)
# Tests # Tests
add_subdirectory(graphics/engine/test) add_subdirectory(graphics/engine/test)
======= add_subdirectory(math/test)
>>>>>>> dev-ui
# Configure options # Configure options
@ -67,12 +65,11 @@ app/main.cpp
app/system.cpp app/system.cpp
common/event.cpp common/event.cpp
common/image.cpp common/image.cpp
common/logger.cpp
common/iman.cpp common/iman.cpp
# common/metafile.cpp common/logger.cpp
# common/misc.cpp common/metafile.cpp
# common/modfile.cpp common/misc.cpp
# common/profile.cpp common/profile.cpp
common/restext.cpp common/restext.cpp
common/restext_strings.c common/restext_strings.c
common/stringutils.cpp common/stringutils.cpp
@ -116,8 +113,8 @@ object/auto/autoroot.cpp
object/auto/autosafe.cpp object/auto/autosafe.cpp
object/auto/autostation.cpp object/auto/autostation.cpp
object/auto/autotower.cpp object/auto/autotower.cpp
# object/brain.cpp object/brain.cpp
# object/mainmovie.cpp object/mainmovie.cpp
object/motion/motion.cpp object/motion/motion.cpp
object/motion/motionant.cpp object/motion/motionant.cpp
object/motion/motionbee.cpp object/motion/motionbee.cpp
@ -154,33 +151,32 @@ physics/physics.cpp
script/cbottoken.cpp script/cbottoken.cpp
script/cmdtoken.cpp script/cmdtoken.cpp
script/script.cpp script/script.cpp
# sound/sound.cpp ui/button.cpp
# ui/button.cpp ui/check.cpp
# ui/check.cpp ui/color.cpp
# ui/color.cpp ui/compass.cpp
# ui/compass.cpp
ui/control.cpp ui/control.cpp
# ui/displayinfo.cpp ui/displayinfo.cpp
# ui/displaytext.cpp ui/displaytext.cpp
ui/edit.cpp ui/edit.cpp
# ui/editvalue.cpp ui/editvalue.cpp
# ui/gauge.cpp ui/gauge.cpp
# ui/group.cpp ui/group.cpp
# ui/image.cpp ui/image.cpp
# ui/interface.cpp ui/interface.cpp
# ui/key.cpp ui/key.cpp
# ui/label.cpp ui/label.cpp
# ui/list.cpp ui/list.cpp
# ui/maindialog.cpp # ui/maindialog.cpp
# ui/mainmap.cpp ui/mainmap.cpp
# ui/mainshort.cpp ui/mainshort.cpp
# ui/map.cpp ui/map.cpp
# ui/scroll.cpp ui/scroll.cpp
# ui/shortcut.cpp ui/shortcut.cpp
# ui/slider.cpp ui/slider.cpp
# ui/studio.cpp # ui/studio.cpp
# ui/target.cpp ui/target.cpp
# ui/window.cpp ui/window.cpp
) )
set(LIBS set(LIBS
@ -194,7 +190,10 @@ ${PLATFORM_LIBS}
CBot CBot
) )
include_directories(. ${CMAKE_CURRENT_BINARY_DIR} include_directories(
.
..
${CMAKE_CURRENT_BINARY_DIR}
${SDL_INCLUDE_DIR} ${SDL_INCLUDE_DIR}
${SDL_IMAGE_INCLUDE_DIR} ${SDL_IMAGE_INCLUDE_DIR}
${SDLTTF_INCLUDE_DIR} ${SDLTTF_INCLUDE_DIR}

View File

@ -29,10 +29,13 @@
#include <SDL/SDL.h> #include <SDL/SDL.h>
#include <SDL/SDL_image.h> #include <SDL/SDL_image.h>
#include <stdio.h> #include <fstream>
#include <stdlib.h>
#include <libintl.h>
template<> CApplication* CSingleton<CApplication>::mInstance = NULL; template<> CApplication* CSingleton<CApplication>::mInstance = nullptr;
//! Interval of timer called to update joystick state //! Interval of timer called to update joystick state
@ -62,8 +65,8 @@ struct ApplicationPrivate
ApplicationPrivate() ApplicationPrivate()
{ {
memset(&currentEvent, 0, sizeof(SDL_Event)); memset(&currentEvent, 0, sizeof(SDL_Event));
surface = NULL; surface = nullptr;
joystick = NULL; joystick = nullptr;
joystickTimer = 0; joystickTimer = 0;
} }
}; };
@ -76,14 +79,10 @@ CApplication::CApplication()
m_iMan = new CInstanceManager(); m_iMan = new CInstanceManager();
m_eventQueue = new CEventQueue(m_iMan); m_eventQueue = new CEventQueue(m_iMan);
m_engine = NULL; m_engine = nullptr;
m_device = NULL; m_device = nullptr;
m_robotMain = NULL; m_robotMain = nullptr;
m_sound = NULL; m_sound = nullptr;
m_keyState = 0;
m_axeKey = Math::Vector(0.0f, 0.0f, 0.0f);
m_axeJoy = Math::Vector(0.0f, 0.0f, 0.0f);
m_exitCode = 0; m_exitCode = 0;
m_active = false; m_active = false;
@ -91,29 +90,64 @@ CApplication::CApplication()
m_windowTitle = "COLOBOT"; m_windowTitle = "COLOBOT";
m_simulationSuspended = false;
m_simulationSpeed = 1.0f;
m_realAbsTimeBase = 0LL;
m_realAbsTime = 0LL;
m_realRelTime = 0LL;
m_absTimeBase = 0LL;
m_exactAbsTime = 0LL;
m_exactRelTime = 0LL;
m_absTime = 0.0f;
m_relTime = 0.0f;
m_baseTimeStamp = CreateTimeStamp();
m_curTimeStamp = CreateTimeStamp();
m_lastTimeStamp = CreateTimeStamp();
m_joystickEnabled = false; m_joystickEnabled = false;
m_kmodState = 0;
m_mouseButtonsState = 0;
for (int i = 0; i < TRKEY_MAX; ++i)
m_trackedKeysState[i] = false;
m_keyMotion = Math::Vector(0.0f, 0.0f, 0.0f);
m_joyMotion = Math::Vector(0.0f, 0.0f, 0.0f);
m_dataPath = "./data"; m_dataPath = "./data";
ResetKey(); m_language = LANG_ENGLISH;
SetDefaultInputBindings();
} }
CApplication::~CApplication() CApplication::~CApplication()
{ {
delete m_private; delete m_private;
m_private = NULL; m_private = nullptr;
delete m_eventQueue; delete m_eventQueue;
m_eventQueue = NULL; m_eventQueue = nullptr;
delete m_iMan; delete m_iMan;
m_iMan = NULL; m_iMan = nullptr;
DestroyTimeStamp(m_baseTimeStamp);
DestroyTimeStamp(m_curTimeStamp);
DestroyTimeStamp(m_lastTimeStamp);
} }
bool CApplication::ParseArguments(int argc, char *argv[]) bool CApplication::ParseArguments(int argc, char *argv[])
{ {
bool waitDataDir = false; bool waitDataDir = false;
bool waitLogLevel = false; bool waitLogLevel = false;
bool waitLanguage = false;
for (int i = 1; i < argc; ++i) for (int i = 1; i < argc; ++i)
{ {
@ -123,6 +157,7 @@ bool CApplication::ParseArguments(int argc, char *argv[])
{ {
waitDataDir = false; waitDataDir = false;
m_dataPath = arg; m_dataPath = arg;
GetLogger()->Info("Using custom data dir: '%s'\n", m_dataPath.c_str());
continue; continue;
} }
@ -146,6 +181,22 @@ bool CApplication::ParseArguments(int argc, char *argv[])
continue; continue;
} }
if (waitLanguage)
{
waitLanguage = false;
if (arg == "en")
m_language = LANG_ENGLISH;
else if (arg == "de")
m_language = LANG_GERMAN;
else if (arg == "fr")
m_language = LANG_FRENCH;
else if (arg == "pl")
m_language = LANG_POLISH;
else
return false;
continue;
}
if (arg == "-debug") if (arg == "-debug")
{ {
SetDebugMode(true); SetDebugMode(true);
@ -158,6 +209,21 @@ bool CApplication::ParseArguments(int argc, char *argv[])
{ {
waitDataDir = true; waitDataDir = true;
} }
else if (arg == "-language")
{
waitLanguage = true;
}
else if (arg == "-help")
{
GetLogger()->Message("COLOBOT\n");
GetLogger()->Message("\n");
GetLogger()->Message("List of available options:\n");
GetLogger()->Message(" -help this help\n");
GetLogger()->Message(" -datadir path set custom data directory path\n");
GetLogger()->Message(" -debug enable debug mode (more info printed in logs)\n");
GetLogger()->Message(" -loglevel level set log level to level (one of: trace, debug, info, warn, error, none)\n");
GetLogger()->Message(" -language lang set language (one of: en, de, fr, pl)\n");
}
else else
{ {
m_exitCode = 1; m_exitCode = 1;
@ -166,7 +232,7 @@ bool CApplication::ParseArguments(int argc, char *argv[])
} }
// Args not given? // Args not given?
if (waitDataDir || waitLogLevel) if (waitDataDir || waitLogLevel || waitLanguage)
return false; return false;
return true; return true;
@ -176,7 +242,50 @@ bool CApplication::Create()
{ {
GetLogger()->Info("Creating CApplication\n"); GetLogger()->Info("Creating CApplication\n");
// TODO: verify that data directory exists // I know, a primitive way to check for dir, but works
std::string readmePath = m_dataPath + "/README.txt";
std::ifstream testReadme;
testReadme.open(readmePath.c_str(), std::ios_base::in);
if (!testReadme.good())
{
GetLogger()->Error("Could not open test file in data dir: '%s'\n", readmePath.c_str());
m_errorMessage = std::string("Could not read from data directory:\n") +
std::string("'") + m_dataPath + std::string("'\n") +
std::string("Please check your installation, or supply a valid data directory by -datadir option.");
m_exitCode = 1;
return false;
}
/* Gettext initialization */
std::string locale = "C";
switch (m_language)
{
case LANG_ENGLISH:
locale = "en_US.utf8";
break;
case LANG_GERMAN:
locale = "de_DE.utf8";
break;
case LANG_FRENCH:
locale = "fr_FR.utf8";
break;
case LANG_POLISH:
locale = "pl_PL.utf8";
break;
}
setlocale(LC_ALL, locale.c_str());
std::string trPath = m_dataPath + std::string("/i18n");
bindtextdomain("colobot", trPath.c_str());
bind_textdomain_codeset("colobot", "UTF-8");
textdomain("colobot");
GetLogger()->Debug("Testing gettext translation: '%s'\n", gettext("Colobot rules!"));
// Temporarily -- only in windowed mode // Temporarily -- only in windowed mode
m_deviceConfig.fullScreen = false; m_deviceConfig.fullScreen = false;
@ -218,7 +327,7 @@ bool CApplication::Create()
if (! CreateVideoSurface()) if (! CreateVideoSurface())
return false; // dialog is in function return false; // dialog is in function
if (m_private->surface == NULL) if (m_private->surface == nullptr)
{ {
m_errorMessage = std::string("SDL error while setting video mode:\n") + m_errorMessage = std::string("SDL error while setting video mode:\n") +
std::string(SDL_GetError()); std::string(SDL_GetError());
@ -269,7 +378,7 @@ bool CApplication::Create()
bool CApplication::CreateVideoSurface() bool CApplication::CreateVideoSurface()
{ {
const SDL_VideoInfo *videoInfo = SDL_GetVideoInfo(); const SDL_VideoInfo *videoInfo = SDL_GetVideoInfo();
if (videoInfo == NULL) if (videoInfo == nullptr)
{ {
m_errorMessage = std::string("SDL error while getting video info:\n ") + m_errorMessage = std::string("SDL error while getting video info:\n ") +
std::string(SDL_GetError()); std::string(SDL_GetError());
@ -321,44 +430,44 @@ bool CApplication::CreateVideoSurface()
void CApplication::Destroy() void CApplication::Destroy()
{ {
/*if (m_robotMain != NULL) /*if (m_robotMain != nullptr)
{ {
delete m_robotMain; delete m_robotMain;
m_robotMain = NULL; m_robotMain = nullptr;
} }
if (m_sound != NULL) if (m_sound != nullptr)
{ {
delete m_sound; delete m_sound;
m_sound = NULL; m_sound = nullptr;
}*/ }*/
if (m_engine != NULL) if (m_engine != nullptr)
{ {
m_engine->Destroy(); m_engine->Destroy();
delete m_engine; delete m_engine;
m_engine = NULL; m_engine = nullptr;
} }
if (m_device != NULL) if (m_device != nullptr)
{ {
m_device->Destroy(); m_device->Destroy();
delete m_device; delete m_device;
m_device = NULL; m_device = nullptr;
} }
if (m_private->joystick != NULL) if (m_private->joystick != nullptr)
{ {
SDL_JoystickClose(m_private->joystick); SDL_JoystickClose(m_private->joystick);
m_private->joystick = NULL; m_private->joystick = nullptr;
} }
if (m_private->surface != NULL) if (m_private->surface != nullptr)
{ {
SDL_FreeSurface(m_private->surface); SDL_FreeSurface(m_private->surface);
m_private->surface = NULL; m_private->surface = nullptr;
} }
IMG_Quit(); IMG_Quit();
@ -383,7 +492,7 @@ bool CApplication::ChangeVideoConfig(const Gfx::GLDeviceConfig &newConfig)
return false; return false;
} }
if (m_private->surface == NULL) if (m_private->surface == nullptr)
{ {
if (! restore) if (! restore)
{ {
@ -426,7 +535,7 @@ bool CApplication::OpenJoystick()
return false; return false;
m_private->joystick = SDL_JoystickOpen(m_joystick.index); m_private->joystick = SDL_JoystickOpen(m_joystick.index);
if (m_private->joystick == NULL) if (m_private->joystick == nullptr)
return false; return false;
m_joystick.axisCount = SDL_JoystickNumAxes(m_private->joystick); m_joystick.axisCount = SDL_JoystickNumAxes(m_private->joystick);
@ -437,7 +546,7 @@ bool CApplication::OpenJoystick()
m_joyButtonState = std::vector<bool>(m_joystick.buttonCount, false); m_joyButtonState = std::vector<bool>(m_joystick.buttonCount, false);
// Create a timer for polling joystick state // Create a timer for polling joystick state
m_private->joystickTimer = SDL_AddTimer(JOYSTICK_TIMER_INTERVAL, JoystickTimerCallback, NULL); m_private->joystickTimer = SDL_AddTimer(JOYSTICK_TIMER_INTERVAL, JoystickTimerCallback, nullptr);
return true; return true;
} }
@ -447,7 +556,7 @@ void CApplication::CloseJoystick()
// Timer will remove itself automatically // Timer will remove itself automatically
SDL_JoystickClose(m_private->joystick); SDL_JoystickClose(m_private->joystick);
m_private->joystick = NULL; m_private->joystick = nullptr;
} }
bool CApplication::ChangeJoystick(const JoystickDevice &newJoystick) bool CApplication::ChangeJoystick(const JoystickDevice &newJoystick)
@ -455,7 +564,7 @@ bool CApplication::ChangeJoystick(const JoystickDevice &newJoystick)
if ( (newJoystick.index < 0) || (newJoystick.index >= SDL_NumJoysticks()) ) if ( (newJoystick.index < 0) || (newJoystick.index >= SDL_NumJoysticks()) )
return false; return false;
if (m_private->joystick != NULL) if (m_private->joystick != nullptr)
CloseJoystick(); CloseJoystick();
return OpenJoystick(); return OpenJoystick();
@ -464,7 +573,7 @@ bool CApplication::ChangeJoystick(const JoystickDevice &newJoystick)
Uint32 JoystickTimerCallback(Uint32 interval, void *) Uint32 JoystickTimerCallback(Uint32 interval, void *)
{ {
CApplication *app = CApplication::GetInstancePointer(); CApplication *app = CApplication::GetInstancePointer();
if ((app == NULL) || (! app->GetJoystickEnabled())) if ((app == nullptr) || (! app->GetJoystickEnabled()))
return 0; // don't run the timer again return 0; // don't run the timer again
app->UpdateJoystick(); app->UpdateJoystick();
@ -540,6 +649,10 @@ int CApplication::Run()
{ {
m_active = true; m_active = true;
GetCurrentTimeStamp(m_baseTimeStamp);
GetCurrentTimeStamp(m_lastTimeStamp);
GetCurrentTimeStamp(m_curTimeStamp);
while (true) while (true)
{ {
// To be sure no old event remains // To be sure no old event remains
@ -577,7 +690,7 @@ int CApplication::Run()
{ {
bool passOn = ProcessEvent(event); bool passOn = ProcessEvent(event);
if (m_engine != NULL && passOn) if (m_engine != nullptr && passOn)
passOn = m_engine->ProcessEvent(event); passOn = m_engine->ProcessEvent(event);
if (passOn) if (passOn)
@ -602,11 +715,11 @@ int CApplication::Run()
{ {
passOn = ProcessEvent(event); passOn = ProcessEvent(event);
if (passOn && m_engine != NULL) if (passOn && m_engine != nullptr)
passOn = m_engine->ProcessEvent(event); passOn = m_engine->ProcessEvent(event);
} }
/*if (passOn && m_robotMain != NULL) /*if (passOn && m_robotMain != nullptr)
m_robotMain->ProcessEvent(event); */ m_robotMain->ProcessEvent(event); */
} }
@ -616,6 +729,9 @@ int CApplication::Run()
// Update game and render a frame during idle time (no messages are waiting) // Update game and render a frame during idle time (no messages are waiting)
Render(); Render();
// Update simulation state
StepSimulation();
} }
} }
@ -734,9 +850,76 @@ bool CApplication::ProcessEvent(const Event &event)
if (event.type == EVENT_ACTIVE) if (event.type == EVENT_ACTIVE)
{ {
m_active = event.active.gain;
if (m_debugMode) if (m_debugMode)
l->Info("Focus change: active = %s\n", m_active ? "true" : "false"); l->Info("Focus change: active = %s\n", event.active.gain ? "true" : "false");
if (m_active != event.active.gain)
{
m_active = event.active.gain;
if (m_active)
ResumeSimulation();
else
SuspendSimulation();
}
}
else if (event.type == EVENT_KEY_DOWN)
{
m_kmodState = event.key.mod;
if ((m_kmodState & KEY_MOD(SHIFT)) != 0)
m_trackedKeysState[TRKEY_SHIFT] = true;
else if ((m_kmodState & KEY_MOD(CTRL)) != 0)
m_trackedKeysState[TRKEY_CONTROL] = true;
else if (event.key.key == KEY(KP8))
m_trackedKeysState[TRKEY_NUM_UP] = true;
else if (event.key.key == KEY(KP2))
m_trackedKeysState[TRKEY_NUM_DOWN] = true;
else if (event.key.key == KEY(KP4))
m_trackedKeysState[TRKEY_NUM_LEFT] = true;
else if (event.key.key == KEY(KP6))
m_trackedKeysState[TRKEY_NUM_RIGHT] = true;
else if (event.key.key == KEY(KP_PLUS))
m_trackedKeysState[TRKEY_NUM_PLUS] = true;
else if (event.key.key == KEY(KP_MINUS))
m_trackedKeysState[TRKEY_NUM_MINUS] = true;
else if (event.key.key == KEY(PAGEUP))
m_trackedKeysState[TRKEY_PAGE_UP] = true;
else if (event.key.key == KEY(PAGEDOWN))
m_trackedKeysState[TRKEY_PAGE_DOWN] = true;
}
else if (event.type == EVENT_KEY_UP)
{
m_kmodState = event.key.mod;
if ((m_kmodState & KEY_MOD(SHIFT)) != 0)
m_trackedKeysState[TRKEY_SHIFT] = false;
else if ((m_kmodState & KEY_MOD(CTRL)) != 0)
m_trackedKeysState[TRKEY_CONTROL] = false;
else if (event.key.key == KEY(KP8))
m_trackedKeysState[TRKEY_NUM_UP] = false;
else if (event.key.key == KEY(KP2))
m_trackedKeysState[TRKEY_NUM_DOWN] = false;
else if (event.key.key == KEY(KP4))
m_trackedKeysState[TRKEY_NUM_LEFT] = false;
else if (event.key.key == KEY(KP6))
m_trackedKeysState[TRKEY_NUM_RIGHT] = false;
else if (event.key.key == KEY(KP_PLUS))
m_trackedKeysState[TRKEY_NUM_PLUS] = false;
else if (event.key.key == KEY(KP_MINUS))
m_trackedKeysState[TRKEY_NUM_MINUS] = false;
else if (event.key.key == KEY(PAGEUP))
m_trackedKeysState[TRKEY_PAGE_UP] = false;
else if (event.key.key == KEY(PAGEDOWN))
m_trackedKeysState[TRKEY_PAGE_DOWN] = false;
}
else if (event.type == EVENT_MOUSE_BUTTON_DOWN)
{
m_mouseButtonsState |= 1 << event.mouseButton.button;
}
else if (event.type == EVENT_MOUSE_BUTTON_UP)
{
m_mouseButtonsState &= ~(1 << event.mouseButton.button);
} }
// Print the events in debug mode to test the code // Print the events in debug mode to test the code
@ -798,9 +981,101 @@ void CApplication::Render()
SDL_GL_SwapBuffers(); SDL_GL_SwapBuffers();
} }
void CApplication::StepSimulation(float rTime) void CApplication::SuspendSimulation()
{ {
// TODO m_simulationSuspended = true;
GetLogger()->Info("Suspend simulation\n");
}
void CApplication::ResumeSimulation()
{
m_simulationSuspended = false;
GetCurrentTimeStamp(m_baseTimeStamp);
CopyTimeStamp(m_curTimeStamp, m_baseTimeStamp);
m_realAbsTimeBase = m_realAbsTime;
m_absTimeBase = m_exactAbsTime;
GetLogger()->Info("Resume simulation\n");
}
bool CApplication::GetSimulationSuspended()
{
return m_simulationSuspended;
}
void CApplication::SetSimulationSpeed(float speed)
{
m_simulationSpeed = speed;
GetCurrentTimeStamp(m_baseTimeStamp);
m_realAbsTimeBase = m_realAbsTime;
m_absTimeBase = m_exactAbsTime;
GetLogger()->Info("Simulation speed = %.2f\n", speed);
}
void CApplication::StepSimulation()
{
if (m_simulationSuspended)
return;
CopyTimeStamp(m_lastTimeStamp, m_curTimeStamp);
GetCurrentTimeStamp(m_curTimeStamp);
long long absDiff = TimeStampExactDiff(m_baseTimeStamp, m_curTimeStamp);
m_realAbsTime = m_realAbsTimeBase + absDiff;
// m_baseTimeStamp is updated on simulation speed change, so this is OK
m_exactAbsTime = m_absTimeBase + m_simulationSpeed * absDiff;
m_absTime = (m_absTimeBase + m_simulationSpeed * absDiff) / 1e9f;
m_realRelTime = TimeStampExactDiff(m_lastTimeStamp, m_curTimeStamp);
m_exactRelTime = m_simulationSpeed * m_realRelTime;
m_relTime = (m_simulationSpeed * m_realRelTime) / 1e9f;
m_engine->FrameUpdate();
//m_sound->FrameMove(m_relTime);
Event frameEvent(EVENT_FRAME);
frameEvent.rTime = m_relTime;
m_eventQueue->AddEvent(frameEvent);
}
float CApplication::GetSimulationSpeed()
{
return m_simulationSpeed;
}
float CApplication::GetAbsTime()
{
return m_absTime;
}
long long CApplication::GetExactAbsTime()
{
return m_exactAbsTime;
}
long long CApplication::GetRealAbsTime()
{
return m_realAbsTime;
}
float CApplication::GetRelTime()
{
return m_relTime;
}
long long CApplication::GetExactRelTime()
{
return m_exactRelTime;
}
long long CApplication::GetRealRelTime()
{
return m_realRelTime;
} }
Gfx::GLDeviceConfig CApplication::GetVideoConfig() Gfx::GLDeviceConfig CApplication::GetVideoConfig()
@ -814,7 +1089,7 @@ VideoQueryResult CApplication::GetVideoResolutionList(std::vector<Math::IntPoint
resolutions.clear(); resolutions.clear();
const SDL_VideoInfo *videoInfo = SDL_GetVideoInfo(); const SDL_VideoInfo *videoInfo = SDL_GetVideoInfo();
if (videoInfo == NULL) if (videoInfo == nullptr)
return VIDEO_QUERY_ERROR; return VIDEO_QUERY_ERROR;
Uint32 videoFlags = SDL_OPENGL | SDL_GL_DOUBLEBUFFER | SDL_HWPALETTE; Uint32 videoFlags = SDL_OPENGL | SDL_GL_DOUBLEBUFFER | SDL_HWPALETTE;
@ -861,25 +1136,79 @@ bool CApplication::GetDebugMode()
return m_debugMode; return m_debugMode;
} }
void CApplication::FlushPressKey() void CApplication::SetDefaultInputBindings()
{ {
// TODO for (int i = 0; i < KEYRANK_MAX; i++)
m_inputBindings[i].Reset();
m_inputBindings[KEYRANK_LEFT ].key = KEY(LEFT);
m_inputBindings[KEYRANK_RIGHT ].key = KEY(RIGHT);
m_inputBindings[KEYRANK_UP ].key = KEY(UP);
m_inputBindings[KEYRANK_DOWN ].key = KEY(DOWN);
m_inputBindings[KEYRANK_GUP ].kmod = KEY_MOD(SHIFT);
m_inputBindings[KEYRANK_GDOWN ].kmod = KEY_MOD(CTRL);
m_inputBindings[KEYRANK_CAMERA ].key = KEY(SPACE);
m_inputBindings[KEYRANK_CAMERA ].joy = 2;
m_inputBindings[KEYRANK_DESEL ].key = KEY(KP0);
m_inputBindings[KEYRANK_DESEL ].kmod = 6;
m_inputBindings[KEYRANK_ACTION ].key = KEY(RETURN);
m_inputBindings[KEYRANK_ACTION ].joy = 1;
m_inputBindings[KEYRANK_NEAR ].key = KEY(KP_PLUS);
m_inputBindings[KEYRANK_NEAR ].joy = 5;
m_inputBindings[KEYRANK_AWAY ].key = KEY(KP_MINUS);
m_inputBindings[KEYRANK_AWAY ].joy = 4;
m_inputBindings[KEYRANK_NEXT ].key = KEY(TAB);
m_inputBindings[KEYRANK_NEXT ].joy = 3;
m_inputBindings[KEYRANK_HUMAN ].key = KEY(HOME);
m_inputBindings[KEYRANK_HUMAN ].joy = 7;
m_inputBindings[KEYRANK_QUIT ].key = KEY(ESCAPE);
m_inputBindings[KEYRANK_HELP ].key = KEY(F1);
m_inputBindings[KEYRANK_PROG ].key = KEY(F2);
m_inputBindings[KEYRANK_CBOT ].key = KEY(F3);
m_inputBindings[KEYRANK_VISIT ].key = KEY(KP_PERIOD);
m_inputBindings[KEYRANK_SPEED10].key = KEY(F4);
m_inputBindings[KEYRANK_SPEED15].key = KEY(F5);
m_inputBindings[KEYRANK_SPEED20].key = KEY(F6);
} }
void CApplication::ResetKey() int CApplication::GetKmods()
{ {
// TODO return m_kmodState;
} }
void CApplication::SetKey(int keyRank, int option, int key) bool CApplication::GetKmodState(int kmod)
{ {
// TODO return (m_kmodState & kmod) != 0;
} }
int CApplication::GetKey(int keyRank, int option) bool CApplication::GetTrackedKeyState(TrackedKey key)
{ {
// TODO return m_trackedKeysState[key];
return 0; }
bool CApplication::GetMouseButtonState(int index)
{
return (m_mouseButtonsState & (1<<index)) != 0;
}
void CApplication::ResetKeyStates()
{
for (int i = 0; i < TRKEY_MAX; ++i)
m_trackedKeysState[i] = false;
m_kmodState = 0;
m_keyMotion = Math::Vector(0.0f, 0.0f, 0.0f);
m_joyMotion = Math::Vector(0.0f, 0.0f, 0.0f);
}
void CApplication::SetInputBinding(InputSlot slot, const InputBinding& binding)
{
m_inputBindings[slot] = binding;
}
const InputBinding& CApplication::GetInputBinding(InputSlot slot)
{
return m_inputBindings[slot];
} }
void CApplication::SetGrabInput(bool grab) void CApplication::SetGrabInput(bool grab)
@ -964,3 +1293,13 @@ std::string CApplication::GetDataFilePath(const std::string& dirName, const std:
{ {
return m_dataPath + "/" + dirName + "/" + fileName; return m_dataPath + "/" + dirName + "/" + fileName;
} }
Language CApplication::GetLanguage()
{
return m_language;
}
void CApplication::SetLanguage(Language language)
{
m_language = language;
}

View File

@ -22,8 +22,7 @@
#pragma once #pragma once
#include "common/global.h"
#include "common/misc.h"
#include "common/singleton.h" #include "common/singleton.h"
#include "graphics/core/device.h" #include "graphics/core/device.h"
#include "graphics/engine/engine.h" #include "graphics/engine/engine.h"
@ -39,8 +38,9 @@ class CRobotMain;
class CSound; class CSound;
/** /**
\struct JoystickDevice * \struct JoystickDevice
\brief Information about a joystick device */ * \brief Information about a joystick device
*/
struct JoystickDevice struct JoystickDevice
{ {
//! Device index (-1 = invalid device) //! Device index (-1 = invalid device)
@ -57,8 +57,9 @@ struct JoystickDevice
}; };
/** /**
\enum VideoQueryResult * \enum VideoQueryResult
\brief Result of querying for available video resolutions */ * \brief Result of querying for available video resolutions
*/
enum VideoQueryResult enum VideoQueryResult
{ {
VIDEO_QUERY_ERROR, VIDEO_QUERY_ERROR,
@ -68,6 +69,83 @@ enum VideoQueryResult
}; };
/**
* \enum TrackedKeys
* \brief Keys (or kmods) whose state (pressed/released) is tracked by CApplication
*/
enum TrackedKey
{
TRKEY_SHIFT,
TRKEY_CONTROL,
TRKEY_NUM_UP,
TRKEY_NUM_DOWN,
TRKEY_NUM_LEFT,
TRKEY_NUM_RIGHT,
TRKEY_NUM_PLUS,
TRKEY_NUM_MINUS,
TRKEY_PAGE_UP,
TRKEY_PAGE_DOWN,
TRKEY_MAX
};
/**
* \enum InputSlot
* \brief Available slots for input bindings
*/
enum InputSlot
{
INPUT_SLOT_LEFT = 0,
INPUT_SLOT_RIGHT = 1,
INPUT_SLOT_UP = 2,
INPUT_SLOT_DOWN = 3,
INPUT_SLOT_GUP = 4,
INPUT_SLOT_GDOWN = 5,
INPUT_SLOT_CAMERA = 6,
INPUT_SLOT_DESEL = 7,
INPUT_SLOT_ACTION = 8,
INPUT_SLOT_NEAR = 9,
INPUT_SLOT_AWAY = 10,
INPUT_SLOT_NEXT = 11,
INPUT_SLOT_HUMAN = 12,
INPUT_SLOT_QUIT = 13,
INPUT_SLOT_HELP = 14,
INPUT_SLOT_PROG = 15,
INPUT_SLOT_VISIT = 16,
INPUT_SLOT_SPEED10 = 17,
INPUT_SLOT_SPEED15 = 18,
INPUT_SLOT_SPEED20 = 19,
INPUT_SLOT_SPEED30 = 20,
INPUT_SLOT_AIMUP = 21,
INPUT_SLOT_AIMDOWN = 22,
INPUT_SLOT_CBOT = 23,
INPUT_SLOT_MAX
};
/**
* \struct InputBinding
* \brief Settable binding for user input
*/
struct InputBinding
{
//! Key
int key;
//! Key modifier (e.g. shift, control)
int kmod;
//! Joystick button
int joy;
inline InputBinding()
{
Reset();
}
inline void Reset()
{
key = kmod = joy = -1;
}
};
struct ApplicationPrivate; struct ApplicationPrivate;
/** /**
@ -147,8 +225,37 @@ public:
//! Change the video mode to given mode //! Change the video mode to given mode
bool ChangeVideoConfig(const Gfx::GLDeviceConfig &newConfig); bool ChangeVideoConfig(const Gfx::GLDeviceConfig &newConfig);
//! Suspends animation (time will not be updated)
void SuspendSimulation();
//! Resumes animation
void ResumeSimulation();
//! Returns whether simulation is suspended
bool GetSimulationSuspended();
//! Updates the simulation state //! Updates the simulation state
void StepSimulation(float rTime); void StepSimulation();
//@{
//! Management of simulation speed
void SetSimulationSpeed(float speed);
float GetSimulationSpeed();
//@}
//! Returns the absolute time counter [seconds]
float GetAbsTime();
//! Returns the exact absolute time counter [nanoseconds]
long long GetExactAbsTime();
//! Returns the exact absolute time counter disregarding speed setting [nanoseconds]
long long GetRealAbsTime();
//! Returns the relative time since last update [seconds]
float GetRelTime();
//! Returns the exact realative time since last update [nanoseconds]
long long GetExactRelTime();
//! Returns the exact relative time since last update disregarding speed setting [nanoseconds]
long long GetRealRelTime();
//! Returns a list of available joystick devices //! Returns a list of available joystick devices
std::vector<JoystickDevice> GetJoystickList(); std::vector<JoystickDevice> GetJoystickList();
@ -159,10 +266,11 @@ public:
//! Change the current joystick device //! Change the current joystick device
bool ChangeJoystick(const JoystickDevice &newJoystick); bool ChangeJoystick(const JoystickDevice &newJoystick);
//! Enables/disables joystick //! Management of joystick enable state
//@{
void SetJoystickEnabled(bool enable); void SetJoystickEnabled(bool enable);
//! Returns whether joystick is enabled
bool GetJoystickEnabled(); bool GetJoystickEnabled();
//@}
//! Polls the state of joystick axes and buttons //! Polls the state of joystick axes and buttons
void UpdateJoystick(); void UpdateJoystick();
@ -170,34 +278,66 @@ public:
//! Updates the mouse position explicitly //! Updates the mouse position explicitly
void UpdateMouse(); void UpdateMouse();
void FlushPressKey(); //! Returns the current key modifiers
void ResetKey(); int GetKmods();
void SetKey(int keyRank, int option, int key); //! Returns whether the given kmod is active
int GetKey(int keyRank, int option); bool GetKmodState(int kmod);
//! Sets the grab mode for input (keyboard & mouse) //! Returns whether the tracked key is pressed
bool GetTrackedKeyState(TrackedKey key);
//! Returns whether the mouse button is pressed
bool GetMouseButtonState(int index);
//! Resets tracked key states, modifiers and motion vectors
void ResetKeyStates();
// TODO move input binding and motion vectors to CRobotMain
//! Sets the default input bindings
void SetDefaultInputBindings();
//! Management of input bindings
//@{
void SetInputBinding(InputSlot slot, const InputBinding& binding);
const InputBinding& GetInputBinding(InputSlot slot);
//@}
//! Management of the grab mode for input (keyboard & mouse)
//@{
void SetGrabInput(bool grab); void SetGrabInput(bool grab);
//! Returns the grab mode
bool GetGrabInput(); bool GetGrabInput();
//@}
//! Sets the visiblity of system mouse cursor //! Management of the visiblity of system mouse cursor
//@{
void SetSystemMouseVisible(bool visible); void SetSystemMouseVisible(bool visible);
//! Returns the visiblity of system mouse cursor
bool GetSystemMouseVisibile(); bool GetSystemMouseVisibile();
//@}
//! Sets the position of system mouse cursor (in interface coords) //! Management of the position of system mouse cursor (in interface coords)
//@{
void SetSystemMousePos(Math::Point pos); void SetSystemMousePos(Math::Point pos);
//! Returns the position of system mouse cursor (in interface coords)
Math::Point GetSystemMousePos(); Math::Point GetSystemMousePos();
//@}
//! Enables/disables debug mode (prints more info in logger) //! Management of debug mode (prints more info in logger)
//@{
void SetDebugMode(bool mode); void SetDebugMode(bool mode);
//! Returns whether debug mode is enabled
bool GetDebugMode(); bool GetDebugMode();
//@}
//! Returns the full path to a file in data directory //! Returns the full path to a file in data directory
std::string GetDataFilePath(const std::string &dirName, const std::string &fileName); std::string GetDataFilePath(const std::string &dirName, const std::string &fileName);
//! Management of language
//@{
Language GetLanguage();
void SetLanguage(Language language);
//@}
protected: protected:
//! Creates the window's SDL_Surface //! Creates the window's SDL_Surface
bool CreateVideoSurface(); bool CreateVideoSurface();
@ -248,13 +388,44 @@ protected:
//! Text set as window title //! Text set as window title
std::string m_windowTitle; std::string m_windowTitle;
int m_keyState; //! Animation time stamps, etc.
Math::Vector m_axeKey; //@{
Math::Vector m_axeJoy; SystemTimeStamp* m_baseTimeStamp;
Math::Point m_systemMousePos; SystemTimeStamp* m_lastTimeStamp;
long m_mouseWheel; SystemTimeStamp* m_curTimeStamp;
long m_key[50][2]; long long m_realAbsTimeBase;
long long m_realAbsTime;
long long m_realRelTime;
long long m_absTimeBase;
long long m_exactAbsTime;
long long m_exactRelTime;
float m_absTime;
float m_relTime;
float m_simulationSpeed;
bool m_simulationSuspended;
//@}
//! Current state of key modifiers (mask of SDLMod)
unsigned int m_kmodState;
//! Current state of some tracked keys (mask of TrackedKey)
bool m_trackedKeysState[TRKEY_MAX];
//! Current state of mouse buttons (mask of button indexes)
unsigned int m_mouseButtonsState;
//! Bindings for user inputs
InputBinding m_inputBindings[INPUT_SLOT_MAX];
//! Motion vector set by keyboard
Math::Vector m_keyMotion;
//! Motion vector set by joystick
Math::Vector m_joyMotion;
//! Current system mouse position
Math::Point m_systemMousePos;
//! Info about current joystick device //! Info about current joystick device
JoystickDevice m_joystick; JoystickDevice m_joystick;
@ -267,5 +438,8 @@ protected:
//! Path to directory with data files //! Path to directory with data files
std::string m_dataPath; std::string m_dataPath;
//! Application language
Language m_language;
}; };

View File

@ -14,6 +14,9 @@
// * You should have received a copy of the GNU General Public License // * You should have received a copy of the GNU General Public License
// * along with this program. If not, see http://www.gnu.org/licenses/. // * along with this program. If not, see http://www.gnu.org/licenses/.
// TODO: move to global.h after restext rewrite
#pragma once #pragma once
enum Error enum Error
@ -23,8 +26,6 @@ enum Error
ERR_CONTINUE = 2, // continues ERR_CONTINUE = 2, // continues
ERR_STOP = 3, // stops ERR_STOP = 3, // stops
ERR_CMD = 4, // unknown command ERR_CMD = 4, // unknown command
ERR_INSTALL = 20, // incorrectly installed program
ERR_NOCD = 21, // CD not found
ERR_MANIP_VEH = 100, // inappropriate vehicle ERR_MANIP_VEH = 100, // inappropriate vehicle
ERR_MANIP_FLY = 101, // impossible in flight ERR_MANIP_FLY = 101, // impossible in flight
ERR_MANIP_BUSY = 102, // taking: hands already occupied ERR_MANIP_BUSY = 102, // taking: hands already occupied

View File

@ -19,6 +19,16 @@
#include "common/event.h" #include "common/event.h"
#include "common/iman.h" #include "common/iman.h"
static EventType g_uniqueEventType = EVENT_USER;
EventType GetUniqueEventType()
{
int i = (int)g_uniqueEventType+1;
g_uniqueEventType = (EventType)i;
return g_uniqueEventType;
}
CEventQueue::CEventQueue(CInstanceManager* iMan) CEventQueue::CEventQueue(CInstanceManager* iMan)

View File

@ -14,17 +14,17 @@
// * You should have received a copy of the GNU General Public License // * You should have received a copy of the GNU General Public License
// * along with this program. If not, see http://www.gnu.org/licenses/. // * along with this program. If not, see http://www.gnu.org/licenses/.
// event.h /**
* \file common/event.h
* \brief Event types, structs and event queue
*/
#pragma once #pragma once
#include <common/key.h> #include "common/key.h"
#include <common/event_ids.h> #include "common/event_ids.h"
#include <math/point.h> #include "math/point.h"
#include <string.h>
class CInstanceManager; class CInstanceManager;
@ -171,13 +171,19 @@ struct Event
ActiveEventData active; ActiveEventData active;
}; };
// TODO: refactor/rewrite // TODO: remove
long param; // parameter long param; // parameter
// TODO: remove?
Math::Point pos; // mouse position (0 .. 1) Math::Point pos; // mouse position (0 .. 1)
// TODO: ?
float axeX; // control the X axis (-1 .. 1) float axeX; // control the X axis (-1 .. 1)
float axeY; // control of the Y axis (-1 .. 1) float axeY; // control of the Y axis (-1 .. 1)
float axeZ; // control the Z axis (-1 .. 1) float axeZ; // control the Z axis (-1 .. 1)
short keyState; // state of the keyboard (KS_ *) short keyState; // state of the keyboard (KS_ *)
// TODO: remove in longer term (use CApplication's new time functions instead)
float rTime; // relative time float rTime; // relative time
Event(EventType aType = EVENT_NULL) Event(EventType aType = EVENT_NULL)
@ -193,40 +199,8 @@ struct Event
}; };
/** //! Returns an unique event type (above the standard IDs)
\enum KeyRank EventType GetUniqueEventType();
\brief Slots for key assignment of user controls
*/
// TODO: move to global.h ?
enum KeyRank
{
KEYRANK_LEFT = 0,
KEYRANK_RIGHT = 1,
KEYRANK_UP = 2,
KEYRANK_DOWN = 3,
KEYRANK_GUP = 4,
KEYRANK_GDOWN = 5,
KEYRANK_CAMERA = 6,
KEYRANK_DESEL = 7,
KEYRANK_ACTION = 8,
KEYRANK_NEAR = 9,
KEYRANK_AWAY = 10,
KEYRANK_NEXT = 11,
KEYRANK_HUMAN = 12,
KEYRANK_QUIT = 13,
KEYRANK_HELP = 14,
KEYRANK_PROG = 15,
KEYRANK_VISIT = 16,
KEYRANK_SPEED10 = 17,
KEYRANK_SPEED15 = 18,
KEYRANK_SPEED20 = 19,
KEYRANK_SPEED30 = 20,
KEYRANK_AIMUP = 21,
KEYRANK_AIMDOWN = 22,
KEYRANK_CBOT = 23,
};
/** /**
@ -261,5 +235,3 @@ protected:
int m_tail; int m_tail;
int m_total; int m_total;
}; };

View File

@ -14,6 +14,9 @@
// * You should have received a copy of the GNU General Public License // * You should have received a copy of the GNU General Public License
// * along with this program. If not, see http://www.gnu.org/licenses/. // * along with this program. If not, see http://www.gnu.org/licenses/.
// TODO: move to event.h after restext rewrite
#pragma once #pragma once
/** /**

View File

@ -14,53 +14,111 @@
// * You should have received a copy of the GNU General Public License // * You should have received a copy of the GNU General Public License
// * along with this program. If not, see http://www.gnu.org/licenses/. // * along with this program. If not, see http://www.gnu.org/licenses/.
// global.h /**
* \file common/global.h
* \brief Some common, global definitions
*/
#pragma once #pragma once
#include "error_ids.h"
/**
* \enum Language
* \brief Application language
*/
enum Language
{
LANG_ENGLISH = 0,
LANG_FRENCH = 1,
LANG_GERMAN = 2,
LANG_POLISH = 3
};
/**
* \enum BuildType
* \brief Construction actions (buildings, etc.) available to user
*
* TODO: refactor
*/
enum BuildType enum BuildType
{ {
BUILD_FACTORY = (1<<0), // factory BUILD_FACTORY = (1<<0), //! < factory
BUILD_DERRICK = (1<<1), // derrick BUILD_DERRICK = (1<<1), //! < derrick
BUILD_CONVERT = (1<<2), // converter BUILD_CONVERT = (1<<2), //! < converter
BUILD_RADAR = (1<<3), // radar BUILD_RADAR = (1<<3), //! < radar
BUILD_ENERGY = (1<<4), // factory of cells BUILD_ENERGY = (1<<4), //! < factory of cells
BUILD_NUCLEAR = (1<<5), // nuclear power plant BUILD_NUCLEAR = (1<<5), //! < nuclear power plant
BUILD_STATION = (1<<6), // base station BUILD_STATION = (1<<6), //! < base station
BUILD_REPAIR = (1<<7), // repair center BUILD_REPAIR = (1<<7), //! < repair center
BUILD_TOWER = (1<<8), // defense tower BUILD_TOWER = (1<<8), //! < defense tower
BUILD_RESEARCH = (1<<9), // research center BUILD_RESEARCH = (1<<9), //! < research center
BUILD_LABO = (1<<10), // laboratory BUILD_LABO = (1<<10), //! < laboratory
BUILD_PARA = (1<<11), // lightning protection BUILD_PARA = (1<<11), //! < lightning protection
BUILD_INFO = (1<<12), // information terminal BUILD_INFO = (1<<12), //! < information terminal
BUILD_GFLAT = (1<<16), // flat floor BUILD_GFLAT = (1<<16), //! < flat floor
BUILD_FLAG = (1<<17) // puts / removes colored flag BUILD_FLAG = (1<<17) //! < puts / removes colored flag
}; };
/**
// Do not change values was because of backups (bits = ...). * \enum ResearchType
* \brief Research actions available to user
*/
enum ResearchType enum ResearchType
{ {
RESEARCH_TANK = (1<<0), // caterpillars RESEARCH_TANK = (1<<0), //! < caterpillars
RESEARCH_FLY = (1<<1), // wings RESEARCH_FLY = (1<<1), //! < wings
RESEARCH_CANON = (1<<2), // cannon RESEARCH_CANON = (1<<2), //! < cannon
RESEARCH_TOWER = (1<<3), // defense tower RESEARCH_TOWER = (1<<3), //! < defense tower
RESEARCH_ATOMIC = (1<<4), // nuclear RESEARCH_ATOMIC = (1<<4), //! < nuclear
RESEARCH_THUMP = (1<<5), // thumper RESEARCH_THUMP = (1<<5), //! < thumper
RESEARCH_SHIELD = (1<<6), // shield RESEARCH_SHIELD = (1<<6), //! < shield
RESEARCH_PHAZER = (1<<7), // phazer gun RESEARCH_PHAZER = (1<<7), //! < phazer gun
RESEARCH_iPAW = (1<<8), // legs of insects RESEARCH_iPAW = (1<<8), //! < legs of insects
RESEARCH_iGUN = (1<<9), // cannon of insects RESEARCH_iGUN = (1<<9), //! < cannon of insects
RESEARCH_RECYCLER = (1<<10), // recycler RESEARCH_RECYCLER = (1<<10), //! < recycler
RESEARCH_SUBM = (1<<11), // submarine RESEARCH_SUBM = (1<<11), //! < submarine
RESEARCH_SNIFFER = (1<<12) // sniffer RESEARCH_SNIFFER = (1<<12) //! < sniffer
}; };
/**
* \enum KeyRank
* \brief Slots for key assignment of user controls
*/
// TODO: remove (use the new InputSlot enum from app/app.h)
enum KeyRank
{
KEYRANK_LEFT = 0,
KEYRANK_RIGHT = 1,
KEYRANK_UP = 2,
KEYRANK_DOWN = 3,
KEYRANK_GUP = 4,
KEYRANK_GDOWN = 5,
KEYRANK_CAMERA = 6,
KEYRANK_DESEL = 7,
KEYRANK_ACTION = 8,
KEYRANK_NEAR = 9,
KEYRANK_AWAY = 10,
KEYRANK_NEXT = 11,
KEYRANK_HUMAN = 12,
KEYRANK_QUIT = 13,
KEYRANK_HELP = 14,
KEYRANK_PROG = 15,
KEYRANK_VISIT = 16,
KEYRANK_SPEED10 = 17,
KEYRANK_SPEED15 = 18,
KEYRANK_SPEED20 = 19,
KEYRANK_SPEED30 = 20,
KEYRANK_AIMUP = 21,
KEYRANK_AIMDOWN = 22,
KEYRANK_CBOT = 23,
KEYRANK_MAX
};
// TODO: move to CRobotMain
extern long g_id; // unique identifier extern long g_id; // unique identifier
extern long g_build; // constructible buildings extern long g_build; // constructible buildings
extern long g_researchDone; // research done extern long g_researchDone; // research done
extern long g_researchEnable; // research available extern long g_researchEnable; // research available
extern float g_unit; // conversion factor extern float g_unit; // conversion factor

View File

@ -21,6 +21,8 @@
#include <stdlib.h> #include <stdlib.h>
#include <stdio.h> #include <stdio.h>
#include <string.h> #include <string.h>
#include <assert.h>
#include <SDL/SDL.h> #include <SDL/SDL.h>
#include <SDL/SDL_image.h> #include <SDL/SDL_image.h>
#include <png.h> #include <png.h>
@ -88,21 +90,21 @@ bool PNGSaveSurface(const char *filename, SDL_Surface *surf)
/* Opening output file */ /* Opening output file */
fp = fopen(filename, "wb"); fp = fopen(filename, "wb");
if (fp == NULL) if (fp == nullptr)
{ {
PNG_ERROR = std::string("Could not open file '") + std::string(filename) + std::string("' for saving"); PNG_ERROR = std::string("Could not open file '") + std::string(filename) + std::string("' for saving");
return false; return false;
} }
/* Initializing png structures and callbacks */ /* Initializing png structures and callbacks */
png_ptr = png_create_write_struct(PNG_LIBPNG_VER_STRING, NULL, PNGUserError, NULL); png_ptr = png_create_write_struct(PNG_LIBPNG_VER_STRING, nullptr, PNGUserError, nullptr);
if (png_ptr == NULL) if (png_ptr == nullptr)
return false; return false;
info_ptr = png_create_info_struct(png_ptr); info_ptr = png_create_info_struct(png_ptr);
if (info_ptr == NULL) if (info_ptr == nullptr)
{ {
png_destroy_write_struct(&png_ptr, static_cast<png_infopp>(NULL)); png_destroy_write_struct(&png_ptr, static_cast<png_infopp>(nullptr));
PNG_ERROR = "png_create_info_struct() error!"; PNG_ERROR = "png_create_info_struct() error!";
return false; return false;
} }
@ -142,7 +144,7 @@ bool PNGSaveSurface(const char *filename, SDL_Surface *surf)
CImage::CImage() CImage::CImage()
{ {
m_data = NULL; m_data = nullptr;
} }
CImage::~CImage() CImage::~CImage()
@ -150,22 +152,22 @@ CImage::~CImage()
Free(); Free();
} }
bool CImage::IsEmpty() bool CImage::IsEmpty() const
{ {
return m_data == NULL; return m_data == nullptr;
} }
void CImage::Free() void CImage::Free()
{ {
if (m_data != NULL) if (m_data != nullptr)
{ {
if (m_data->surface != NULL) if (m_data->surface != nullptr)
{ {
SDL_FreeSurface(m_data->surface); SDL_FreeSurface(m_data->surface);
m_data->surface = NULL; m_data->surface = nullptr;
} }
delete m_data; delete m_data;
m_data = NULL; m_data = nullptr;
} }
} }
@ -174,6 +176,118 @@ ImageData* CImage::GetData()
return m_data; return m_data;
} }
Math::IntPoint CImage::GetSize() const
{
if (m_data == nullptr)
return Math::IntPoint();
return Math::IntPoint(m_data->surface->w, m_data->surface->h);
}
/**
* Image must be valid and pixel coords in valid range.
*
* \param pixel pixel coords (range x: 0..width-1 y: 0..height-1)
* \returns color
*/
Gfx::Color CImage::GetPixel(Math::IntPoint pixel)
{
assert(m_data != nullptr);
assert(pixel.x >= 0 || pixel.x <= m_data->surface->w);
assert(pixel.y >= 0 || pixel.y <= m_data->surface->h);
int bpp = m_data->surface->format->BytesPerPixel;
int index = pixel.y * m_data->surface->pitch + pixel.x * bpp;
Uint8* p = &static_cast<Uint8*>(m_data->surface->pixels)[index];
Uint32 u = 0;
switch (bpp)
{
case 1:
u = *p;
break;
case 2:
u = *reinterpret_cast<Uint16*>(p);
break;
case 3:
if (SDL_BYTEORDER == SDL_BIG_ENDIAN)
u = (p[0] << 16) | (p[1] << 8) | p[2];
else
u = p[0] | (p[1] << 8) | (p[2] << 16);
break;
case 4:
u = *reinterpret_cast<Uint32*>(p);
break;
default:
assert(false);
}
Uint8 r = 0, g = 0, b = 0, a = 0;
SDL_GetRGBA(u, m_data->surface->format, &r, &g, &b, &a);
return Gfx::Color(r / 255.0f, g / 255.0f, b / 255.0f, a / 255.0f);
}
/**
* Image must be valid and pixel coords in valid range.
*
* \param pixel pixel coords (range x: 0..width-1 y: 0..height-1)
* \param color color
*/
void CImage::SetPixel(Math::IntPoint pixel, Gfx::Color color)
{
assert(m_data != nullptr);
assert(pixel.x >= 0 || pixel.x <= m_data->surface->w);
assert(pixel.y >= 0 || pixel.y <= m_data->surface->h);
int bpp = m_data->surface->format->BytesPerPixel;
int index = pixel.y * m_data->surface->pitch + pixel.x * bpp;
Uint8* p = &static_cast<Uint8*>(m_data->surface->pixels)[index];
Uint8 r = static_cast<Uint8>(color.r * 255.0f);
Uint8 g = static_cast<Uint8>(color.g * 255.0f);
Uint8 b = static_cast<Uint8>(color.b * 255.0f);
Uint8 a = static_cast<Uint8>(color.a * 255.0f);
Uint32 u = SDL_MapRGBA(m_data->surface->format, r, g, b, a);
switch(bpp)
{
case 1:
*p = u;
break;
case 2:
*reinterpret_cast<Uint16*>(p) = u;
break;
case 3:
if (SDL_BYTEORDER == SDL_BIG_ENDIAN)
{
p[0] = (u >> 16) & 0xFF;
p[1] = (u >> 8) & 0xFF;
p[2] = u & 0xFF;
}
else
{
p[0] = u & 0xFF;
p[1] = (u >> 8) & 0xFF;
p[2] = (u >> 16) & 0xFF;
}
break;
case 4:
*reinterpret_cast<Uint32*>(p) = u;
break;
default:
assert(false);
}
}
std::string CImage::GetError() std::string CImage::GetError()
{ {
return m_error; return m_error;
@ -189,10 +303,10 @@ bool CImage::Load(const std::string& fileName)
m_error = ""; m_error = "";
m_data->surface = IMG_Load(fileName.c_str()); m_data->surface = IMG_Load(fileName.c_str());
if (m_data->surface == NULL) if (m_data->surface == nullptr)
{ {
delete m_data; delete m_data;
m_data = NULL; m_data = nullptr;
m_error = std::string(IMG_GetError()); m_error = std::string(IMG_GetError());
return false; return false;

View File

@ -14,10 +14,15 @@
// * You should have received a copy of the GNU General Public License // * You should have received a copy of the GNU General Public License
// * along with this program. If not, see http://www.gnu.org/licenses/. // * along with this program. If not, see http://www.gnu.org/licenses/.
// image.h /**
* \file common/image.h
* \brief Class for loading and saving images
*/
#pragma once #pragma once
#include "graphics/core/color.h"
#include "math/intpoint.h"
#include <stddef.h> #include <stddef.h>
#include <string> #include <string>
@ -61,12 +66,21 @@ public:
//! Frees the allocated image data //! Frees the allocated image data
void Free(); void Free();
//! Returns whether the image is empty (has NULL data) //! Returns whether the image is empty (has null data)
bool IsEmpty(); bool IsEmpty() const;
//! Returns the image data; if empty - returns NULL //! Returns the image data; if empty - returns nullptr
ImageData* GetData(); ImageData* GetData();
//! Returns the image size
Math::IntPoint GetSize() const;
//! Sets the color at given pixel
void SetPixel(Math::IntPoint pixel, Gfx::Color color);
//! Returns the color at given pixel
Gfx::Color GetPixel(Math::IntPoint pixel);
//! Loads an image from the specified file //! Loads an image from the specified file
bool Load(const std::string &fileName); bool Load(const std::string &fileName);

View File

@ -16,12 +16,10 @@
// iman.cpp // iman.cpp
#include <stdio.h>
#include "common/struct.h"
#include "common/iman.h" #include "common/iman.h"
#include <cassert>
template<> CInstanceManager* CSingleton<CInstanceManager>::mInstance = nullptr; template<> CInstanceManager* CSingleton<CInstanceManager>::mInstance = nullptr;
@ -39,139 +37,91 @@ CInstanceManager* CInstanceManager::GetInstancePointer()
return mInstance; return mInstance;
} }
// Object's constructor.
CInstanceManager::CInstanceManager() CInstanceManager::CInstanceManager()
{ {
int i; for (int i = 0; i < CLASS_MAX; i++)
for ( i=0 ; i<CLASS_MAX ; i++ )
{ {
m_table[i].totalPossible = 0; m_table[i].maxCount = 0;
m_table[i].totalUsed = 0; m_table[i].usedCount = 0;
m_table[i].classPointer = 0; m_table[i].instances = nullptr;
} }
} }
// Object's destructor.
CInstanceManager::~CInstanceManager() CInstanceManager::~CInstanceManager()
{ {
int i; Flush();
for ( i=0 ; i<CLASS_MAX ; i++ )
{
if ( m_table[i].classPointer != 0 )
{
free(m_table[i].classPointer);
}
}
} }
// Empty the list of all classes.
void CInstanceManager::Flush() void CInstanceManager::Flush()
{ {
int i; for (int i = 0; i < CLASS_MAX; i++)
for ( i=0 ; i<CLASS_MAX ; i++ )
{ {
if ( m_table[i].classPointer != 0 ) if (m_table[i].instances != nullptr)
{ delete[] m_table[i].instances;
free(m_table[i].classPointer);
} m_table[i].instances = nullptr;
m_table[i].classPointer = 0;
} }
} }
// Empty all instances of a given class. void CInstanceManager::Flush(ManagedClassType classType)
void CInstanceManager::Flush(ClassType classType)
{ {
if ( classType < 0 || classType >= CLASS_MAX ) return; if (classType < 0 || classType >= CLASS_MAX) return;
if ( m_table[classType].classPointer == 0 ) return; if (m_table[classType].instances == nullptr) return;
free(m_table[classType].classPointer); delete[] m_table[classType].instances;
m_table[classType].classPointer = 0; m_table[classType].instances = nullptr;
} }
bool CInstanceManager::AddInstance(ManagedClassType classType, void* instance, int max)
// Adds a new instance of a class.
bool CInstanceManager::AddInstance(ClassType classType, void* pointer, int max)
{ {
int i; if (classType < 0 || classType >= CLASS_MAX) return false;
if ( classType < 0 || classType >= CLASS_MAX ) return false; if (m_table[classType].instances == nullptr)
if ( m_table[classType].classPointer == 0 )
{ {
m_table[classType].classPointer = static_cast<void**>( malloc(max*sizeof(void*)) ); m_table[classType].instances = new void*[max];
m_table[classType].totalPossible = max; m_table[classType].maxCount = max;
m_table[classType].totalUsed = 0; m_table[classType].usedCount = 0;
} }
if ( m_table[classType].totalUsed >= m_table[classType].totalPossible ) return false; if (m_table[classType].usedCount >= m_table[classType].maxCount) return false;
i = m_table[classType].totalUsed++; int i = m_table[classType].usedCount++;
m_table[classType].classPointer[i] = pointer; m_table[classType].instances[i] = instance;
return true; return true;
} }
// Deletes an instance of a class. bool CInstanceManager::DeleteInstance(ManagedClassType classType, void* instance)
bool CInstanceManager::DeleteInstance(ClassType classType, void* pointer)
{ {
int i; if (classType < 0 || classType >= CLASS_MAX) return false;
if ( classType < 0 || classType >= CLASS_MAX ) return false; for (int i = 0; i < m_table[classType].usedCount; i++)
for ( i=0 ; i<m_table[classType].totalUsed ; i++ )
{ {
if ( m_table[classType].classPointer[i] == pointer ) if (m_table[classType].instances[i] == instance)
{ m_table[classType].instances[i] = nullptr;
m_table[classType].classPointer[i] = 0;
}
} }
Compress(classType); Compress(classType);
return true; return true;
} }
// Seeking an existing instance. Returns 0 if it does not exist. void* CInstanceManager::SearchInstance(ManagedClassType classType, int rank)
// Must be super fast!
void* CInstanceManager::SearchInstance(ClassType classType, int rank)
{ {
#if _DEBUG if (classType < 0 || classType >= CLASS_MAX) return nullptr;
if ( classType < 0 || classType >= CLASS_MAX ) return 0; if (m_table[classType].instances == nullptr) return nullptr;
if ( m_table[classType].classPointer == 0 ) return 0; if (rank >= m_table[classType].usedCount) return nullptr;
#endif
if ( rank >= m_table[classType].totalUsed ) return 0;
return m_table[classType].classPointer[rank]; return m_table[classType].instances[rank];
} }
void CInstanceManager::Compress(ManagedClassType classType)
// Fills holes in a table.
void CInstanceManager::Compress(ClassType classType)
{ {
int i, j; if (classType < 0 || classType >= CLASS_MAX) return;
if ( classType < 0 || classType >= CLASS_MAX ) return; int j = 0;
for (int i = 0; i < m_table[classType].usedCount; i++)
j = 0;
for ( i=0 ; i<m_table[classType].totalUsed ; i++ )
{ {
if ( m_table[classType].classPointer[i] != 0 ) if (m_table[classType].instances[i] != nullptr)
{ m_table[classType].instances[j++] = m_table[classType].instances[i];
m_table[classType].classPointer[j++] = m_table[classType].classPointer[i];
}
} }
m_table[classType].totalUsed = j; m_table[classType].usedCount = j;
} }

View File

@ -14,7 +14,10 @@
// * You should have received a copy of the GNU General Public License // * You should have received a copy of the GNU General Public License
// * along with this program. If not, see http://www.gnu.org/licenses/. // * along with this program. If not, see http://www.gnu.org/licenses/.
// iman.h /**
* \file iman.h
* \brief Instance manager for managed classes
*/
#pragma once #pragma once
@ -22,36 +25,119 @@
#include <common/misc.h> #include <common/misc.h>
/**
* \enum ManagedClassType
* \brief Type of class managed by CInstanceManager
*/
struct BaseClass // TODO: remove unnecessary, refactor to singletons, move to CRobotMain, keep others?
enum ManagedClassType
{ {
int totalPossible; //! CEventQueue
int totalUsed; CLASS_EVENT = 1,
void** classPointer; //! Ui::CInterface
CLASS_INTERFACE = 2,
//! CRobotMain
CLASS_MAIN = 3,
//! Gfx::CEngine
CLASS_ENGINE = 4,
//! Gfx::CTerrain
CLASS_TERRAIN = 5,
//! CObject
CLASS_OBJECT = 6,
//! CPhysics
CLASS_PHYSICS = 7,
//! CBrain
CLASS_BRAIN = 8,
//! Gfx::CCamera
CLASS_CAMERA = 9,
//! Gfx::CLightManager
CLASS_LIGHT = 10,
//! Gfx::CParticle
CLASS_PARTICULE = 11,
//! CAuto; TODO: remove (unused)
CLASS_AUTO = 12,
//! Ui::CDisplayText
CLASS_DISPLAYTEXT = 13,
//! Gfx::CPyro
CLASS_PYRO = 14,
//! Ui::CScript; TODO: remove (unused)
CLASS_SCRIPT = 15,
//! Gfx::CText
CLASS_TEXT = 16,
//! Ui::CStudio, Ui::CDisplayText; TODO: remove (unused)
CLASS_STUDIO = 17,
//! Gfx::CWater
CLASS_WATER = 18,
//! Gfx::CCloud; TODO: remove (unused)
CLASS_CLOUD = 19,
//! CMotion; TODO: remove (unused)
CLASS_MOTION = 20,
//! CSoundInterface
CLASS_SOUND = 21,
//! Gfx::CPlanet
CLASS_PLANET = 22,
//! CTaskManager; TODO: remove (unused)
CLASS_TASKMANAGER = 23,
//! Ui::CMainDialog; TODO: remove (unused)
CLASS_DIALOG = 24,
//! Ui::CMainMap; TODO: remove (unused)
CLASS_MAP = 25,
//! Ui::CMainShort, CMainMovie; TODO: remove (unused)
CLASS_SHORT = 26,
//! Gfx::CLightning; TODO: remove (unused)
CLASS_BLITZ = 27,
//! Maximum (number of managed classes)
CLASS_MAX = 30
}; };
/**
* \enum ManagedClassInstances
* \brief Instances of class managed by CInstanceManager
*/
struct ManagedClassInstances
{
int maxCount;
int usedCount;
void** instances;
};
/**
* \class CInstanceManager
* \brief Manager for instances of certain classes
*
* Instance manager (often shortened to iMan) allows to register instances of
* classes and search them.
*/
class CInstanceManager : public CSingleton<CInstanceManager> class CInstanceManager : public CSingleton<CInstanceManager>
{ {
public: public:
CInstanceManager(); CInstanceManager();
~CInstanceManager(); ~CInstanceManager();
//! Remove all managed instances
void Flush(); void Flush();
void Flush(ClassType classType); //! Removes instances of one type of class
bool AddInstance(ClassType classType, void* pointer, int max=1); void Flush(ManagedClassType classType);
bool DeleteInstance(ClassType classType, void* pointer); //! Registers new instance of class type
void* SearchInstance(ClassType classType, int rank=0); bool AddInstance(ManagedClassType classType, void* instance, int max=1);
//! Deletes the registered instance of class type
bool DeleteInstance(ManagedClassType classType, void* instance);
//! Seeks a class instance of given type
void* SearchInstance(ManagedClassType classType, int rank=0);
static CInstanceManager& GetInstance(); static CInstanceManager& GetInstance();
static CInstanceManager* GetInstancePointer(); static CInstanceManager* GetInstancePointer();
protected: protected:
void Compress(ClassType classType); //! Fills holes in instance table
void Compress(ManagedClassType classType);
protected: protected:
BaseClass m_table[CLASS_MAX]; ManagedClassInstances m_table[CLASS_MAX];
}; };

View File

@ -14,7 +14,10 @@
// * You should have received a copy of the GNU General Public License // * You should have received a copy of the GNU General Public License
// * along with this program. If not, see http://www.gnu.org/licenses/. // * along with this program. If not, see http://www.gnu.org/licenses/.
// ioutils.h /**
* \file ioutils.h
* \brief Functions for binary I/O
*/
#pragma once #pragma once

View File

@ -1,54 +0,0 @@
// * This file is part of the COLOBOT source code
// * Copyright (C) 2001-2008, Daniel ROUX & EPSITEC SA, www.epsitec.ch
// *
// * This program is free software: you can redistribute it and/or modify
// * it under the terms of the GNU General Public License as published by
// * the Free Software Foundation, either version 3 of the License, or
// * (at your option) any later version.
// *
// * This program is distributed in the hope that it will be useful,
// * but WITHOUT ANY WARRANTY; without even the implied warranty of
// * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// * GNU General Public License for more details.
// *
// * You should have received a copy of the GNU General Public License
// * along with this program. If not, see http://www.gnu.org/licenses/.
// language.h
#pragma once
#define _FULL true // CoLoBoT
#define _SCHOOL false // CeeBot-A or Teen
#define _TEEN false // false for CeeBot-A, true for CeeBot-Teen
#define _EDU false
#define _PERSO false
#define _CEEBOTDEMO false
#define _NET false
#define _DEMO false // DEMO only CoLoBoT (with _Full = false)!
#define _FRENCH false
#define _ENGLISH true
#define _GERMAN false
#define _WG false
#define _POLISH false
#define _NEWLOOK false // false for CoLoBoT, true for all CeeBot
#define _SOUNDTRACKS false // always false since InitAudioTrackVolume crop in Vista
// Verifications
#if !_FULL & !_SCHOOL & !_NET & !_DEMO
-> no version chosen!
#endif
#if _SCHOOL
#if !_EDU & !_PERSO & !_CEEBOTDEMO
-> EDU or PERSO or CEEBOTDEMO?
#endif
#if _EDU & _PERSO & _CEEBOTDEMO
-> EDU and PERSO and CEEBOTDEMO not at the same time!!!
#endif
#endif

View File

@ -14,22 +14,20 @@
// * You should have received a copy of the GNU General Public License // * You should have received a copy of the GNU General Public License
// * along with this program. If not, see http://www.gnu.org/licenses/. // * along with this program. If not, see http://www.gnu.org/licenses/.
// logger.h /**
* \file common/logger.h
* \brief Class for logging information to file or console
*/
#pragma once #pragma once
#include "common/singleton.h"
#include <string> #include <string>
#include <cstdarg> #include <cstdarg>
#include <cstdio> #include <cstdio>
#include <common/singleton.h>
/**
* @file common/logger.h
* @brief Class for loggin information to file or console
*/
/** /**
* \public * \public

View File

@ -16,17 +16,15 @@
// metafile.cpp // metafile.cpp
#include <windows.h>
#include <stdio.h>
#include "common/language.h"
#include "common/metafile.h" #include "common/metafile.h"
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#if _FULL | _NET //#if _FULL | _NET
static unsigned char table_codec[23] = static unsigned char table_codec[23] =
{ {
0x85, 0x91, 0x73, 0xcf, 0xa2, 0xbb, 0xf4, 0x77, 0x85, 0x91, 0x73, 0xcf, 0xa2, 0xbb, 0xf4, 0x77,
@ -44,9 +42,9 @@ void Codec(void* buffer, int len, int start)
b[i] ^= table_codec[(start++)%23]; b[i] ^= table_codec[(start++)%23];
} }
} }
#endif //#endif
#if _SCHOOL /*#if _SCHOOL
#if _CEEBOTDEMO #if _CEEBOTDEMO
static unsigned char table_codec[136] = static unsigned char table_codec[136] =
{ {
@ -99,9 +97,9 @@ void Codec(void* buffer, int len, int start)
} }
} }
#endif #endif
#endif #endif*/
#if _DEMO /*#if _DEMO
static unsigned char table_codec[27] = static unsigned char table_codec[27] =
{ {
0x85, 0x91, 0x77, 0xcf, 0xa3, 0xbb, 0xf4, 0x77, 0x85, 0x91, 0x77, 0xcf, 0xa3, 0xbb, 0xf4, 0x77,
@ -120,7 +118,7 @@ void Codec(void* buffer, int len, int start)
b[i] ^= table_codec[(start++)%27]; b[i] ^= table_codec[(start++)%27];
} }
} }
#endif #endif*/
@ -286,7 +284,7 @@ int CMetaFile::Read(void *buffer, int size)
int CMetaFile::GetByte() int CMetaFile::GetByte()
{ {
BYTE b; int b;
if ( !m_bOpen ) return 1; if ( !m_bOpen ) return 1;
@ -303,7 +301,7 @@ int CMetaFile::GetByte()
int CMetaFile::GetWord() int CMetaFile::GetWord()
{ {
WORD w; int w;
if ( !m_bOpen ) return 1; if ( !m_bOpen ) return 1;

View File

@ -17,51 +17,25 @@
// misc.cpp // misc.cpp
#include "common/misc.h"
#include <math.h> #include <math.h>
#include <stdlib.h> #include <stdlib.h>
#include <stdio.h> #include <stdio.h>
#include <string.h>
#include <ctype.h> #include <ctype.h>
//#include <direct.h>
#include <time.h> #include <time.h>
//#include <d3d.h>
#include "common/struct.h"
//#include "old/d3dengine.h"
#include "graphics/engine/engine.h"
//#include "old/d3dmath.h"
//#include "math/math.h"
//#include "old/d3dutil.h"
#include "common/language.h"
#include "common/event.h"
#include "common/misc.h"
CMetaFile g_metafile;
static EventType g_uniqueEventType = EVENT_USER;
static bool g_bUserDir = false; static bool g_bUserDir = false;
static char g_userDir[100] = ""; static char g_userDir[100] = "";
// Gives a single user event.
EventType GetUniqueEventType()
{
int i;
i = static_cast <int> (g_uniqueEventType+1);
g_uniqueEventType = static_cast<EventType>(i);
return g_uniqueEventType;
}
// Returns a non-accented letter. // Returns a non-accented letter.
char GetNoAccent(char letter) char GetNoAccent(char letter)
{ {
/*
if ( letter < 0 ) if ( letter < 0 )
{ {
if ( letter == '<EFBFBD>' || if ( letter == '<EFBFBD>' ||
@ -125,7 +99,7 @@ char GetNoAccent(char letter)
if ( letter == '<EFBFBD>' ) return 'C'; if ( letter == '<EFBFBD>' ) return 'C';
if ( letter == '<EFBFBD>' ) return 'N'; if ( letter == '<EFBFBD>' ) return 'N';
} }*/
return letter; return letter;
} }
@ -134,7 +108,7 @@ char GetNoAccent(char letter)
char GetToUpper(char letter) char GetToUpper(char letter)
{ {
if ( letter < 0 ) /*if ( letter < 0 )
{ {
if ( letter == '<EFBFBD>' ) return '<EFBFBD>'; if ( letter == '<EFBFBD>' ) return '<EFBFBD>';
if ( letter == '<EFBFBD>' ) return '<EFBFBD>'; if ( letter == '<EFBFBD>' ) return '<EFBFBD>';
@ -166,7 +140,7 @@ char GetToUpper(char letter)
if ( letter == '<EFBFBD>' ) return '<EFBFBD>'; if ( letter == '<EFBFBD>' ) return '<EFBFBD>';
if ( letter == '<EFBFBD>' ) return '<EFBFBD>'; if ( letter == '<EFBFBD>' ) return '<EFBFBD>';
} }*/
return toupper(letter); return toupper(letter);
} }
@ -175,7 +149,7 @@ char GetToUpper(char letter)
char GetToLower(char letter) char GetToLower(char letter)
{ {
if ( letter < 0 ) /*if ( letter < 0 )
{ {
if ( letter == '<EFBFBD>' ) return '<EFBFBD>'; if ( letter == '<EFBFBD>' ) return '<EFBFBD>';
if ( letter == '<EFBFBD>' ) return '<EFBFBD>'; if ( letter == '<EFBFBD>' ) return '<EFBFBD>';
@ -207,7 +181,7 @@ char GetToLower(char letter)
if ( letter == '<EFBFBD>' ) return '<EFBFBD>'; if ( letter == '<EFBFBD>' ) return '<EFBFBD>';
if ( letter == '<EFBFBD>' ) return '<EFBFBD>'; if ( letter == '<EFBFBD>' ) return '<EFBFBD>';
} }*/
return tolower(letter); return tolower(letter);
} }
@ -224,6 +198,7 @@ void GimeToAscii(time_t time, char *buffer)
year = when.tm_year+1900; year = when.tm_year+1900;
if ( year < 2000 ) year -= 1900; if ( year < 2000 ) year -= 1900;
else year -= 2000; else year -= 2000;
/* TODO
#if _FRENCH #if _FRENCH
sprintf(buffer, "%.2d.%.2d.%.2d %.2d:%.2d", sprintf(buffer, "%.2d.%.2d.%.2d %.2d:%.2d",
when.tm_mday, when.tm_mon+1, year, when.tm_mday, when.tm_mon+1, year,
@ -234,7 +209,7 @@ void GimeToAscii(time_t time, char *buffer)
when.tm_mday, when.tm_mon+1, year, when.tm_mday, when.tm_mon+1, year,
when.tm_hour, when.tm_min); when.tm_hour, when.tm_min);
#endif #endif
#if _ENGLISH #if _ENGLISH*/
char format[10]; char format[10];
int hour; int hour;
@ -253,12 +228,12 @@ void GimeToAscii(time_t time, char *buffer)
sprintf(buffer, "%.2d.%.2d.%.2d %.2d:%.2d %s", sprintf(buffer, "%.2d.%.2d.%.2d %.2d:%.2d %s",
when.tm_mon+1, when.tm_mday, year, when.tm_mon+1, when.tm_mday, year,
hour, when.tm_min, format); hour, when.tm_min, format);
#endif /*#endif
#if _POLISH #if _POLISH
sprintf(buffer, "%.2d.%.2d.%.2d %.2d:%.2d", sprintf(buffer, "%.2d.%.2d.%.2d %.2d:%.2d",
when.tm_mday, when.tm_mon+1, year, when.tm_mday, when.tm_mon+1, year,
when.tm_hour, when.tm_min); when.tm_hour, when.tm_min);
#endif #endif*/
} }
@ -313,7 +288,9 @@ bool CopyFileToTemp(char* filename)
UserDir(dst, filename, "textures"); UserDir(dst, filename, "textures");
strcpy(g_userDir, save); strcpy(g_userDir, save);
// _mkdir("temp"); TODO //_mkdir("temp");
system("mkdir temp");
if ( !Xfer(src, dst) ) return false; if ( !Xfer(src, dst) ) return false;
strcpy(filename, dst); strcpy(filename, dst);
@ -384,7 +361,7 @@ void UserDir(bool bUser, char* dir)
void UserDir(char* buffer, const char* dir, const char* def) void UserDir(char* buffer, const char* dir, const char* def)
{ {
char ddir[100]; char ddir[100];
char* add; const char* add;
if ( strstr(dir, "\\") == 0 && def[0] != 0 ) if ( strstr(dir, "\\") == 0 && def[0] != 0 )
{ {
@ -420,24 +397,3 @@ void UserDir(char* buffer, const char* dir, const char* def)
} }
*buffer = 0; *buffer = 0;
} }
// Returns the letter corresponding to the language.
char RetLanguageLetter()
{
#if _FRENCH
return 'F';
#endif
#if _ENGLISH
return 'E';
#endif
#if _GERMAN | _WG
return 'D';
#endif
#if _POLISH
return 'P';
#endif
return 'X';
}

View File

@ -22,55 +22,7 @@
#include <time.h> #include <time.h>
#include "common/metafile.h" // TODO: to be removed (replaced by TrackedKey enum and mouse states in app.h)
#include "common/event.h"
#include "common/error_ids.h"
extern CMetaFile g_metafile;
// Existing classes.
enum ClassType
{
CLASS_EVENT = 1,
CLASS_INTERFACE = 2,
CLASS_MAIN = 3,
CLASS_ENGINE = 4,
CLASS_TERRAIN = 5,
CLASS_OBJECT = 6,
CLASS_PHYSICS = 7,
CLASS_BRAIN = 8,
CLASS_CAMERA = 9,
CLASS_LIGHT = 10,
CLASS_PARTICULE = 11,
CLASS_AUTO = 12,
CLASS_DISPLAYTEXT = 13,
CLASS_PYRO = 14,
CLASS_SCRIPT = 15,
CLASS_TEXT = 16,
CLASS_STUDIO = 17,
CLASS_WATER = 18,
CLASS_CLOUD = 19,
CLASS_MOTION = 20,
CLASS_SOUND = 21,
CLASS_PLANET = 22,
CLASS_TASKMANAGER = 23,
CLASS_DIALOG = 24,
CLASS_MAP = 25,
CLASS_SHORT = 26,
CLASS_BLITZ = 27,
};
const int CLASS_MAX = 30;
// Keyboard state.
const int KS_PAGEUP = (1<<4); const int KS_PAGEUP = (1<<4);
const int KS_PAGEDOWN = (1<<5); const int KS_PAGEDOWN = (1<<5);
const int KS_SHIFT = (1<<6); const int KS_SHIFT = (1<<6);
@ -84,10 +36,7 @@ const int KS_NUMRIGHT = (1<<13);
const int KS_NUMPLUS = (1<<14); const int KS_NUMPLUS = (1<<14);
const int KS_NUMMINUS = (1<<15); const int KS_NUMMINUS = (1<<15);
// TODO: rewrite/refactor or remove
// Procedures.
extern EventType GetUniqueEventType();
extern char GetNoAccent(char letter); extern char GetNoAccent(char letter);
extern char GetToUpper(char letter); extern char GetToUpper(char letter);
@ -100,7 +49,3 @@ extern bool CopyFileListToTemp(char* filename, int* list, int total);
extern void AddExt(char* filename, char* ext); extern void AddExt(char* filename, char* ext);
extern void UserDir(bool bUser, char* dir); extern void UserDir(bool bUser, char* dir);
extern void UserDir(char* buffer, const char* dir, const char* def); extern void UserDir(char* buffer, const char* dir, const char* def);
extern char GetLanguageLetter();

View File

@ -17,7 +17,10 @@
// profile.cpp // profile.cpp
#include <common/profile.h> #include "common/profile.h"
#include <utility>
#include <cstring>
template<> CProfile* CSingleton<CProfile>::mInstance = nullptr; template<> CProfile* CSingleton<CProfile>::mInstance = nullptr;

View File

@ -14,22 +14,19 @@
// * You should have received a copy of the GNU General Public License // * You should have received a copy of the GNU General Public License
// * along with this program. If not, see http://www.gnu.org/licenses/. // * along with this program. If not, see http://www.gnu.org/licenses/.
// profile.h /**
* \file common/profile.h
* \brief Class for loading profile (currently for loading ini config file)
*/
#pragma once #pragma once
#include <cstdlib> #include "lib/simpleini/SimpleIni.h"
#include "common/singleton.h"
#include <string>
#include <vector> #include <vector>
#include <utility>
#include <lib/simpleini/SimpleIni.h>
#include <common/singleton.h>
/**
* @file common/profile.h
* @brief Class for loading profile (currently for loading ini config file)
*/
/** /**

File diff suppressed because it is too large Load Diff

View File

@ -14,147 +14,46 @@
// * You should have received a copy of the GNU General Public License // * You should have received a copy of the GNU General Public License
// * along with this program. If not, see http://www.gnu.org/licenses/. // * along with this program. If not, see http://www.gnu.org/licenses/.
// restext.h /**
* \file common/restext.h
* \brief Translation and string resource utilities
*/
#pragma once #pragma once
//#include "graphics/engine/engine.h" #include "common/global.h"
#include "common/event.h" #include "common/restext_ids.h"
namespace Gfx
{
class CEngine;
}
/**
* \enum ResType
// Possible types of the text resources. * \brief Types of text resources
*/
enum ResType enum ResType
{ {
RES_TEXT = 0, // RT_* RES_TEXT = 0, //! < RT_*
RES_EVENT = 1, // EVENT_* (EventType) RES_EVENT = 1, //! < EVENT_* (EventMsg)
RES_OBJECT = 2, // OBJECT_* (ObjectType) RES_OBJECT = 2, //! < OBJECT_* (ObjectType)
RES_ERR = 3, // ERR_* (Error) RES_ERR = 3, //! < ERR_* (Error)
RES_KEY = 4, // VK_* (keys) RES_KEY = 4, //! < KEY() (keys)
RES_CBOT = 5, // TX_* (cbot.dll) RES_CBOT = 5, //! < TX_* (CBot)
}; };
// Resources of type RES_TEXT. // TODO: move to CRobotMain
enum ResTextType
{
RT_VERSION_ID = 1,
RT_DISINFO_TITLE = 2,
RT_WINDOW_MAXIMIZED = 3,
RT_WINDOW_MINIMIZED = 4,
RT_WINDOW_STANDARD = 5,
RT_WINDOW_CLOSE = 6,
RT_STUDIO_TITLE = 10,
RT_SCRIPT_NEW = 20,
RT_NAME_DEFAULT = 21,
RT_IO_NEW = 22,
RT_KEY_OR = 23,
RT_TITLE_BASE = 40,
RT_TITLE_INIT = 41,
RT_TITLE_TRAINER = 42,
RT_TITLE_DEFI = 43,
RT_TITLE_MISSION = 44,
RT_TITLE_FREE = 45,
RT_TITLE_PROTO = 46,
RT_TITLE_SETUP = 47,
RT_TITLE_NAME = 48,
RT_TITLE_PERSO = 49,
RT_TITLE_WRITE = 50,
RT_TITLE_READ = 51,
RT_TITLE_USER = 52,
RT_TITLE_TEEN = 53,
RT_PLAY_CHAPt = 60,
RT_PLAY_CHAPd = 61,
RT_PLAY_CHAPm = 62,
RT_PLAY_CHAPf = 63,
RT_PLAY_CHAPp = 64,
RT_PLAY_LISTt = 65,
RT_PLAY_LISTd = 66,
RT_PLAY_LISTm = 67,
RT_PLAY_LISTf = 68,
RT_PLAY_LISTp = 69,
RT_PLAY_RESUME = 70,
RT_PLAY_CHAPu = 71,
RT_PLAY_LISTu = 72,
RT_PLAY_CHAPte = 73,
RT_PLAY_LISTk = 74,
RT_SETUP_DEVICE = 80,
RT_SETUP_MODE = 81,
RT_SETUP_KEY1 = 82,
RT_SETUP_KEY2 = 83,
RT_PERSO_FACE = 90,
RT_PERSO_GLASSES = 91,
RT_PERSO_HAIR = 92,
RT_PERSO_COMBI = 93,
RT_PERSO_BAND = 94,
RT_DIALOG_TITLE = 100,
RT_DIALOG_ABORT = 101,
RT_DIALOG_QUIT = 102,
RT_DIALOG_YES = 103,
RT_DIALOG_NO = 104,
RT_DIALOG_DELOBJ = 105,
RT_DIALOG_DELGAME = 106,
RT_DIALOG_YESDEL = 107,
RT_DIALOG_NODEL = 108,
RT_DIALOG_LOADING = 109,
RT_DIALOG_YESQUIT = 110,
RT_DIALOG_NOQUIT = 111,
RT_STUDIO_LISTTT = 120,
RT_STUDIO_COMPOK = 121,
RT_STUDIO_PROGSTOP = 122,
RT_SATCOM_LIST = 140,
RT_SATCOM_BOT = 141,
RT_SATCOM_BUILDING = 142,
RT_SATCOM_FRET = 143,
RT_SATCOM_ALIEN = 144,
RT_SATCOM_NULL = 145,
RT_SATCOM_ERROR1 = 146,
RT_SATCOM_ERROR2 = 147,
RT_IO_OPEN = 150,
RT_IO_SAVE = 151,
RT_IO_LIST = 152,
RT_IO_NAME = 153,
RT_IO_DIR = 154,
RT_IO_PRIVATE = 155,
RT_IO_PUBLIC = 156,
RT_GENERIC_DEV1 = 170,
RT_GENERIC_DEV2 = 171,
RT_GENERIC_EDIT1 = 172,
RT_GENERIC_EDIT2 = 173,
RT_INTERFACE_REC = 180,
RT_MESSAGE_WIN = 200,
RT_MESSAGE_LOST = 201,
};
static Gfx::CEngine* g_engine = 0;
static char g_gamerName[100];
extern void SetEngine(Gfx::CEngine *engine);
extern void SetGlobalGamerName(char *name); extern void SetGlobalGamerName(char *name);
extern bool SearchKey(char *cmd, KeyRank &key); extern bool SearchKey(char *cmd, KeyRank &key);
extern void PutKeyName(char* dst, char* src);
extern bool GetResource(ResType type, int num, char* text); extern bool GetResource(ResType type, int num, char* text);
extern bool GetResourceBase(ResType type, int num, char* text);
extern const char * const strings_text[];
extern const char * const strings_event[];
extern const char * const strings_object[];
extern const char * const strings_err[];
extern const char * const strings_cbot[];
extern const int strings_text_len;
extern const int strings_event_len;
extern const int strings_object_len;
extern const int strings_err_len;
extern const int strings_cbot_len;

View File

@ -14,6 +14,9 @@
// * You should have received a copy of the GNU General Public License // * You should have received a copy of the GNU General Public License
// * along with this program. If not, see http://www.gnu.org/licenses/. // * along with this program. If not, see http://www.gnu.org/licenses/.
// TODO: move to restext.h after restext rewrite
#pragma once #pragma once
enum ResTextType enum ResTextType

View File

@ -22,36 +22,8 @@
const char * const strings_text[] = const char * const strings_text[] =
{ {
#if _FULL [RT_VERSION_ID] = "Colobot Gold",
[RT_VERSION_ID] = "1.18 /e",
#endif
#if _NET
[RT_VERSION_ID] = "CeeBot-A 1.18",
#endif
#if _SCHOOL & _EDU
#if _TEEN
[RT_VERSION_ID] = "CeeBot-Teen EDU 1.18",
#else
[RT_VERSION_ID] = "CeeBot-A EDU 1.18",
#endif
#endif
#if _SCHOOL & _PERSO
#if _TEEN
[RT_VERSION_ID] = "CeeBot-Teen PERSO 1.18",
#else
[RT_VERSION_ID] = "CeeBot-A PERSO 1.18",
#endif
#endif
#if _SCHOOL & _CEEBOTDEMO
#if _TEEN
[RT_VERSION_ID] = "CeeBot-Teen DEMO 1.18",
#else
[RT_VERSION_ID] = "CeeBot-A DEMO 1.18",
#endif
#endif
#if _DEMO
[RT_VERSION_ID] = "Demo 1.18 /e",
#endif
[RT_DISINFO_TITLE] = "SatCom", [RT_DISINFO_TITLE] = "SatCom",
[RT_WINDOW_MAXIMIZED] = "Maximize", [RT_WINDOW_MAXIMIZED] = "Maximize",
[RT_WINDOW_MINIMIZED] = "Minimize", [RT_WINDOW_MINIMIZED] = "Minimize",
@ -64,13 +36,8 @@ const char * const strings_text[] =
[RT_IO_NEW] = "New ...", [RT_IO_NEW] = "New ...",
[RT_KEY_OR] = " or ", [RT_KEY_OR] = " or ",
#if _NEWLOOK
[RT_TITLE_BASE] = "CeeBot",
[RT_TITLE_INIT] = "CeeBot",
#else
[RT_TITLE_BASE] = "COLOBOT", [RT_TITLE_BASE] = "COLOBOT",
[RT_TITLE_INIT] = "COLOBOT", [RT_TITLE_INIT] = "COLOBOT",
#endif
[RT_TITLE_TRAINER] = "Programming exercises", [RT_TITLE_TRAINER] = "Programming exercises",
[RT_TITLE_DEFI] = "Challenges", [RT_TITLE_DEFI] = "Challenges",
[RT_TITLE_MISSION] = "Missions", [RT_TITLE_MISSION] = "Missions",
@ -111,15 +78,9 @@ const char * const strings_text[] =
[RT_PERSO_COMBI] = "Suit color:", [RT_PERSO_COMBI] = "Suit color:",
[RT_PERSO_BAND] = "Strip color:", [RT_PERSO_BAND] = "Strip color:",
#if _NEWLOOK
[RT_DIALOG_QUIT] = "Do you want to quit CeeBot ?",
[RT_DIALOG_TITLE] = "CeeBot",
[RT_DIALOG_YESQUIT] = "Quit\\Quit CeeBot",
#else
[RT_DIALOG_QUIT] = "Do you want to quit COLOBOT ?", [RT_DIALOG_QUIT] = "Do you want to quit COLOBOT ?",
[RT_DIALOG_TITLE] = "COLOBOT", [RT_DIALOG_TITLE] = "COLOBOT",
[RT_DIALOG_YESQUIT] = "Quit\\Quit COLOBOT", [RT_DIALOG_YESQUIT] = "Quit\\Quit COLOBOT",
#endif
[RT_DIALOG_ABORT] = "Quit the mission?", [RT_DIALOG_ABORT] = "Quit the mission?",
[RT_DIALOG_YES] = "Abort\\Abort the current mission", [RT_DIALOG_YES] = "Abort\\Abort the current mission",
[RT_DIALOG_NO] = "Continue\\Continue the current mission", [RT_DIALOG_NO] = "Continue\\Continue the current mission",
@ -182,13 +143,8 @@ const char * const strings_event[] =
[EVENT_INTERFACE_AGAIN] = "Restart\\Restart the mission from the beginning", [EVENT_INTERFACE_AGAIN] = "Restart\\Restart the mission from the beginning",
[EVENT_INTERFACE_WRITE] = "Save\\Save the current mission ", [EVENT_INTERFACE_WRITE] = "Save\\Save the current mission ",
[EVENT_INTERFACE_READ] = "Load\\Load a saved mission", [EVENT_INTERFACE_READ] = "Load\\Load a saved mission",
#if _NEWLOOK
[EVENT_INTERFACE_ABORT] = "\\Return to CeeBot",
[EVENT_INTERFACE_QUIT] = "Quit\\Quit CeeBot",
#else
[EVENT_INTERFACE_ABORT] = "\\Return to COLOBOT", [EVENT_INTERFACE_ABORT] = "\\Return to COLOBOT",
[EVENT_INTERFACE_QUIT] = "Quit\\Quit COLOBOT", [EVENT_INTERFACE_QUIT] = "Quit\\Quit COLOBOT",
#endif
[EVENT_INTERFACE_BACK] = "<< Back \\Back to the previous screen", [EVENT_INTERFACE_BACK] = "<< Back \\Back to the previous screen",
[EVENT_INTERFACE_PLAY] = "Play\\Start mission!", [EVENT_INTERFACE_PLAY] = "Play\\Start mission!",
[EVENT_INTERFACE_SETUPd] = "Device\\Driver and resolution settings", [EVENT_INTERFACE_SETUPd] = "Device\\Driver and resolution settings",
@ -432,11 +388,7 @@ const char * const strings_event[] =
[EVENT_HYPER_SIZE4] = "Size 4", [EVENT_HYPER_SIZE4] = "Size 4",
[EVENT_HYPER_SIZE5] = "Size 5", [EVENT_HYPER_SIZE5] = "Size 5",
[EVENT_SATCOM_HUSTON] = "Instructions from Houston", [EVENT_SATCOM_HUSTON] = "Instructions from Houston",
#if _TEEN
[EVENT_SATCOM_SAT] = "Dictionnary",
#else
[EVENT_SATCOM_SAT] = "Satellite report", [EVENT_SATCOM_SAT] = "Satellite report",
#endif
[EVENT_SATCOM_LOADING] = "Programs dispatched by Houston", [EVENT_SATCOM_LOADING] = "Programs dispatched by Houston",
[EVENT_SATCOM_OBJECT] = "List of objects", [EVENT_SATCOM_OBJECT] = "List of objects",
[EVENT_SATCOM_PROG] = "Programming help", [EVENT_SATCOM_PROG] = "Programming help",
@ -475,11 +427,7 @@ const char * const strings_object[] =
[OBJECT_RESEARCH] = "Research center", [OBJECT_RESEARCH] = "Research center",
[OBJECT_RADAR] = "Radar station", [OBJECT_RADAR] = "Radar station",
[OBJECT_INFO] = "Information exchange post", [OBJECT_INFO] = "Information exchange post",
#if _TEEN
[OBJECT_ENERGY] = "Disintegrator",
#else
[OBJECT_ENERGY] = "Power cell factory", [OBJECT_ENERGY] = "Power cell factory",
#endif
[OBJECT_LABO] = "Autolab", [OBJECT_LABO] = "Autolab",
[OBJECT_NUCLEAR] = "Nuclear power station", [OBJECT_NUCLEAR] = "Nuclear power station",
[OBJECT_PARA] = "Lightning conductor", [OBJECT_PARA] = "Lightning conductor",
@ -574,13 +522,6 @@ const char * const strings_object[] =
const char * const strings_err[] = const char * const strings_err[] =
{ {
[ERR_CMD] = "Unknown command", [ERR_CMD] = "Unknown command",
#if _NEWLOOK
[ERR_INSTALL] = "CeeBot not installed.",
[ERR_NOCD] = "Please insert the CeeBot CD\nand re-run the game.",
#else
[ERR_INSTALL] = "COLOBOT not installed.",
[ERR_NOCD] = "Please insert the COLOBOT CD\nand re-run the game.",
#endif
[ERR_MANIP_VEH] = "Inappropriate bot", [ERR_MANIP_VEH] = "Inappropriate bot",
[ERR_MANIP_FLY] = "Impossible when flying", [ERR_MANIP_FLY] = "Impossible when flying",
[ERR_MANIP_BUSY] = "Already carrying something", [ERR_MANIP_BUSY] = "Already carrying something",

View File

@ -14,7 +14,10 @@
// * You should have received a copy of the GNU General Public License // * You should have received a copy of the GNU General Public License
// * along with this program. If not, see http://www.gnu.org/licenses/. // * along with this program. If not, see http://www.gnu.org/licenses/.
// singleton.h /**
* \file common/singleton.h
* \brief CSingleton base class for singletons
*/
#pragma once #pragma once

View File

@ -14,7 +14,10 @@
// * You should have received a copy of the GNU General Public License // * You should have received a copy of the GNU General Public License
// * along with this program. If not, see http://www.gnu.org/licenses/. // * along with this program. If not, see http://www.gnu.org/licenses/.
// stringutils.h /**
* \file common/stringutils.h
* \brief Some useful string operations
*/
#pragma once #pragma once

View File

@ -1,54 +0,0 @@
// * This file is part of the COLOBOT source code
// * Copyright (C) 2001-2008, Daniel ROUX & EPSITEC SA, www.epsitec.ch
// *
// * This program is free software: you can redistribute it and/or modify
// * it under the terms of the GNU General Public License as published by
// * the Free Software Foundation, either version 3 of the License, or
// * (at your option) any later version.
// *
// * This program is distributed in the hope that it will be useful,
// * but WITHOUT ANY WARRANTY; without even the implied warranty of
// * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// * GNU General Public License for more details.
// *
// * You should have received a copy of the GNU General Public License
// * along with this program. If not, see http://www.gnu.org/licenses/.
// struct.h
#pragma once
#include <math/vector.h>
#define D3DFVF_VERTEX2 (D3DFVF_XYZ|D3DFVF_NORMAL|D3DFVF_TEX2)
struct D3DVERTEX2
{
float x,y,z;
float nx,ny,nz;
float tu, tv;
float tu2, tv2;
D3DVERTEX2() { }
D3DVERTEX2(const Math::Vector& _v, const Math::Vector& _n, float _tu=0.0f, float _tv=0.0f, float _tu2=0.0f, float _tv2=0.0f)
{
x = _v.x;
y = _v.y;
z = _v.z;
nx = _n.x;
ny = _n.y;
nz = _n.z;
tu = _tu;
tv = _tv;
tu2 = _tu2;
tv2 = _tv2;
}
};
struct ColorHSV
{
float h,s,v;
};

View File

@ -7,6 +7,8 @@ include_directories("../../")
include_directories("../../../") include_directories("../../../")
add_executable(image_test ../image.cpp image_test.cpp) add_executable(image_test ../image.cpp image_test.cpp)
target_link_libraries(image_test -lpng -lSDL -lSDL_image)
add_executable(profile_test ../profile.cpp profile_test.cpp) add_executable(profile_test ../profile.cpp profile_test.cpp)
add_test(profile_test ./profile_test) add_test(profile_test ./profile_test)

View File

@ -22,6 +22,29 @@ int main(int argc, char *argv[])
printf("Error loading '%s': %s\n", err.c_str()); printf("Error loading '%s': %s\n", err.c_str());
return 1; return 1;
} }
Gfx::Color color;
std::string str;
color = image.GetPixel(Math::IntPoint(0, 0));
str = color.ToString();
printf("pixel @ (0,0): %s\n", str.c_str());
color = image.GetPixel(Math::IntPoint(0, 1));
str = color.ToString();
printf("pixel @ (0,1): %s\n", str.c_str());
color = image.GetPixel(Math::IntPoint(1, 0));
str = color.ToString();
printf("pixel @ (1,0): %s\n", str.c_str());
color = image.GetPixel(Math::IntPoint(1, 1));
str = color.ToString();
printf("pixel @ (1,1): %s\n", str.c_str());
image.SetPixel(Math::IntPoint(0, 0), Gfx::Color(0.1f, 0.2f, 0.3f, 0.0f));
image.SetPixel(Math::IntPoint(1, 0), Gfx::Color(0.3f, 0.2f, 0.1f, 1.0f));
image.SetPixel(Math::IntPoint(0, 1), Gfx::Color(1.0f, 1.0f, 1.0f, 1.0f));
image.SetPixel(Math::IntPoint(1, 1), Gfx::Color(0.0f, 0.0f, 0.0f, 1.0f));
if (! image.SavePNG(argv[2])) if (! image.SavePNG(argv[2]))
{ {

View File

@ -357,22 +357,22 @@ bool Gfx::CEngine::ProcessEvent(const Event &event)
} }
} }
} }
else if (event.type == EVENT_FRAME)
{
m_highlightTime += event.rTime;
}
// By default, pass on all events // By default, pass on all events
return true; return true;
} }
void Gfx::CEngine::FrameMove(float rTime) void Gfx::CEngine::FrameUpdate()
{ {
float rTime = m_app->GetRelTime();
m_lightMan->UpdateProgression(rTime); m_lightMan->UpdateProgression(rTime);
m_particle->FrameParticle(rTime); m_particle->FrameParticle(rTime);
ComputeDistance(); ComputeDistance();
UpdateGeometry(); UpdateGeometry();
m_highlightTime = m_app->GetAbsTime();
if (m_groundMark.draw) if (m_groundMark.draw)
{ {
if (m_groundMark.phase == Gfx::ENG_GR_MARK_PHASE_INC) // growing? if (m_groundMark.phase == Gfx::ENG_GR_MARK_PHASE_INC) // growing?
@ -402,16 +402,6 @@ void Gfx::CEngine::FrameMove(float rTime)
} }
} }
} }
if (m_sound == nullptr)
m_sound = static_cast<CSoundInterface*>( m_iMan->SearchInstance(CLASS_SOUND) );
m_sound->FrameMove(rTime);
}
void Gfx::CEngine::StepSimulation(float rTime)
{
m_app->StepSimulation(rTime);
} }
bool Gfx::CEngine::WriteScreenShot(const std::string& fileName, int width, int height) bool Gfx::CEngine::WriteScreenShot(const std::string& fileName, int width, int height)
@ -2726,16 +2716,6 @@ int Gfx::CEngine::GetEditIndentValue()
return m_editIndentValue; return m_editIndentValue;
} }
void Gfx::CEngine::SetSpeed(float speed)
{
m_speed = speed;
}
float Gfx::CEngine::GetSpeed()
{
return m_speed;
}
void Gfx::CEngine::SetTracePrecision(float factor) void Gfx::CEngine::SetTracePrecision(float factor)
{ {
m_tracePrecision = factor; m_tracePrecision = factor;

View File

@ -664,9 +664,7 @@ public:
bool ProcessEvent(const Event& event); bool ProcessEvent(const Event& event);
//! Called once per frame, the call is the entry point for animating the scene //! Called once per frame, the call is the entry point for animating the scene
void FrameMove(float rTime); void FrameUpdate();
//! Evolved throughout the game
void StepSimulation(float rTime);
//! Writes a screenshot containing the current frame //! Writes a screenshot containing the current frame
@ -1098,11 +1096,6 @@ public:
int GetEditIndentValue(); int GetEditIndentValue();
//@} //@}
//@{
//! Management of game speed
void SetSpeed(float speed);
float GetSpeed();
//@{ //@{
//! Management of precision of robot tracks //! Management of precision of robot tracks
void SetTracePrecision(float factor); void SetTracePrecision(float factor);

View File

@ -22,7 +22,7 @@
#pragma once #pragma once
#include "common/misc.h" #include "common/event.h"
#include "math/vector.h" #include "math/vector.h"

View File

@ -22,7 +22,8 @@
#pragma once #pragma once
#include "common/misc.h" #include "common/event.h"
#include "common/global.h"
#include "graphics/engine/engine.h" #include "graphics/engine/engine.h"
#include "object/object.h" #include "object/object.h"

View File

@ -27,5 +27,3 @@
#include "vector.h" #include "vector.h"
#include "matrix.h" #include "matrix.h"
#include "geometry.h" #include "geometry.h"
#include "conv.h"

View File

@ -51,4 +51,3 @@ const float RAD_TO_DEG = 57.29577951308232286465f;
const float LOG_2 = log(2.0f); const float LOG_2 = log(2.0f);
}; // namespace Math }; // namespace Math

View File

@ -1,39 +0,0 @@
/* math/conv.h
Temporary conversion functions for D3DVECTOR and D3DMATRIX */
#pragma once
#include <d3d.h>
#include "vector.h"
#include "matrix.h"
inline D3DVECTOR VEC_TO_D3DVEC(Math::Vector vec)
{
return D3DVECTOR(vec.x, vec.y, vec.z);
}
inline Math::Vector D3DVEC_TO_VEC(D3DVECTOR vec)
{
return Math::Vector(vec.x, vec.y, vec.z);
}
inline D3DMATRIX MAT_TO_D3DMAT(Math::Matrix mat)
{
D3DMATRIX result;
mat.Transpose();
for (int r = 0; r < 4; ++r)
{
for (int c = 0; c < 16; ++c)
result.m[r][c] = mat.m[4*c+r];
}
return result;
}
inline Math::Matrix D3DMAT_TO_MAT(D3DMATRIX mat)
{
Math::Matrix result(mat.m);
result.Transpose();
return result;
}

View File

@ -76,9 +76,11 @@ inline bool IsInsideTriangle(Math::Point a, Math::Point b, Math::Point c, Math::
} }
//! Rotates a point around a center //! Rotates a point around a center
/** \a center center of rotation /**
\a angle angle is in radians (positive is counterclockwise (CCW) ) * \param center center of rotation
\a p the point */ * \param angle angle [radians] (positive is CCW)
* \param p the point to be rotated
*/
inline Math::Point RotatePoint(const Math::Point &center, float angle, const Math::Point &p) inline Math::Point RotatePoint(const Math::Point &center, float angle, const Math::Point &p)
{ {
Math::Point a; Math::Point a;
@ -96,8 +98,10 @@ inline Math::Point RotatePoint(const Math::Point &center, float angle, const Mat
} }
//! Rotates a point around the origin (0,0) //! Rotates a point around the origin (0,0)
/** \a angle angle in radians (positive is counterclockwise (CCW) ) /**
\a p the point */ * \param angle angle [radians] (positive is CCW)
* \param p the point to be rotated
*/
inline Math::Point RotatePoint(float angle, const Math::Point &p) inline Math::Point RotatePoint(float angle, const Math::Point &p)
{ {
float x = p.x*cosf(angle) - p.y*sinf(angle); float x = p.x*cosf(angle) - p.y*sinf(angle);
@ -106,9 +110,11 @@ inline Math::Point RotatePoint(float angle, const Math::Point &p)
return Math::Point(x, y); return Math::Point(x, y);
} }
//! Rotates a vector (dist, 0). //! Rotates a vector (dist, 0)
/** \a angle angle is in radians (positive is counterclockwise (CCW) ) /**
\a dist distance to origin */ * \param angle angle [radians] (positive is CCW)
* \param dist distance to origin
*/
inline Math::Point RotatePoint(float angle, float dist) inline Math::Point RotatePoint(float angle, float dist)
{ {
float x = dist*cosf(angle); float x = dist*cosf(angle);
@ -117,7 +123,12 @@ inline Math::Point RotatePoint(float angle, float dist)
return Math::Point(x, y); return Math::Point(x, y);
} }
//! TODO documentation //! Rotates a point around a center on 2D plane
/**
* \param cx,cy center of rotation
* \param angle angle of rotation [radians] (positive is CCW)
* \param px,py point coordinates to rotate
*/
inline void RotatePoint(float cx, float cy, float angle, float &px, float &py) inline void RotatePoint(float cx, float cy, float angle, float &px, float &py)
{ {
float ax, ay; float ax, ay;
@ -132,11 +143,14 @@ inline void RotatePoint(float cx, float cy, float angle, float &px, float &py)
py = cy+ay; py = cy+ay;
} }
//! Rotates a point around a center in space. //! Rotates a point around a center in space
/** \a center center of rotation /**
\a angleH,angleV rotation angles in radians (positive is counterclockwise (CCW) ) ) * \a angleH is rotation along Y axis (heading) while \a angleV is rotation along X axis (TODO: ?).
\a p the point *
\returns the rotated point */ * \param center center of rotation
* \param angleH,angleV rotation angles [radians] (positive is CCW)
* \param p the point to be rotated
*/
inline void RotatePoint(const Math::Vector &center, float angleH, float angleV, Math::Vector &p) inline void RotatePoint(const Math::Vector &center, float angleH, float angleV, Math::Vector &p)
{ {
p.x -= center.x; p.x -= center.x;
@ -151,11 +165,14 @@ inline void RotatePoint(const Math::Vector &center, float angleH, float angleV,
p = center + b; p = center + b;
} }
//! Rotates a point around a center in space. //! Rotates a point around a center in space
/** \a center center of rotation /**
\a angleH,angleV rotation angles in radians (positive is counterclockwise (CCW) ) ) * The rotation is performed first along Y axis (\a angleH) and then along X axis (\a angleV).
\a p the point *
\returns the rotated point */ * \param center center of rotation
* \param angleH,angleV rotation angles [radians] (positive is CCW)
* \param p the point to be rotated
*/
inline void RotatePoint2(const Math::Vector center, float angleH, float angleV, Math::Vector &p) inline void RotatePoint2(const Math::Vector center, float angleH, float angleV, Math::Vector &p)
{ {
p.x -= center.x; p.x -= center.x;
@ -189,10 +206,12 @@ inline float RotateAngle(float x, float y)
return -atan + 0.5f*PI; return -atan + 0.5f*PI;
} }
//! Calculates the angle between two points and one center //! Calculates the angle between two points and a center
/** \a center the center point /**
\a p1,p2 the two points * \param center the center point
\returns The angle in radians (positive is counterclockwise (CCW) ) */ * \param p1,p2 the two points
* \returns the angle [radians] (positive is CCW)
*/
inline float RotateAngle(const Math::Point &center, const Math::Point &p1, const Math::Point &p2) inline float RotateAngle(const Math::Point &center, const Math::Point &p1, const Math::Point &p2)
{ {
if (PointsEqual(p1, center)) if (PointsEqual(p1, center))
@ -215,9 +234,11 @@ inline float RotateAngle(const Math::Point &center, const Math::Point &p1, const
} }
//! Loads view matrix from the given vectors //! Loads view matrix from the given vectors
/** \a from origin /**
\a at view direction * \param from origin
\a worldUp up vector */ * \param at view direction
* \param worldUp up vector
*/
inline void LoadViewMatrix(Math::Matrix &mat, const Math::Vector &from, inline void LoadViewMatrix(Math::Matrix &mat, const Math::Vector &from,
const Math::Vector &at, const Math::Vector &worldUp) const Math::Vector &at, const Math::Vector &worldUp)
{ {
@ -280,10 +301,12 @@ inline void LoadViewMatrix(Math::Matrix &mat, const Math::Vector &from,
} }
//! Loads a perspective projection matrix //! Loads a perspective projection matrix
/** \a fov field of view in radians /**
\a aspect aspect ratio (width / height) * \param fov field of view in radians
\a nearPlane distance to near cut plane * \param aspect aspect ratio (width / height)
\a farPlane distance to far cut plane */ * \param nearPlane distance to near cut plane
* \param farPlane distance to far cut plane
*/
inline void LoadProjectionMatrix(Math::Matrix &mat, float fov = Math::PI / 2.0f, float aspect = 1.0f, inline void LoadProjectionMatrix(Math::Matrix &mat, float fov = Math::PI / 2.0f, float aspect = 1.0f,
float nearPlane = 1.0f, float farPlane = 1000.0f) float nearPlane = 1.0f, float farPlane = 1000.0f)
{ {
@ -302,9 +325,11 @@ inline void LoadProjectionMatrix(Math::Matrix &mat, float fov = Math::PI / 2.0f,
} }
//! Loads an othogonal projection matrix //! Loads an othogonal projection matrix
/** \a left,right coordinates for left and right vertical clipping planes /**
\a bottom,top coordinates for bottom and top horizontal clipping planes * \param left,right coordinates for left and right vertical clipping planes
\a zNear,zFar distance to nearer and farther depth clipping planes */ * \param bottom,top coordinates for bottom and top horizontal clipping planes
* \param zNear,zFar distance to nearer and farther depth clipping planes
*/
inline void LoadOrthoProjectionMatrix(Math::Matrix &mat, float left, float right, float bottom, float top, inline void LoadOrthoProjectionMatrix(Math::Matrix &mat, float left, float right, float bottom, float top,
float zNear = -1.0f, float zFar = 1.0f) float zNear = -1.0f, float zFar = 1.0f)
{ {
@ -320,7 +345,10 @@ inline void LoadOrthoProjectionMatrix(Math::Matrix &mat, float left, float right
} }
//! Loads a translation matrix from given vector //! Loads a translation matrix from given vector
/** \a trans vector of translation*/ /**
* \param mat result matrix
* \param trans vector of translation
*/
inline void LoadTranslationMatrix(Math::Matrix &mat, const Math::Vector &trans) inline void LoadTranslationMatrix(Math::Matrix &mat, const Math::Vector &trans)
{ {
mat.LoadIdentity(); mat.LoadIdentity();
@ -330,7 +358,10 @@ inline void LoadTranslationMatrix(Math::Matrix &mat, const Math::Vector &trans)
} }
//! Loads a scaling matrix fom given vector //! Loads a scaling matrix fom given vector
/** \a scale vector with scaling factors for X, Y, Z */ /**
* \param mat result matrix
* \param scale vector with scaling factors for X, Y, Z
*/
inline void LoadScaleMatrix(Math::Matrix &mat, const Math::Vector &scale) inline void LoadScaleMatrix(Math::Matrix &mat, const Math::Vector &scale)
{ {
mat.LoadIdentity(); mat.LoadIdentity();
@ -340,7 +371,10 @@ inline void LoadScaleMatrix(Math::Matrix &mat, const Math::Vector &scale)
} }
//! Loads a rotation matrix along the X axis //! Loads a rotation matrix along the X axis
/** \a angle angle in radians */ /**
* \param mat result matrix
* \param angle angle [radians]
*/
inline void LoadRotationXMatrix(Math::Matrix &mat, float angle) inline void LoadRotationXMatrix(Math::Matrix &mat, float angle)
{ {
mat.LoadIdentity(); mat.LoadIdentity();
@ -351,7 +385,10 @@ inline void LoadRotationXMatrix(Math::Matrix &mat, float angle)
} }
//! Loads a rotation matrix along the Y axis //! Loads a rotation matrix along the Y axis
/** \a angle angle in radians */ /**
* \param mat result matrix
* \param angle angle [radians]
*/
inline void LoadRotationYMatrix(Math::Matrix &mat, float angle) inline void LoadRotationYMatrix(Math::Matrix &mat, float angle)
{ {
mat.LoadIdentity(); mat.LoadIdentity();
@ -362,7 +399,10 @@ inline void LoadRotationYMatrix(Math::Matrix &mat, float angle)
} }
//! Loads a rotation matrix along the Z axis //! Loads a rotation matrix along the Z axis
/** \a angle angle in radians */ /**
* \param mat result matrix
* \param angle angle [radians]
*/
inline void LoadRotationZMatrix(Math::Matrix &mat, float angle) inline void LoadRotationZMatrix(Math::Matrix &mat, float angle)
{ {
mat.LoadIdentity(); mat.LoadIdentity();
@ -373,8 +413,11 @@ inline void LoadRotationZMatrix(Math::Matrix &mat, float angle)
} }
//! Loads a rotation matrix along the given axis //! Loads a rotation matrix along the given axis
/** \a dir axis of rotation /**
\a angle angle in radians */ * \param mat result matrix
* \param dir axis of rotation
* \param angle angle [radians]
*/
inline void LoadRotationMatrix(Math::Matrix &mat, const Math::Vector &dir, float angle) inline void LoadRotationMatrix(Math::Matrix &mat, const Math::Vector &dir, float angle)
{ {
float cos = cosf(angle); float cos = cosf(angle);
@ -397,28 +440,28 @@ inline void LoadRotationMatrix(Math::Matrix &mat, const Math::Vector &dir, float
} }
//! Calculates the matrix to make three rotations in the order X, Z and Y //! Calculates the matrix to make three rotations in the order X, Z and Y
inline void LoadRotationXZYMatrix(Math::Matrix &mat, const Math::Vector &angle) inline void LoadRotationXZYMatrix(Math::Matrix &mat, const Math::Vector &angles)
{ {
Math::Matrix temp; Math::Matrix temp;
LoadRotationXMatrix(temp, angle.x); LoadRotationXMatrix(temp, angles.x);
LoadRotationZMatrix(mat, angle.z); LoadRotationZMatrix(mat, angles.z);
mat = Math::MultiplyMatrices(temp, mat); mat = Math::MultiplyMatrices(temp, mat);
LoadRotationYMatrix(temp, angle.y); LoadRotationYMatrix(temp, angles.y);
mat = Math::MultiplyMatrices(temp, mat); mat = Math::MultiplyMatrices(temp, mat);
} }
//! Calculates the matrix to make three rotations in the order Z, X and Y //! Calculates the matrix to make three rotations in the order Z, X and Y
inline void LoadRotationZXYMatrix(Math::Matrix &mat, const Math::Vector &angle) inline void LoadRotationZXYMatrix(Math::Matrix &mat, const Math::Vector &angles)
{ {
Math::Matrix temp; Math::Matrix temp;
LoadRotationZMatrix(temp, angle.z); LoadRotationZMatrix(temp, angles.z);
LoadRotationXMatrix(mat, angle.x); LoadRotationXMatrix(mat, angles.x);
mat = Math::MultiplyMatrices(temp, mat); mat = Math::MultiplyMatrices(temp, mat);
LoadRotationYMatrix(temp, angle.y); LoadRotationYMatrix(temp, angles.y);
mat = Math::MultiplyMatrices(temp, mat); mat = Math::MultiplyMatrices(temp, mat);
} }
@ -430,7 +473,9 @@ inline float DistanceProjected(const Math::Vector &a, const Math::Vector &b)
} }
//! Returns the normal vector to a plane //! Returns the normal vector to a plane
/** \param p1,p2,p3 points defining the plane */ /**
* \param p1,p2,p3 points defining the plane
*/
inline Math::Vector NormalToPlane(const Math::Vector &p1, const Math::Vector &p2, const Math::Vector &p3) inline Math::Vector NormalToPlane(const Math::Vector &p1, const Math::Vector &p2, const Math::Vector &p3)
{ {
Math::Vector u = p3 - p1; Math::Vector u = p3 - p1;
@ -440,16 +485,20 @@ inline Math::Vector NormalToPlane(const Math::Vector &p1, const Math::Vector &p2
} }
//! Returns a point on the line \a p1 - \a p2, in \a dist distance from \a p1 //! Returns a point on the line \a p1 - \a p2, in \a dist distance from \a p1
/** \a p1,p2 line start and end /**
\a dist scaling factor from \a p1, relative to distance between \a p1 and \a p2 */ * \param p1,p2 line start and end
* \param dist scaling factor from \a p1, relative to distance between \a p1 and \a p2
*/
inline Math::Vector SegmentPoint(const Math::Vector &p1, const Math::Vector &p2, float dist) inline Math::Vector SegmentPoint(const Math::Vector &p1, const Math::Vector &p2, float dist)
{ {
return p1 + (p2 - p1) * dist; return p1 + (p2 - p1) * dist;
} }
//! Returns the distance between given point and a plane //! Returns the distance between given point and a plane
/** \param p the point /**
\param a,b,c points defining the plane */ * \param p the point
* \param a,b,c points defining the plane
*/
inline float DistanceToPlane(const Math::Vector &a, const Math::Vector &b, inline float DistanceToPlane(const Math::Vector &a, const Math::Vector &b,
const Math::Vector &c, const Math::Vector &p) const Math::Vector &c, const Math::Vector &p)
{ {
@ -460,8 +509,10 @@ inline float DistanceToPlane(const Math::Vector &a, const Math::Vector &b,
} }
//! Checks if two planes defined by three points are the same //! Checks if two planes defined by three points are the same
/** \a plane1 array of three vectors defining the first plane /**
\a plane2 array of three vectors defining the second plane */ * \param plane1 array of three vectors defining the first plane
* \param plane2 array of three vectors defining the second plane
*/
inline bool IsSamePlane(const Math::Vector (&plane1)[3], const Math::Vector (&plane2)[3]) inline bool IsSamePlane(const Math::Vector (&plane1)[3], const Math::Vector (&plane2)[3])
{ {
Math::Vector n1 = NormalToPlane(plane1[0], plane1[1], plane1[2]); Math::Vector n1 = NormalToPlane(plane1[0], plane1[1], plane1[2]);
@ -479,7 +530,7 @@ inline bool IsSamePlane(const Math::Vector (&plane1)[3], const Math::Vector (&pl
return true; return true;
} }
//! Calculates the intersection "i" right "of" the plane "abc". //! Calculates the intersection "i" right "of" the plane "abc" (TODO: ?)
inline bool Intersect(const Math::Vector &a, const Math::Vector &b, const Math::Vector &c, inline bool Intersect(const Math::Vector &a, const Math::Vector &b, const Math::Vector &c,
const Math::Vector &d, const Math::Vector &e, Math::Vector &i) const Math::Vector &d, const Math::Vector &e, Math::Vector &i)
{ {
@ -502,7 +553,7 @@ inline bool Intersect(const Math::Vector &a, const Math::Vector &b, const Math::
} }
//! Calculates the intersection of the straight line passing through p (x, z) //! Calculates the intersection of the straight line passing through p (x, z)
/** Line is parallel to the y axis, with the plane abc. Returns p.y. */ /** Line is parallel to the y axis, with the plane abc. Returns p.y. (TODO: ?) */
inline bool IntersectY(const Math::Vector &a, const Math::Vector &b, const Math::Vector &c, Math::Vector &p) inline bool IntersectY(const Math::Vector &a, const Math::Vector &b, const Math::Vector &c, Math::Vector &p)
{ {
float d = (b.x-a.x)*(c.z-a.z) - (c.x-a.x)*(b.z-a.z); float d = (b.x-a.x)*(c.z-a.z) - (c.x-a.x)*(b.z-a.z);
@ -528,15 +579,18 @@ inline Math::Vector LookatPoint(const Math::Vector &eye, float angleH, float ang
return lookat; return lookat;
} }
//! TODO documentation //! Transforms the point \a p by matrix \a m
/** Is equal to multiplying the matrix by the vector (of course without perspective divide). */
inline Math::Vector Transform(const Math::Matrix &m, const Math::Vector &p) inline Math::Vector Transform(const Math::Matrix &m, const Math::Vector &p)
{ {
return MatrixVectorMultiply(m, p); return MatrixVectorMultiply(m, p);
} }
//! Calculates the projection of the point \a p on a straight line \a a to \a b. //! Calculates the projection of the point \a p on a straight line \a a to \a b
/** \a p point to project /**
\a a,b two ends of the line */ * \param point to project
* \param a,b two ends of the line
*/
inline Math::Vector Projection(const Math::Vector &a, const Math::Vector &b, const Math::Vector &p) inline Math::Vector Projection(const Math::Vector &a, const Math::Vector &b, const Math::Vector &p)
{ {
float k = DotProduct(b - a, p - a); float k = DotProduct(b - a, p - a);

View File

@ -33,13 +33,14 @@
namespace Math namespace Math
{ {
/** \struct Matrix math/matrix.h /**
\brief 4x4 matrix * \struct Matrix math/matrix.h
* \brief 4x4 matrix
Represents an universal 4x4 matrix that can be used in OpenGL and DirectX engines. *
Contains the required methods for operating on matrices (inverting, multiplying, etc.). * Represents an universal 4x4 matrix that can be used in OpenGL and DirectX engines.
* Contains the required methods for operating on matrices (inverting, multiplying, etc.).
The internal representation is a 16-value table in column-major order, thus: *
* The internal representation is a 16-value table in column-major order, thus:
\verbatim \verbatim
m[0 ] m[4 ] m[8 ] m[12] m[0 ] m[4 ] m[8 ] m[12]
@ -48,16 +49,16 @@ m[2 ] m[6 ] m[10] m[14]
m[3 ] m[7 ] m[11] m[15] m[3 ] m[7 ] m[11] m[15]
\endverbatim \endverbatim
This representation is native to OpenGL; DirectX requires transposing the matrix. * This representation is native to OpenGL; DirectX requires transposing the matrix.
*
The order of multiplication of matrix and vector is also OpenGL-native * The order of multiplication of matrix and vector is also OpenGL-native
(see the function MatrixVectorMultiply). * (see the function MatrixVectorMultiply).
*
All methods are made inline to maximize optimization. * All methods are made inline to maximize optimization.
*
Unit tests for the structure and related functions are in module: math/test/matrix_test.cpp. * Unit tests for the structure and related functions are in module: math/test/matrix_test.cpp.
*
**/ */
struct Matrix struct Matrix
{ {
//! Matrix values in column-major order //! Matrix values in column-major order
@ -78,8 +79,10 @@ struct Matrix
} }
//! Creates the matrix from 2D array //! Creates the matrix from 2D array
/** The array's first index is row, second is column. /**
\a m array with values */ * The array's first index is row, second is column.
* \param m array with values
*/
inline explicit Matrix(const float (&m)[4][4]) inline explicit Matrix(const float (&m)[4][4])
{ {
for (int c = 0; c < 4; ++c) for (int c = 0; c < 4; ++c)
@ -91,11 +94,23 @@ struct Matrix
} }
} }
//! Sets value in given row and col
/**
* \param row row (0 to 3)
* \param col column (0 to 3)
* \param value value
*/
inline void Set(int row, int col, float value) inline void Set(int row, int col, float value)
{ {
m[(col-1)*4+(row-1)] = value; m[(col-1)*4+(row-1)] = value;
} }
//! Returns the value in given row and col
/**
* \param row row (0 to 3)
* \param col column (0 to 3)
* \returns value
*/
inline float Get(int row, int col) inline float Get(int row, int col)
{ {
return m[(col-1)*4+(row-1)]; return m[(col-1)*4+(row-1)];
@ -148,9 +163,11 @@ struct Matrix
} }
//! Calculates the cofactor of the matrix //! Calculates the cofactor of the matrix
/** \a r row (0 to 3) /**
\a c column (0 to 3) * \param r row (0 to 3)
\returns the cofactor */ * \param c column (0 to 3)
* \returns the cofactor
*/
inline float Cofactor(int r, int c) const inline float Cofactor(int r, int c) const
{ {
assert(r >= 0 && r <= 3); assert(r >= 0 && r <= 3);
@ -330,8 +347,10 @@ struct Matrix
} }
//! Calculates the inverse matrix //! Calculates the inverse matrix
/** The determinant of the matrix must not be zero. /**
\returns the inverted matrix */ * The determinant of the matrix must not be zero.
* \returns the inverted matrix
*/
inline Matrix Inverse() const inline Matrix Inverse() const
{ {
float d = Det(); float d = Det();
@ -352,8 +371,10 @@ struct Matrix
} }
//! Calculates the multiplication of this matrix * given matrix //! Calculates the multiplication of this matrix * given matrix
/** \a right right-hand matrix /**
\returns multiplication result */ * \param right right-hand matrix
* \returns multiplication result
*/
inline Matrix Multiply(const Matrix &right) const inline Matrix Multiply(const Matrix &right) const
{ {
float result[16] = { 0.0f }; float result[16] = { 0.0f };

View File

@ -32,14 +32,14 @@
namespace Math namespace Math
{ {
/** \struct Point math/point.h /**
\brief 2D point * \struct Point
* \brief 2D point
Represents a 2D point (x, y). *
Contains the required methods for operating on points. * Represents a 2D point (x, y).
* Contains the required methods for operating on points.
All methods are made inline to maximize optimization. *
* All methods are made inline to maximize optimization.
*/ */
struct Point struct Point
{ {

View File

@ -1,33 +1,23 @@
cmake_minimum_required(VERSION 2.8) cmake_minimum_required(VERSION 2.8)
set(CMAKE_BUILD_TYPE debug) set(CMAKE_BUILD_TYPE debug)
set(CMAKE_CXX_FLAGS_DEBUG "-Wall -g -O0") set(CMAKE_CXX_FLAGS_DEBUG "-g -O0 -Wall -Wold-style-cast -std=gnu++0x")
add_executable(matrix_test matrix_test.cpp) include_directories(
add_executable(vector_test vector_test.cpp) .
add_executable(geometry_test geometry_test.cpp ../old/math3d.cpp ../old/d3dmath.cpp ../../graphics/d3d/d3dutil.cpp) ../../..
${GTEST_DIR}/include
enable_testing()
add_test(matrix_test ./matrix_test)
add_test(vector_test ./vector_test)
add_test(geometry_test ./geometry_test)
# Change to DirectX SDK directory
include_directories("c:/dxsdk/include")
add_definitions(-DSTRICT -DD3D_OVERLOADS)
# 'make check' will compile the required test programs
# Note that 'make test' will still fail without compiled programs
add_custom_target(check COMMAND ${CMAKE_CTEST_COMMAND} DEPENDS matrix_test vector_test)
# Files to be removed in distclean
set(REMOVE_FILES
CMakeFiles Testing cmake_install.cmake CMakeCache.txt CTestTestfile.cmake Makefile
./matrix_test
./vector_test
./geometry_test
) )
add_custom_target(distclean COMMAND rm -rf ${REMOVE_FILES}) add_executable(matrix_test matrix_test.cpp)
target_link_libraries(matrix_test gtest)
add_executable(vector_test vector_test.cpp)
target_link_libraries(vector_test gtest)
add_executable(geometry_test geometry_test.cpp)
target_link_libraries(geometry_test gtest)
add_test(matrix_test matrix_test)
add_test(vector_test vector_test)
add_test(geometry_test geometry_test)

View File

@ -20,53 +20,41 @@
#include "../func.h" #include "../func.h"
#include "../geometry.h" #include "../geometry.h"
#include "../conv.h"
#include "../../old/math3d.h"
#include "../../old/d3dutil.h"
#include <d3d.h> #include "gtest/gtest.h"
#include <cstdio>
using namespace std;
const float TEST_TOLERANCE = 1e-5; const float TEST_TOLERANCE = 1e-5;
// Test for rewritten function RotateAngle() // Test for rewritten function RotateAngle()
int TestRotateAngle() TEST(GeometryTest, RotateAngleTest)
{ {
if (! Math::IsEqual(Math::RotateAngle(0.0f, 0.0f), 0.0f, TEST_TOLERANCE)) EXPECT_TRUE(Math::IsEqual(Math::RotateAngle(0.0f, 0.0f), 0.0f, TEST_TOLERANCE));
return __LINE__;
if (! Math::IsEqual(Math::RotateAngle(1.0f, 0.0f), 0.0f, TEST_TOLERANCE)) EXPECT_TRUE(Math::IsEqual(Math::RotateAngle(1.0f, 0.0f), 0.0f, TEST_TOLERANCE));
return __LINE__;
if (! Math::IsEqual(Math::RotateAngle(1.0f, 1.0f), 0.25f * Math::PI, TEST_TOLERANCE)) EXPECT_TRUE(Math::IsEqual(Math::RotateAngle(1.0f, 1.0f), 0.25f * Math::PI, TEST_TOLERANCE));
return __LINE__;
if (! Math::IsEqual(Math::RotateAngle(0.0f, 2.0f), 0.5f * Math::PI, TEST_TOLERANCE)) EXPECT_TRUE(Math::IsEqual(Math::RotateAngle(0.0f, 2.0f), 0.5f * Math::PI, TEST_TOLERANCE));
return __LINE__;
if (! Math::IsEqual(Math::RotateAngle(-0.5f, 0.5f), 0.75f * Math::PI, TEST_TOLERANCE)) EXPECT_TRUE(Math::IsEqual(Math::RotateAngle(-0.5f, 0.5f), 0.75f * Math::PI, TEST_TOLERANCE));
return __LINE__;
if (! Math::IsEqual(Math::RotateAngle(-1.0f, 0.0f), Math::PI, TEST_TOLERANCE)) EXPECT_TRUE(Math::IsEqual(Math::RotateAngle(-1.0f, 0.0f), Math::PI, TEST_TOLERANCE));
return __LINE__;
if (! Math::IsEqual(Math::RotateAngle(-1.0f, -1.0f), 1.25f * Math::PI, TEST_TOLERANCE)) EXPECT_TRUE(Math::IsEqual(Math::RotateAngle(-1.0f, -1.0f), 1.25f * Math::PI, TEST_TOLERANCE));
return __LINE__;
if (! Math::IsEqual(Math::RotateAngle(0.0f, -2.0f), 1.5f * Math::PI, TEST_TOLERANCE)) EXPECT_TRUE(Math::IsEqual(Math::RotateAngle(0.0f, -2.0f), 1.5f * Math::PI, TEST_TOLERANCE));
return __LINE__;
if (! Math::IsEqual(Math::RotateAngle(1.0f, -1.0f), 1.75f * Math::PI, TEST_TOLERANCE)) EXPECT_TRUE(Math::IsEqual(Math::RotateAngle(1.0f, -1.0f), 1.75f * Math::PI, TEST_TOLERANCE));
return __LINE__;
return 0;
} }
// Tests for other altered, complex or uncertain functions // Tests for other altered, complex or uncertain functions
/*
TODO: write meaningful tests with proper test values
int TestAngle() int TestAngle()
{ {
const Math::Vector u(-0.0786076246943884, 0.2231249091714256, -1.1601361718477805); const Math::Vector u(-0.0786076246943884, 0.2231249091714256, -1.1601361718477805);
@ -360,42 +348,12 @@ int TestTransform()
return 0; return 0;
} }
int main() */
int main(int argc, char* argv[])
{ {
// Functions to test ::testing::InitGoogleTest(&argc, argv);
int (*TESTS[])() =
{
TestRotateAngle,
TestAngle,
TestRotateView,
TestLookatPoint,
TestProjection,
TestLoadViewMatrix,
TestLoadProjectionMatrix,
TestLoadTranslationMatrix,
TestLoadScaleMatrix,
TestLoadRotationXMatrix,
TestLoadRotationYMatrix,
TestLoadRotationZMatrix,
TestLoadRotationMatrix,
TestLoadRotationXZYMatrix,
TestLoadRotationZXYMatrix,
TestTransform
};
const int TESTS_SIZE = sizeof(TESTS) / sizeof(*TESTS);
int result = 0; return RUN_ALL_TESTS();
for (int i = 0; i < TESTS_SIZE; ++i)
{
result = TESTS[i]();
if (result != 0)
{
fprintf(stderr, "Test function %d failed at line %d\n", i+1, result);
return result;
}
}
fprintf(stderr, "All tests successful\n");
return 0;
} }

View File

@ -26,13 +26,13 @@
#include "../func.h" #include "../func.h"
#include "../matrix.h" #include "../matrix.h"
#include <cstdio> #include "gtest/gtest.h"
using namespace std;
const float TEST_TOLERANCE = 1e-6; const float TEST_TOLERANCE = 1e-6;
int TestTranspose()
TEST(MatrixTest, TransposeTest)
{ {
const Math::Matrix mat( const Math::Matrix mat(
(float[4][4]) (float[4][4])
@ -56,16 +56,10 @@ int TestTranspose()
Math::Matrix transpose = Math::Transpose(mat); Math::Matrix transpose = Math::Transpose(mat);
if (! Math::MatricesEqual(transpose, expectedTranspose, TEST_TOLERANCE)) EXPECT_TRUE(Math::MatricesEqual(transpose, expectedTranspose, TEST_TOLERANCE));
{
fprintf(stderr, "Transpose mismatch!\n");
return __LINE__;
}
return 0;
} }
int TestCofactor() TEST(MatrixTest, CofactorTest)
{ {
const Math::Matrix mat1( const Math::Matrix mat1(
(float[4][4]) (float[4][4])
@ -93,12 +87,7 @@ int TestCofactor()
{ {
float ret = mat1.Cofactor(r, c); float ret = mat1.Cofactor(r, c);
float exp = expectedCofactors1.m[4*c+r]; float exp = expectedCofactors1.m[4*c+r];
if (! Math::IsEqual(ret, exp, TEST_TOLERANCE)) EXPECT_TRUE(Math::IsEqual(ret, exp, TEST_TOLERANCE));
{
fprintf(stderr, "Cofactors 1 mismatch!\n");
fprintf(stderr, "r=%d, c=%d, %f (returned) != %f (expected)\n", r, c, ret, exp);
return __LINE__;
}
} }
} }
@ -129,19 +118,12 @@ int TestCofactor()
{ {
float ret = mat2.Cofactor(r, c); float ret = mat2.Cofactor(r, c);
float exp = expectedCofactors2.m[4*c+r]; float exp = expectedCofactors2.m[4*c+r];
if (! Math::IsEqual(ret, exp, TEST_TOLERANCE)) EXPECT_TRUE(Math::IsEqual(ret, exp, TEST_TOLERANCE));
{
fprintf(stderr, "Cofactors 2 mismatch!\n");
fprintf(stderr, "r=%d, c=%d, %f (returned) != %f (expected)\n", r, c, ret, exp);
return __LINE__;
}
} }
} }
return 0;
} }
int TestDet() TEST(MatrixTest, DetTest)
{ {
const Math::Matrix mat1( const Math::Matrix mat1(
(float[4][4]) (float[4][4])
@ -156,12 +138,7 @@ int TestDet()
const float expectedDet1 = 4.07415413729671; const float expectedDet1 = 4.07415413729671;
float ret1 = mat1.Det(); float ret1 = mat1.Det();
if (! Math::IsEqual(ret1, expectedDet1, TEST_TOLERANCE)) EXPECT_TRUE(Math::IsEqual(ret1, expectedDet1, TEST_TOLERANCE));
{
fprintf(stderr, "Det mismatch!\n");
fprintf(stderr, "%f (returned) != %f (expected)\n", ret1, expectedDet1);
return __LINE__;
}
const Math::Matrix mat2( const Math::Matrix mat2(
(float[4][4]) (float[4][4])
@ -176,17 +153,10 @@ int TestDet()
const float expectedDet2 = -6.35122307880942; const float expectedDet2 = -6.35122307880942;
float ret2 = mat2.Det(); float ret2 = mat2.Det();
if (! Math::IsEqual(ret2, expectedDet2, TEST_TOLERANCE)) EXPECT_TRUE(Math::IsEqual(ret2, expectedDet2, TEST_TOLERANCE));
{
fprintf(stderr, "Det mismatch!\n");
fprintf(stderr, "%f (returned) != %f (expected)\n", ret2, expectedDet2);
return __LINE__;
}
return 0;
} }
int TestInverse() TEST(MatrixTest, InverseTest)
{ {
const Math::Matrix mat1( const Math::Matrix mat1(
(float[4][4]) (float[4][4])
@ -210,11 +180,7 @@ int TestInverse()
Math::Matrix inverse1 = mat1.Inverse(); Math::Matrix inverse1 = mat1.Inverse();
if (! Math::MatricesEqual(inverse1, expectedInverse1, TEST_TOLERANCE)) EXPECT_TRUE(Math::MatricesEqual(inverse1, expectedInverse1, TEST_TOLERANCE));
{
fprintf(stderr, "Inverse 1 mismatch!\n");
return __LINE__;
}
const Math::Matrix mat2( const Math::Matrix mat2(
(float[4][4]) (float[4][4])
@ -238,16 +204,10 @@ int TestInverse()
Math::Matrix inverse2 = mat2.Inverse(); Math::Matrix inverse2 = mat2.Inverse();
if (! Math::MatricesEqual(inverse2, expectedInverse2, TEST_TOLERANCE)) EXPECT_TRUE(Math::MatricesEqual(inverse2, expectedInverse2, TEST_TOLERANCE));
{
fprintf(stderr, "Inverse 2 mismatch!\n");
return __LINE__;
}
return 0;
} }
int TestMultiply() TEST(MatrixTest, MultiplyTest)
{ {
const Math::Matrix mat1A( const Math::Matrix mat1A(
(float[4][4]) (float[4][4])
@ -280,11 +240,7 @@ int TestMultiply()
); );
Math::Matrix multiply1 = Math::MultiplyMatrices(mat1A, mat1B); Math::Matrix multiply1 = Math::MultiplyMatrices(mat1A, mat1B);
if (! Math::MatricesEqual(multiply1, expectedMultiply1, TEST_TOLERANCE ) ) EXPECT_TRUE(Math::MatricesEqual(multiply1, expectedMultiply1, TEST_TOLERANCE));
{
fprintf(stderr, "Multiply 1 mismath!\n");
return __LINE__;
}
const Math::Matrix mat2A( const Math::Matrix mat2A(
(float[4][4]) (float[4][4])
@ -317,16 +273,10 @@ int TestMultiply()
); );
Math::Matrix multiply2 = Math::MultiplyMatrices(mat2A, mat2B); Math::Matrix multiply2 = Math::MultiplyMatrices(mat2A, mat2B);
if (! Math::MatricesEqual(multiply2, expectedMultiply2, TEST_TOLERANCE ) ) EXPECT_TRUE(Math::MatricesEqual(multiply2, expectedMultiply2, TEST_TOLERANCE));
{
fprintf(stderr, "Multiply 2 mismath!\n");
return __LINE__;
}
return 0;
} }
int TestMultiplyVector() TEST(MatrixTest, MultiplyVectorTest)
{ {
const Math::Matrix mat1( const Math::Matrix mat1(
(float[4][4]) (float[4][4])
@ -343,11 +293,7 @@ int TestMultiplyVector()
const Math::Vector expectedMultiply1(0.608932463260470, -1.356893266403749, 3.457156276255142); const Math::Vector expectedMultiply1(0.608932463260470, -1.356893266403749, 3.457156276255142);
Math::Vector multiply1 = Math::MatrixVectorMultiply(mat1, vec1, false); Math::Vector multiply1 = Math::MatrixVectorMultiply(mat1, vec1, false);
if (! Math::VectorsEqual(multiply1, expectedMultiply1, TEST_TOLERANCE ) ) EXPECT_TRUE(Math::VectorsEqual(multiply1, expectedMultiply1, TEST_TOLERANCE));
{
fprintf(stderr, "Multiply vector 1 mismath!\n");
return __LINE__;
}
const Math::Matrix mat2( const Math::Matrix mat2(
(float[4][4]) (float[4][4])
@ -364,39 +310,13 @@ int TestMultiplyVector()
const Math::Vector expectedMultiply2(0.2816820577317669, 0.0334468811767428, 0.1996974284970455); const Math::Vector expectedMultiply2(0.2816820577317669, 0.0334468811767428, 0.1996974284970455);
Math::Vector multiply2 = Math::MatrixVectorMultiply(mat2, vec2, true); Math::Vector multiply2 = Math::MatrixVectorMultiply(mat2, vec2, true);
if (! Math::VectorsEqual(multiply2, expectedMultiply2, TEST_TOLERANCE ) ) EXPECT_TRUE(Math::VectorsEqual(multiply2, expectedMultiply2, TEST_TOLERANCE));
{
fprintf(stderr, "Multiply vector 2 mismath!\n");
return __LINE__;
}
return 0;
} }
int main() int main(int argc, char* argv[])
{ {
// Functions to test ::testing::InitGoogleTest(&argc, argv);
int (*TESTS[])() =
{
TestTranspose,
TestCofactor,
TestDet,
TestInverse,
TestMultiply,
TestMultiplyVector
};
const int TESTS_SIZE = sizeof(TESTS) / sizeof(*TESTS);
int result = 0; return RUN_ALL_TESTS();
for (int i = 0; i < TESTS_SIZE; ++i)
{
result = TESTS[i]();
if (result != 0)
return result;
}
fprintf(stderr, "All tests successful\n");
return 0;
} }

View File

@ -26,59 +26,41 @@
#include "../func.h" #include "../func.h"
#include "../vector.h" #include "../vector.h"
#include <cstdio> #include "gtest/gtest.h"
using namespace std;
const float TEST_TOLERANCE = 1e-6; const float TEST_TOLERANCE = 1e-6;
int TestLength()
TEST(VectorTest, LengthTest)
{ {
Math::Vector vec(-1.288447945923275, 0.681452565308134, -0.633761098985957); Math::Vector vec(-1.288447945923275, 0.681452565308134, -0.633761098985957);
const float expectedLength = 1.58938001708428; const float expectedLength = 1.58938001708428;
if (! Math::IsEqual(vec.Length(), expectedLength, TEST_TOLERANCE) ) EXPECT_TRUE(Math::IsEqual(vec.Length(), expectedLength, TEST_TOLERANCE));
{
fprintf(stderr, "Length mismatch!\n");
return __LINE__;
}
return 0;
} }
int TestNormalize() TEST(VectorTest, NormalizeTest)
{ {
Math::Vector vec(1.848877241804398, -0.157262961268577, -1.963031403332377); Math::Vector vec(1.848877241804398, -0.157262961268577, -1.963031403332377);
const Math::Vector expectedNormalized(0.6844609421393856, -0.0582193085618106, -0.7267212194481797); const Math::Vector expectedNormalized(0.6844609421393856, -0.0582193085618106, -0.7267212194481797);
vec.Normalize(); vec.Normalize();
if (! Math::VectorsEqual(vec, expectedNormalized, TEST_TOLERANCE)) EXPECT_TRUE(Math::VectorsEqual(vec, expectedNormalized, TEST_TOLERANCE));
{
fprintf(stderr, "Normalize mismatch!\n");
return __LINE__;
}
return 0;
} }
int TestDot() TEST(VectorTest, DotTest)
{ {
Math::Vector vecA(0.8202190530968309, 0.0130926060162780, 0.2411914183883510); Math::Vector vecA(0.8202190530968309, 0.0130926060162780, 0.2411914183883510);
Math::Vector vecB(-0.0524083951404069, 1.5564932716738220, -0.8971342631500536); Math::Vector vecB(-0.0524083951404069, 1.5564932716738220, -0.8971342631500536);
float expectedDot = -0.238988896477326; float expectedDot = -0.238988896477326;
if (! Math::IsEqual(Math::DotProduct(vecA, vecB), expectedDot, TEST_TOLERANCE) ) EXPECT_TRUE(Math::IsEqual(Math::DotProduct(vecA, vecB), expectedDot, TEST_TOLERANCE));
{
fprintf(stderr, "Dot product mismatch!\n");
return __LINE__;
}
return 0;
} }
int TestCross() TEST(VectorTest, CrossTest)
{ {
Math::Vector vecA(1.37380499798567, 1.18054518384682, 1.95166361293121); Math::Vector vecA(1.37380499798567, 1.18054518384682, 1.95166361293121);
Math::Vector vecB(0.891657855926886, 0.447591335394532, -0.901604070087823); Math::Vector vecB(0.891657855926886, 0.447591335394532, -0.901604070087823);
@ -86,42 +68,14 @@ int TestCross()
Math::Vector expectedCross(-1.937932065431669, 2.978844370287636, -0.437739173833581); Math::Vector expectedCross(-1.937932065431669, 2.978844370287636, -0.437739173833581);
Math::Vector expectedReverseCross = -expectedCross; Math::Vector expectedReverseCross = -expectedCross;
if (! Math::VectorsEqual(vecA.CrossMultiply(vecB), expectedCross, TEST_TOLERANCE) ) EXPECT_TRUE(Math::VectorsEqual(vecA.CrossMultiply(vecB), expectedCross, TEST_TOLERANCE));
{
fprintf(stderr, "Cross product mismatch!\n");
return __LINE__;
}
if (! Math::VectorsEqual(vecB.CrossMultiply(vecA), expectedReverseCross, TEST_TOLERANCE) ) EXPECT_TRUE(Math::VectorsEqual(vecB.CrossMultiply(vecA), expectedReverseCross, TEST_TOLERANCE));
{
fprintf(stderr, "Reverse cross product mismatch!\n");
return __LINE__;
}
return 0;
} }
int main() int main(int argc, char* argv[])
{ {
// Functions to test ::testing::InitGoogleTest(&argc, argv);
int (*TESTS[])() =
{
TestLength,
TestNormalize,
TestDot,
TestCross
};
const int TESTS_SIZE = sizeof(TESTS) / sizeof(*TESTS);
int result = 0; return RUN_ALL_TESTS();
for (int i = 0; i < TESTS_SIZE; ++i)
{
result = TESTS[i]();
if (result != 0)
return result;
}
fprintf(stderr, "All tests successful\n");
return 0;
} }

View File

@ -32,16 +32,17 @@
namespace Math namespace Math
{ {
/** \struct Vector math/vector.h /**
\brief 3D (3x1) vector * \struct Vector
* \brief 3D (3x1) vector
Represents a universal 3x1 vector that can be used in OpenGL and DirectX engines. *
Contains the required methods for operating on vectors. * Represents a universal 3x1 vector that can be used in OpenGL and DirectX engines.
* Contains the required methods for operating on vectors.
All methods are made inline to maximize optimization. *
* All methods are made inline to maximize optimization.
Unit tests for the structure and related functions are in module: math/test/vector_test.cpp. *
* Unit tests for the structure and related functions are in module: math/test/vector_test.cpp.
*
*/ */
struct Vector struct Vector
{ {
@ -103,8 +104,10 @@ struct Vector
} }
//! Calculates the cross product with another vector //! Calculates the cross product with another vector
/** \a right right-hand side vector /**
\returns the cross product*/ * \param right right-hand side vector
* \returns the cross product
*/
inline Vector CrossMultiply(const Vector &right) const inline Vector CrossMultiply(const Vector &right) const
{ {
float px = y * right.z - z * right.y; float px = y * right.z - z * right.y;
@ -114,8 +117,10 @@ struct Vector
} }
//! Calculates the dot product with another vector //! Calculates the dot product with another vector
/** \a right right-hand side vector /**
\returns the dot product */ * \param right right-hand side vector
* \returns the dot product
*/
inline float DotMultiply(const Vector &right) const inline float DotMultiply(const Vector &right) const
{ {
return x * right.x + y * right.y + z * right.z; return x * right.x + y * right.y + z * right.z;
@ -218,7 +223,7 @@ struct Vector
return s.str(); return s.str();
} }
}; // struct Point }; // struct Vector
//! Checks if two vectors are equal within given \a tolerance //! Checks if two vectors are equal within given \a tolerance
inline bool VectorsEqual(const Math::Vector &a, const Math::Vector &b, float tolerance = TOLERANCE) inline bool VectorsEqual(const Math::Vector &a, const Math::Vector &b, float tolerance = TOLERANCE)

View File

@ -15,8 +15,6 @@
// * along with this program. If not, see http://www.gnu.org/licenses/. // * along with this program. If not, see http://www.gnu.org/licenses/.
#include <stdio.h>
#include "object/auto/auto.h" #include "object/auto/auto.h"
@ -26,7 +24,8 @@
#include "ui/gauge.h" #include "ui/gauge.h"
#include "ui/window.h" #include "ui/window.h"
#include <stdio.h>
#include <string.h>
// Object's constructor. // Object's constructor.

View File

@ -19,7 +19,7 @@
#pragma once #pragma once
#include "common/misc.h" #include "common/global.h"
#include "object/object.h" #include "object/object.h"

View File

@ -16,8 +16,6 @@
// * along with this program. If not, see http://www.gnu.org/licenses/. // * along with this program. If not, see http://www.gnu.org/licenses/.
#include <stdio.h>
#include "object/auto/autoconvert.h" #include "object/auto/autoconvert.h"
#include "common/iman.h" #include "common/iman.h"
@ -27,7 +25,8 @@
#include "ui/window.h" #include "ui/window.h"
#include "ui/displaytext.h" #include "ui/displaytext.h"
#include <stdio.h>
#include <string.h>
// Object's constructor. // Object's constructor.

View File

@ -16,8 +16,6 @@
// * along with this program. If not, see http://www.gnu.org/licenses/. // * along with this program. If not, see http://www.gnu.org/licenses/.
#include <stdio.h>
#include "object/auto/autoderrick.h" #include "object/auto/autoderrick.h"
#include "common/iman.h" #include "common/iman.h"
@ -28,7 +26,8 @@
#include "ui/window.h" #include "ui/window.h"
#include "ui/displaytext.h" #include "ui/displaytext.h"
#include <stdio.h>
#include <string.h>
const float DERRICK_DELAY = 10.0f; // duration of the extraction const float DERRICK_DELAY = 10.0f; // duration of the extraction

View File

@ -16,8 +16,6 @@
// * along with this program. If not, see http://www.gnu.org/licenses/. // * along with this program. If not, see http://www.gnu.org/licenses/.
#include <stdio.h>
#include "object/auto/autodestroyer.h" #include "object/auto/autodestroyer.h"
#include "common/iman.h" #include "common/iman.h"
@ -25,7 +23,8 @@
#include "ui/interface.h" #include "ui/interface.h"
#include "ui/window.h" #include "ui/window.h"
#include <stdio.h>
#include <string.h>
// Object's constructor. // Object's constructor.

View File

@ -16,15 +16,14 @@
// * along with this program. If not, see http://www.gnu.org/licenses/. // * along with this program. If not, see http://www.gnu.org/licenses/.
#include <stdio.h>
#include "object/auto/autoegg.h" #include "object/auto/autoegg.h"
#include "math/geometry.h" #include "math/geometry.h"
#include "common/iman.h" #include "common/iman.h"
#include "script/cmdtoken.h" #include "script/cmdtoken.h"
#include <stdio.h>
#include <string.h>
// Object's constructor. // Object's constructor.

View File

@ -16,8 +16,6 @@
// * along with this program. If not, see http://www.gnu.org/licenses/. // * along with this program. If not, see http://www.gnu.org/licenses/.
#include <stdio.h>
#include "object/auto/autoenergy.h" #include "object/auto/autoenergy.h"
#include "common/iman.h" #include "common/iman.h"
@ -29,6 +27,8 @@
#include "ui/window.h" #include "ui/window.h"
#include "ui/displaytext.h" #include "ui/displaytext.h"
#include <stdio.h>
#include <string.h>
const float ENERGY_POWER = 0.4f; // Necessary energy for a battery const float ENERGY_POWER = 0.4f; // Necessary energy for a battery

View File

@ -16,8 +16,6 @@
// * along with this program. If not, see http://www.gnu.org/licenses/. // * along with this program. If not, see http://www.gnu.org/licenses/.
#include <stdio.h>
#include "object/auto/autofactory.h" #include "object/auto/autofactory.h"
#include "common/global.h" #include "common/global.h"
@ -30,7 +28,8 @@
#include "ui/window.h" #include "ui/window.h"
#include "ui/displaytext.h" #include "ui/displaytext.h"
#include <stdio.h>
#include <string.h>

View File

@ -16,13 +16,13 @@
// * along with this program. If not, see http://www.gnu.org/licenses/. // * along with this program. If not, see http://www.gnu.org/licenses/.
#include <stdio.h>
#include "object/auto/autoflag.h" #include "object/auto/autoflag.h"
#include "math/geometry.h" #include "math/geometry.h"
#include "graphics/engine/terrain.h" #include "graphics/engine/terrain.h"
#include <stdio.h>
#define ADJUST_ANGLE false // true -> adjusts the angles of the members #define ADJUST_ANGLE false // true -> adjusts the angles of the members

View File

@ -16,14 +16,12 @@
// * along with this program. If not, see http://www.gnu.org/licenses/. // * along with this program. If not, see http://www.gnu.org/licenses/.
#include <stdio.h>
#include "object/auto/autohuston.h" #include "object/auto/autohuston.h"
#include "ui/interface.h" #include "ui/interface.h"
#include "ui/window.h" #include "ui/window.h"
#include <stdio.h>
// Object's constructor. // Object's constructor.

View File

@ -16,8 +16,6 @@
// * along with this program. If not, see http://www.gnu.org/licenses/. // * along with this program. If not, see http://www.gnu.org/licenses/.
#include <stdio.h>
#include "object/auto/autoinfo.h" #include "object/auto/autoinfo.h"
#include "script/cmdtoken.h" #include "script/cmdtoken.h"
@ -25,7 +23,8 @@
#include "ui/list.h" #include "ui/list.h"
#include "ui/window.h" #include "ui/window.h"
#include <stdio.h>
#include <string.h>

View File

@ -16,11 +16,9 @@
// * along with this program. If not, see http://www.gnu.org/licenses/. // * along with this program. If not, see http://www.gnu.org/licenses/.
#include <stdio.h>
#include "object/auto/autojostle.h" #include "object/auto/autojostle.h"
#include <stdio.h>
// Object's constructor. // Object's constructor.

View File

@ -16,13 +16,12 @@
// * along with this program. If not, see http://www.gnu.org/licenses/. // * along with this program. If not, see http://www.gnu.org/licenses/.
#include <stdio.h>
#include "object/auto/autokid.h" #include "object/auto/autokid.h"
#include "graphics/engine/particle.h" #include "graphics/engine/particle.h"
#include "graphics/engine/water.h" #include "graphics/engine/water.h"
#include <stdio.h>
// Object's constructor. // Object's constructor.

View File

@ -16,8 +16,6 @@
// * along with this program. If not, see http://www.gnu.org/licenses/. // * along with this program. If not, see http://www.gnu.org/licenses/.
#include <stdio.h>
#include "object/auto/autolabo.h" #include "object/auto/autolabo.h"
#include "common/global.h" #include "common/global.h"
@ -29,6 +27,8 @@
#include "ui/window.h" #include "ui/window.h"
#include "ui/displaytext.h" #include "ui/displaytext.h"
#include <stdio.h>
#include <string.h>
const float LABO_DELAY = 20.0f; // duration of the analysis const float LABO_DELAY = 20.0f; // duration of the analysis

View File

@ -16,14 +16,14 @@
// * along with this program. If not, see http://www.gnu.org/licenses/. // * along with this program. If not, see http://www.gnu.org/licenses/.
#include <stdio.h>
#include "object/auto/automush.h" #include "object/auto/automush.h"
#include "common/iman.h" #include "common/iman.h"
#include "script/cmdtoken.h" #include "script/cmdtoken.h"
#include <stdio.h>
#include <string.h>
// Object's constructor. // Object's constructor.

View File

@ -16,15 +16,14 @@
// * along with this program. If not, see http://www.gnu.org/licenses/. // * along with this program. If not, see http://www.gnu.org/licenses/.
#include <stdio.h>
#include "object/auto/autonest.h" #include "object/auto/autonest.h"
#include "common/iman.h" #include "common/iman.h"
#include "graphics/engine/terrain.h" #include "graphics/engine/terrain.h"
#include "script/cmdtoken.h" #include "script/cmdtoken.h"
#include <stdio.h>
#include <string.h>
// Object's constructor. // Object's constructor.

View File

@ -16,8 +16,6 @@
// * along with this program. If not, see http://www.gnu.org/licenses/. // * along with this program. If not, see http://www.gnu.org/licenses/.
#include <stdio.h>
#include "object/auto/autonuclear.h" #include "object/auto/autonuclear.h"
#include "common/iman.h" #include "common/iman.h"
@ -27,6 +25,8 @@
#include "ui/window.h" #include "ui/window.h"
#include "ui/displaytext.h" #include "ui/displaytext.h"
#include <stdio.h>
#include <string.h>
const float NUCLEAR_DELAY = 30.0f; // duration of the generation const float NUCLEAR_DELAY = 30.0f; // duration of the generation

View File

@ -16,8 +16,6 @@
// * along with this program. If not, see http://www.gnu.org/licenses/. // * along with this program. If not, see http://www.gnu.org/licenses/.
#include <stdio.h>
#include "object/auto/autopara.h" #include "object/auto/autopara.h"
@ -27,6 +25,8 @@
#include "ui/interface.h" #include "ui/interface.h"
#include "ui/window.h" #include "ui/window.h"
#include <stdio.h>
#include <string.h>

View File

@ -16,14 +16,13 @@
// * along with this program. If not, see http://www.gnu.org/licenses/. // * along with this program. If not, see http://www.gnu.org/licenses/.
#include <stdio.h>
#include "object/auto/autoportico.h" #include "object/auto/autoportico.h"
#include "object/robotmain.h" #include "object/robotmain.h"
#include <stdio.h>
#include <string.h>
const int PARAM_DEPOSE = 2; // run=2 -> deposits the spaceship const int PARAM_DEPOSE = 2; // run=2 -> deposits the spaceship

View File

@ -16,8 +16,6 @@
// * along with this program. If not, see http://www.gnu.org/licenses/. // * along with this program. If not, see http://www.gnu.org/licenses/.
#include <stdio.h>
#include "object/auto/autoradar.h" #include "object/auto/autoradar.h"
#include "common/iman.h" #include "common/iman.h"
@ -26,6 +24,8 @@
#include "ui/window.h" #include "ui/window.h"
#include "ui/gauge.h" #include "ui/gauge.h"
#include <stdio.h>
// Object's constructor. // Object's constructor.

View File

@ -16,8 +16,6 @@
// * along with this program. If not, see http://www.gnu.org/licenses/. // * along with this program. If not, see http://www.gnu.org/licenses/.
#include <stdio.h>
#include "object/auto/autorepair.h" #include "object/auto/autorepair.h"
#include "common/iman.h" #include "common/iman.h"
@ -26,6 +24,9 @@
#include "ui/interface.h" #include "ui/interface.h"
#include "ui/window.h" #include "ui/window.h"
#include <stdio.h>
#include <string.h>
// Object's constructor. // Object's constructor.

View File

@ -16,8 +16,6 @@
// * along with this program. If not, see http://www.gnu.org/licenses/. // * along with this program. If not, see http://www.gnu.org/licenses/.
#include <stdio.h>
#include "object/auto/autoresearch.h" #include "object/auto/autoresearch.h"
#include "common/global.h" #include "common/global.h"
@ -29,6 +27,8 @@
#include "ui/window.h" #include "ui/window.h"
#include "ui/displaytext.h" #include "ui/displaytext.h"
#include <stdio.h>
#include <string.h>
const float SEARCH_TIME = 30.0f; // duration of a research const float SEARCH_TIME = 30.0f; // duration of a research

View File

@ -15,15 +15,13 @@
// * along with this program. If not, see http://www.gnu.org/licenses/. // * along with this program. If not, see http://www.gnu.org/licenses/.
#include <stdio.h>
#include "object/auto/autoroot.h" #include "object/auto/autoroot.h"
#include "graphics/engine/particle.h" #include "graphics/engine/particle.h"
#include "graphics/engine/terrain.h" #include "graphics/engine/terrain.h"
#include "math/geometry.h" #include "math/geometry.h"
#include <stdio.h>
// Object's constructor. // Object's constructor.

View File

@ -16,8 +16,6 @@
// * along with this program. If not, see http://www.gnu.org/licenses/. // * along with this program. If not, see http://www.gnu.org/licenses/.
#include <stdio.h>
#include "object/auto/autosafe.h" #include "object/auto/autosafe.h"
#include "common/iman.h" #include "common/iman.h"
@ -27,6 +25,9 @@
#include "ui/interface.h" #include "ui/interface.h"
#include "ui/window.h" #include "ui/window.h"
#include <stdio.h>
#include <string.h>
const float OPEN_DELAY = 8.0f; // duration of opening const float OPEN_DELAY = 8.0f; // duration of opening

View File

@ -16,8 +16,6 @@
// * along with this program. If not, see http://www.gnu.org/licenses/. // * along with this program. If not, see http://www.gnu.org/licenses/.
#include <stdio.h>
#include "object/auto/autostation.h" #include "object/auto/autostation.h"
#include "common/iman.h" #include "common/iman.h"
@ -28,7 +26,7 @@
#include "ui/gauge.h" #include "ui/gauge.h"
#include "ui/window.h" #include "ui/window.h"
#include <stdio.h>
// Object's constructor. // Object's constructor.

View File

@ -16,8 +16,6 @@
// * along with this program. If not, see http://www.gnu.org/licenses/. // * along with this program. If not, see http://www.gnu.org/licenses/.
#include <stdio.h>
#include "object/auto/autotower.h" #include "object/auto/autotower.h"
#include "common/iman.h" #include "common/iman.h"
@ -29,6 +27,9 @@
#include "ui/window.h" #include "ui/window.h"
#include "ui/gauge.h" #include "ui/gauge.h"
#include <stdio.h>
#include <string.h>
const float TOWER_SCOPE = 200.0f; // range of beam const float TOWER_SCOPE = 200.0f; // range of beam
const float ENERGY_FIRE = 0.125f; // energy consumed by fire const float ENERGY_FIRE = 0.125f; // energy consumed by fire

View File

@ -15,57 +15,23 @@
// * along with this program. If not, see http://www.gnu.org/licenses/. // * along with this program. If not, see http://www.gnu.org/licenses/.
// #include <stdio.h>
//
#include "object/brain.h" #include "object/brain.h"
//
// #include "CBot/CBotDll.h"
// #include "common/struct.h"
// #include "math/geometry.h"
// #include "math/const.h"
// #include "old/d3dengine.h"
// #include "old/d3dmath.h"
// #include "common/language.h"
// #include "common/global.h"
// #include "common/event.h"
#include "common/misc.h" #include "common/misc.h"
#include "common/iman.h" #include "common/iman.h"
// #include "common/restext.h"
// #include "old/math3d.h"
// #include "object/robotmain.h"
#include "graphics/core/color.h" #include "graphics/core/color.h"
#include "graphics/engine/terrain.h" #include "graphics/engine/terrain.h"
// #include "old/water.h" #include "object/motion/motion.h"
// #include "old/camera.h"
// #include "object/object.h"
// #include "physics/physics.h"
// #include "object/motion/motion.h"
// #include "object/motion/motionspider.h"
// #include "old/pyro.h"
#include "object/task/taskmanager.h" #include "object/task/taskmanager.h"
// #include "object/task/task.h" #include "physics/physics.h"
// #include "object/task/taskmanip.h"
// #include "object/task/taskflag.h"
// #include "object/task/taskshield.h"
#include "script/script.h"
// #include "ui/studio.h"
#include "ui/interface.h"
// #include "ui/button.h"
// #include "ui/color.h"
// #include "ui/edit.h"
// #include "ui/list.h"
// #include "ui/label.h"
// #include "ui/group.h"
// #include "ui/gauge.h"
#include "ui/slider.h"
// #include "ui/compass.h"
// #include "ui/target.h"
#include "ui/window.h"
// #include "ui/displaytext.h"
// #include "old/text.h"
#include "sound/sound.h"
// #include "old/particule.h"
#include "script/cmdtoken.h" #include "script/cmdtoken.h"
#include "script/script.h"
#include "sound/sound.h"
#include "ui/displaytext.h"
#include "ui/interface.h"
#include "ui/slider.h"
#include "ui/studio.h"
#include "ui/window.h"
@ -96,8 +62,7 @@ CBrain::CBrain(CInstanceManager* iMan, CObject* object)
m_motion = 0; m_motion = 0;
m_primaryTask = 0; m_primaryTask = 0;
m_secondaryTask = 0; m_secondaryTask = 0;
// TODO uncoment when ui/studio will be implemented. m_studio = 0;
// m_studio = 0;
m_program = -1; m_program = -1;
m_bActivity = true; m_bActivity = true;
@ -144,8 +109,7 @@ CBrain::~CBrain()
delete m_primaryTask; delete m_primaryTask;
delete m_secondaryTask; delete m_secondaryTask;
// TODO uncoment when ui/studio will be implemented. delete m_studio;
// delete m_studio;
delete m_traceRecordBuffer; delete m_traceRecordBuffer;
m_iMan->DeleteInstance(CLASS_BRAIN, this); m_iMan->DeleteInstance(CLASS_BRAIN, this);
} }
@ -172,8 +136,7 @@ void CBrain::DeleteObject(bool bAll)
} }
} }
// TODO uncoment when ui/studio will be implemented. if ( m_studio != 0 ) // current edition?
// if ( m_studio != 0 ) // current edition?
{ {
StopEditScript(true); StopEditScript(true);
} }
@ -239,9 +202,12 @@ bool CBrain::EventProcess(const Event &event)
action = EVENT_NULL; action = EVENT_NULL;
CApplication* app = CApplication::GetInstancePointer();
if ( event.type == EVENT_KEY_DOWN && if ( event.type == EVENT_KEY_DOWN &&
(event.param == m_engine->GetKey(KEYRANK_ACTION, 0) || (event.key.key == app->GetInputBinding(INPUT_SLOT_ACTION).key
event.param == m_engine->GetKey(KEYRANK_ACTION, 1) ) && /* TODO joystick input binding
event.param == app->GetInputBinding(INPUT_SLOT_ACTION).joy*/ ) &&
!m_main->GetEditLock() ) !m_main->GetEditLock() )
{ {
pw = static_cast< Ui::CWindow* >(m_interface->SearchControl(EVENT_WINDOW0)); pw = static_cast< Ui::CWindow* >(m_interface->SearchControl(EVENT_WINDOW0));
@ -250,7 +216,7 @@ bool CBrain::EventProcess(const Event &event)
pc = pw->SearchControl(m_defaultEnter); pc = pw->SearchControl(m_defaultEnter);
if ( pc != 0 ) if ( pc != 0 )
{ {
if ( pc->TestState(STATE_ENABLE) ) if ( pc->TestState(Ui::STATE_ENABLE) )
{ {
action = m_defaultEnter; action = m_defaultEnter;
} }
@ -274,9 +240,8 @@ bool CBrain::EventProcess(const Event &event)
EventFrame(event); EventFrame(event);
} }
// TODO uncoment when ui/studio will be implemented.
if ( m_object->GetSelect() && // robot selected? if ( m_object->GetSelect() && // robot selected?
/* m_studio != 0 */ ) // current issue? m_studio != 0 ) // current issue?
{ {
// m_studio->EventProcess(event); // m_studio->EventProcess(event);
@ -394,8 +359,7 @@ bool CBrain::EventProcess(const Event &event)
{ {
m_buttonAxe = action; m_buttonAxe = action;
} }
if ( action == EVENT_LBUTTONUP || if ( action == EVENT_MOUSE_BUTTON_UP )
action == EVENT_RBUTTONUP )
{ {
m_buttonAxe = EVENT_NULL; m_buttonAxe = EVENT_NULL;
} }
@ -770,11 +734,10 @@ bool CBrain::EventFrame(const Event &event)
m_sound->Position(m_soundChannelAlarm, m_object->GetPosition(0)); m_sound->Position(m_soundChannelAlarm, m_object->GetPosition(0));
} }
// TODO uncoment when ui/studio will be implemented. if ( m_studio != 0 ) // current edition?
// if ( m_studio != 0 ) // current edition? {
// { m_studio->EventProcess(event);
// m_studio->EventProcess(event); }
// }
UpdateInterface(event.rTime); UpdateInterface(event.rTime);
@ -826,7 +789,7 @@ void CBrain::StopProgram()
UpdateInterface(); UpdateInterface();
m_main->UpdateShortcuts(); m_main->UpdateShortcuts();
m_object->CreateSelectParticule(); m_object->CreateSelectParticle();
} }
// Stops the current task. // Stops the current task.
@ -897,9 +860,8 @@ void CBrain::StartEditScript(int rank, char* name)
m_script[rank] = new CScript(m_iMan, m_object, &m_secondaryTask); m_script[rank] = new CScript(m_iMan, m_object, &m_secondaryTask);
} }
// TODO uncoment when ui/studio will be implemented. m_studio = new Ui::CStudio();
// m_studio = new CStudio(m_iMan); m_studio->StartEditScript(m_script[rank], name, rank);
// m_studio->StartEditScript(m_script[rank], name, rank);
} }
// End of editing a program. // End of editing a program.
@ -908,11 +870,10 @@ void CBrain::StopEditScript(bool bCancel)
{ {
if ( !bCancel ) SetActiveVirus(false); if ( !bCancel ) SetActiveVirus(false);
// TODO uncoment when ui/studio will be implemented. if ( !m_studio->StopEditScript(bCancel) ) return;
// if ( !m_studio->StopEditScript(bCancel) ) return;
// delete m_studio; delete m_studio;
// m_studio = 0; m_studio = 0;
CreateInterface(true); // puts the control buttons CreateInterface(true); // puts the control buttons
} }
@ -1506,19 +1467,19 @@ bool CBrain::CreateInterface(bool bSelect)
pos.x = ox+sx*10.1f; pos.x = ox+sx*10.1f;
pos.y = oy+sy*2.0f-ddim.y; pos.y = oy+sy*2.0f-ddim.y;
pc = pw->CreateColor(pos, ddim, -1, EVENT_OBJECT_FCOLORb); pc = pw->CreateColor(pos, ddim, -1, EVENT_OBJECT_FCOLORb);
pc->SetColor(GetColor(Gfx::Color(0.28f, 0.56f, 1.0f, 0.0f))); pc->SetColor(Gfx::Color(0.28f, 0.56f, 1.0f, 0.0f));
pos.x += ddim.x; pos.x += ddim.x;
pc = pw->CreateColor(pos, ddim, -1, EVENT_OBJECT_FCOLORr); pc = pw->CreateColor(pos, ddim, -1, EVENT_OBJECT_FCOLORr);
pc->SetColor(GetColor(Gfx::Color(1.0f, 0.0f, 0.0f, 0.0f); pc->SetColor(Gfx::Color(1.0f, 0.0f, 0.0f, 0.0f));
pos.x += ddim.x; pos.x += ddim.x;
pc = pw->CreateColor(pos, ddim, -1, EVENT_OBJECT_FCOLORg); pc = pw->CreateColor(pos, ddim, -1, EVENT_OBJECT_FCOLORg);
pc->SetColor(GetColor(Gfx::Color(0.0f, 0.8f, 0.0f, 0.0f))); pc->SetColor(Gfx::Color(0.0f, 0.8f, 0.0f, 0.0f));
pos.x += ddim.x; pos.x += ddim.x;
pc = pw->CreateColor(pos, ddim, -1, EVENT_OBJECT_FCOLORy); pc = pw->CreateColor(pos, ddim, -1, EVENT_OBJECT_FCOLORy);
pc->SetColor(GetColor(Gfx::Color(1.0f, 0.93f, 0.0f, 0.0f); //0x00ffec00 pc->SetColor(Gfx::Color(1.0f, 0.93f, 0.0f, 0.0f)); //0x00ffec00
pos.x += ddim.x; pos.x += ddim.x;
pc = pw->CreateColor(pos, ddim, -1, EVENT_OBJECT_FCOLORv); pc = pw->CreateColor(pos, ddim, -1, EVENT_OBJECT_FCOLORv);
pc->SetColor(GetColor(Gfx::Color(0.82f, 0.004f, 0.99f, 0.0f); //0x00d101fe pc->SetColor(Gfx::Color(0.82f, 0.004f, 0.99f, 0.0f)); //0x00d101fe
} }
} }
@ -1577,7 +1538,7 @@ bool CBrain::CreateInterface(bool bSelect)
ddim.x = dim.x*0.5f; ddim.x = dim.x*0.5f;
ddim.y = dim.y*2.0f; ddim.y = dim.y*2.0f;
ps = pw->CreateSlider(pos, ddim, 0, EVENT_OBJECT_DIMSHIELD); ps = pw->CreateSlider(pos, ddim, 0, EVENT_OBJECT_DIMSHIELD);
ps->SetState(STATE_VALUE); ps->SetState(Ui::STATE_VALUE);
ps->SetLimit((RADIUS_SHIELD_MIN/g_unit), (RADIUS_SHIELD_MAX/g_unit)); ps->SetLimit((RADIUS_SHIELD_MIN/g_unit), (RADIUS_SHIELD_MAX/g_unit));
ps->SetArrowStep(1.0f); ps->SetArrowStep(1.0f);
} }
@ -1628,35 +1589,35 @@ bool CBrain::CreateInterface(bool bSelect)
pos.x = ox+sx*10.15f; pos.x = ox+sx*10.15f;
pos.y = oy+sy*1.50f; pos.y = oy+sy*1.50f;
pc = pw->CreateColor(pos, ddim, -1, EVENT_OBJECT_PEN1); // black pc = pw->CreateColor(pos, ddim, -1, EVENT_OBJECT_PEN1); // black
pc->SetColor(GetColor(Gfx::Color(0.0f, 0.0f, 0.0f, 0.0f))); pc->SetColor(Gfx::Color(0.0f, 0.0f, 0.0f, 0.0f));
pos.x = ox+sx*10.65f; pos.x = ox+sx*10.65f;
pos.y = oy+sy*1.25f; pos.y = oy+sy*1.25f;
pc = pw->CreateColor(pos, ddim, -1, EVENT_OBJECT_PEN2); // yellow pc = pw->CreateColor(pos, ddim, -1, EVENT_OBJECT_PEN2); // yellow
pc->SetColor(GetColor(Gfx::Color(1.0f, 1.0f, 0.0f, 0.0f ))); pc->SetColor(Gfx::Color(1.0f, 1.0f, 0.0f, 0.0f ));
pos.x = ox+sx*10.90f; pos.x = ox+sx*10.90f;
pos.y = oy+sy*0.75f; pos.y = oy+sy*0.75f;
pc = pw->CreateColor(pos, ddim, -1, EVENT_OBJECT_PEN3); // orange pc = pw->CreateColor(pos, ddim, -1, EVENT_OBJECT_PEN3); // orange
pc->SetColor(GetColor(Gfx::Color(1.0f, 0.53f, 0x00, 0x00))); pc->SetColor(Gfx::Color(1.0f, 0.53f, 0x00, 0x00));
pos.x = ox+sx*10.65f; pos.x = ox+sx*10.65f;
pos.y = oy+sy*0.25f; pos.y = oy+sy*0.25f;
pc = pw->CreateColor(pos, ddim, -1, EVENT_OBJECT_PEN4); // red pc = pw->CreateColor(pos, ddim, -1, EVENT_OBJECT_PEN4); // red
pc->SetColor(GetColor(Gfx::Color(1.0f, 0.0f, 0.0f, 0.0f))); pc->SetColor(Gfx::Color(1.0f, 0.0f, 0.0f, 0.0f));
pos.x = ox+sx*10.15f; pos.x = ox+sx*10.15f;
pos.y = oy+sy*0.00f; pos.y = oy+sy*0.00f;
pc = pw->CreateColor(pos, ddim, -1, EVENT_OBJECT_PEN5); // violet pc = pw->CreateColor(pos, ddim, -1, EVENT_OBJECT_PEN5); // violet
pc->SetColor(GetColor(Gfx::Color(1.0f, 0.0f, 1.0f 0.0f ))); pc->SetColor(Gfx::Color(1.0f, 0.0f, 1.0f, 0.0f));
pos.x = ox+sx*9.65f; pos.x = ox+sx*9.65f;
pos.y = oy+sy*0.25f; pos.y = oy+sy*0.25f;
pc = pw->CreateColor(pos, ddim, -1, EVENT_OBJECT_PEN6); // blue pc = pw->CreateColor(pos, ddim, -1, EVENT_OBJECT_PEN6); // blue
pc->SetColor(GetColor(Gfx::Color(0.0f, 0.4f, 1.0f, 0.0f)));//0x000066ff)); pc->SetColor(Gfx::Color(0.0f, 0.4f, 1.0f, 0.0f));//0x000066ff));
pos.x = ox+sx*9.40f; pos.x = ox+sx*9.40f;
pos.y = oy+sy*0.75f; pos.y = oy+sy*0.75f;
pc = pw->CreateColor(pos, ddim, -1, EVENT_OBJECT_PEN7); // green pc = pw->CreateColor(pos, ddim, -1, EVENT_OBJECT_PEN7); // green
pc->SetColor(GetColor(Gfx::Color(0.0f, 0.0f, 0.8f, 0.0f)));//0x0000cc00)); pc->SetColor(Gfx::Color(0.0f, 0.0f, 0.8f, 0.0f));//0x0000cc00));
pos.x = ox+sx*9.65f; pos.x = ox+sx*9.65f;
pos.y = oy+sy*1.25f; pos.y = oy+sy*1.25f;
pc = pw->CreateColor(pos, ddim, -1, EVENT_OBJECT_PEN8); // brown pc = pw->CreateColor(pos, ddim, -1, EVENT_OBJECT_PEN8); // brown
pc->SetColor(GetColor(Gfx::Color(0.53f, 0.27f, 0.0f, 0.0f)));//0x00884400)); pc->SetColor(Gfx::Color(0.53f, 0.27f, 0.0f, 0.0f));//0x00884400));
pos.x = ox+sx*6.9f; pos.x = ox+sx*6.9f;
pos.y = oy+sy*1.2f; pos.y = oy+sy*1.2f;
@ -1869,7 +1830,7 @@ bool CBrain::CreateInterface(bool bSelect)
pc = (CCompass*)pw->SearchControl(EVENT_OBJECT_COMPASS); pc = (CCompass*)pw->SearchControl(EVENT_OBJECT_COMPASS);
if ( pc != 0 ) if ( pc != 0 )
{ {
pc->SetState(STATE_VISIBLE, m_main->GetShowMap()); pc->SetState(Ui::STATE_VISIBLE, m_main->GetShowMap());
} }
} }
#endif #endif
@ -1895,7 +1856,7 @@ bool CBrain::CreateInterface(bool bSelect)
ddim.x = 600.0f/640.0f; ddim.x = 600.0f/640.0f;
ddim.y = 340.0f/480.0f; ddim.y = 340.0f/480.0f;
pt = pw->CreateTarget(pos, ddim, 0, EVENT_OBJECT_TARGET); pt = pw->CreateTarget(pos, ddim, 0, EVENT_OBJECT_TARGET);
pt->ClearState(STATE_GLINT); pt->ClearState(Ui::STATE_GLINT);
} }
ddim.x = 64.0f/640.0f; ddim.x = 64.0f/640.0f;
@ -1935,14 +1896,14 @@ bool CBrain::CreateInterface(bool bSelect)
void CBrain::UpdateInterface(float rTime) void CBrain::UpdateInterface(float rTime)
{ {
Ui::CWindow* pw; Ui::CWindow* pw;
#if _TEEN /* TODO: #if _TEEN
CButton* pb; Ui::CButton* pb;
#endif #endif*/
CGauge* pg; Ui::CGauge* pg;
CCompass* pc; Ui::CCompass* pc;
CGroup* pgr; Ui::CGroup* pgr;
CTarget* ptg; Ui::CTarget* ptg;
CObject* power; CObject* power;
Math::Vector pos, hPos; Math::Vector pos, hPos;
Math::Point ppos; Math::Point ppos;
float energy, limit, angle, range; float energy, limit, angle, range;
@ -2045,7 +2006,7 @@ void CBrain::UpdateInterface(float rTime)
angle = -(m_object->GetAngleY(0)+Math::PI/2.0f); angle = -(m_object->GetAngleY(0)+Math::PI/2.0f);
pc->SetDirection(angle); pc->SetDirection(angle);
pc->SetState(STATE_VISIBLE, m_main->GetShowMap()); pc->SetState(Ui::STATE_VISIBLE, m_main->GetShowMap());
} }
#if _TEEN #if _TEEN
@ -2054,16 +2015,16 @@ void CBrain::UpdateInterface(float rTime)
{ {
if ( m_bTraceRecord && Math::Mod(m_time, 0.4f) >= 0.2f ) if ( m_bTraceRecord && Math::Mod(m_time, 0.4f) >= 0.2f )
{ {
pb->SetState(STATE_CHECK); pb->SetState(Ui::STATE_CHECK);
} }
else else
{ {
pb->ClearState(STATE_CHECK); pb->ClearState(Ui::STATE_CHECK);
} }
} }
#endif #endif
bOnBoard = m_camera->GetType() == CAMERA_ONBOARD; bOnBoard = m_camera->GetType() == Gfx::CAM_TYPE_ONBOARD;
pgr = static_cast< Ui::CGroup* >(pw->SearchControl(EVENT_OBJECT_CROSSHAIR)); pgr = static_cast< Ui::CGroup* >(pw->SearchControl(EVENT_OBJECT_CROSSHAIR));
if ( pgr != 0 ) if ( pgr != 0 )
@ -2087,11 +2048,11 @@ void CBrain::UpdateInterface(float rTime)
ppos.y += m_object->GetGunGoalV()/1.3f; ppos.y += m_object->GetGunGoalV()/1.3f;
pgr->SetPos(ppos); pgr->SetPos(ppos);
#endif #endif
pgr->SetState(STATE_VISIBLE, !m_main->GetFriendAim()); pgr->SetState(Ui::STATE_VISIBLE, !m_main->GetFriendAim());
} }
else else
{ {
pgr->ClearState(STATE_VISIBLE); pgr->ClearState(Ui::STATE_VISIBLE);
} }
} }
@ -2100,36 +2061,36 @@ void CBrain::UpdateInterface(float rTime)
{ {
if ( bOnBoard ) if ( bOnBoard )
{ {
ptg->SetState(STATE_VISIBLE); ptg->SetState(Ui::STATE_VISIBLE);
} }
else else
{ {
ptg->ClearState(STATE_VISIBLE); ptg->ClearState(Ui::STATE_VISIBLE);
} }
} }
pgr = static_cast< Ui::CGroup* >(pw->SearchControl(EVENT_OBJECT_CORNERul)); pgr = static_cast< Ui::CGroup* >(pw->SearchControl(EVENT_OBJECT_CORNERul));
if ( pgr != 0 ) if ( pgr != 0 )
{ {
pgr->SetState(STATE_VISIBLE, bOnBoard); pgr->SetState(Ui::STATE_VISIBLE, bOnBoard);
} }
pgr = static_cast< Ui::CGroup* >(pw->SearchControl(EVENT_OBJECT_CORNERur)); pgr = static_cast< Ui::CGroup* >(pw->SearchControl(EVENT_OBJECT_CORNERur));
if ( pgr != 0 ) if ( pgr != 0 )
{ {
pgr->SetState(STATE_VISIBLE, bOnBoard); pgr->SetState(Ui::STATE_VISIBLE, bOnBoard);
} }
pgr = static_cast< Ui::CGroup* >(pw->SearchControl(EVENT_OBJECT_CORNERdl)); pgr = static_cast< Ui::CGroup* >(pw->SearchControl(EVENT_OBJECT_CORNERdl));
if ( pgr != 0 ) if ( pgr != 0 )
{ {
pgr->SetState(STATE_VISIBLE, bOnBoard); pgr->SetState(Ui::STATE_VISIBLE, bOnBoard);
} }
pgr = static_cast< Ui::CGroup* >(pw->SearchControl(EVENT_OBJECT_CORNERdr)); pgr = static_cast< Ui::CGroup* >(pw->SearchControl(EVENT_OBJECT_CORNERdr));
if ( pgr != 0 ) if ( pgr != 0 )
{ {
pgr->SetState(STATE_VISIBLE, bOnBoard); pgr->SetState(Ui::STATE_VISIBLE, bOnBoard);
} }
} }
@ -2213,7 +2174,7 @@ void CBrain::UpdateInterface()
pb = static_cast< Ui::CButton* >(pw->SearchControl(EVENT_OBJECT_GFLAT)); pb = static_cast< Ui::CButton* >(pw->SearchControl(EVENT_OBJECT_GFLAT));
if ( pb != 0 ) if ( pb != 0 )
{ {
pb->SetState(STATE_VISIBLE, m_engine->GetGroundSpot()); pb->SetState(Ui::STATE_VISIBLE, m_engine->GetGroundSpot());
} }
if ( type == OBJECT_HUMAN || // builder? if ( type == OBJECT_HUMAN || // builder?
@ -2347,49 +2308,49 @@ void CBrain::UpdateInterface()
pb = static_cast< Ui::CButton* >(pw->SearchControl(EVENT_OBJECT_PEN0)); pb = static_cast< Ui::CButton* >(pw->SearchControl(EVENT_OBJECT_PEN0));
if ( pb != 0 ) if ( pb != 0 )
{ {
pb->ClearState(STATE_CHECK); pb->ClearState(Ui::STATE_CHECK);
} }
color = m_object->GetTraceColor(); color = m_object->GetTraceColor();
pc = static_cast< Ui::CColor* >(pw->SearchControl(EVENT_OBJECT_PEN1)); pc = static_cast< Ui::CColor* >(pw->SearchControl(EVENT_OBJECT_PEN1));
if ( pc != 0 ) if ( pc != 0 )
{ {
pc->SetState(STATE_CHECK, color==1); pc->SetState(Ui::STATE_CHECK, color==1);
} }
pc = static_cast< Ui::CColor* >(pw->SearchControl(EVENT_OBJECT_PEN2)); pc = static_cast< Ui::CColor* >(pw->SearchControl(EVENT_OBJECT_PEN2));
if ( pc != 0 ) if ( pc != 0 )
{ {
pc->SetState(STATE_CHECK, color==8); pc->SetState(Ui::STATE_CHECK, color==8);
} }
pc = static_cast< Ui::CColor* >(pw->SearchControl(EVENT_OBJECT_PEN3)); pc = static_cast< Ui::CColor* >(pw->SearchControl(EVENT_OBJECT_PEN3));
if ( pc != 0 ) if ( pc != 0 )
{ {
pc->SetState(STATE_CHECK, color==7); pc->SetState(Ui::STATE_CHECK, color==7);
} }
pc = static_cast< Ui::CColor* >(pw->SearchControl(EVENT_OBJECT_PEN4)); pc = static_cast< Ui::CColor* >(pw->SearchControl(EVENT_OBJECT_PEN4));
if ( pc != 0 ) if ( pc != 0 )
{ {
pc->SetState(STATE_CHECK, color==4); pc->SetState(Ui::STATE_CHECK, color==4);
} }
pc = static_cast< Ui::CColor* >(pw->SearchControl(EVENT_OBJECT_PEN5)); pc = static_cast< Ui::CColor* >(pw->SearchControl(EVENT_OBJECT_PEN5));
if ( pc != 0 ) if ( pc != 0 )
{ {
pc->SetState(STATE_CHECK, color==6); pc->SetState(Ui::STATE_CHECK, color==6);
} }
pc = static_cast< Ui::CColor* >(pw->SearchControl(EVENT_OBJECT_PEN6)); pc = static_cast< Ui::CColor* >(pw->SearchControl(EVENT_OBJECT_PEN6));
if ( pc != 0 ) if ( pc != 0 )
{ {
pc->SetState(STATE_CHECK, color==14); pc->SetState(Ui::STATE_CHECK, color==14);
} }
pc = static_cast< Ui::CColor* >(pw->SearchControl(EVENT_OBJECT_PEN7)); pc = static_cast< Ui::CColor* >(pw->SearchControl(EVENT_OBJECT_PEN7));
if ( pc != 0 ) if ( pc != 0 )
{ {
pc->SetState(STATE_CHECK, color==12); pc->SetState(Ui::STATE_CHECK, color==12);
} }
pc = static_cast< Ui::CColor* >(pw->SearchControl(EVENT_OBJECT_PEN8)); pc = static_cast< Ui::CColor* >(pw->SearchControl(EVENT_OBJECT_PEN8));
if ( pc != 0 ) if ( pc != 0 )
{ {
pc->SetState(STATE_CHECK, color==10); pc->SetState(Ui::STATE_CHECK, color==10);
} }
} }
else else
@ -2397,48 +2358,48 @@ void CBrain::UpdateInterface()
pb = static_cast< Ui::CButton* >(pw->SearchControl(EVENT_OBJECT_PEN0)); pb = static_cast< Ui::CButton* >(pw->SearchControl(EVENT_OBJECT_PEN0));
if ( pb != 0 ) if ( pb != 0 )
{ {
pb->SetState(STATE_CHECK); pb->SetState(Ui::STATE_CHECK);
} }
pc = static_cast< Ui::CColor* >(pw->SearchControl(EVENT_OBJECT_PEN1)); pc = static_cast< Ui::CColor* >(pw->SearchControl(EVENT_OBJECT_PEN1));
if ( pc != 0 ) if ( pc != 0 )
{ {
pc->ClearState(STATE_CHECK); pc->ClearState(Ui::STATE_CHECK);
} }
pc = static_cast< Ui::CColor* >(pw->SearchControl(EVENT_OBJECT_PEN2)); pc = static_cast< Ui::CColor* >(pw->SearchControl(EVENT_OBJECT_PEN2));
if ( pc != 0 ) if ( pc != 0 )
{ {
pc->ClearState(STATE_CHECK); pc->ClearState(Ui::STATE_CHECK);
} }
pc = static_cast< Ui::CColor* >(pw->SearchControl(EVENT_OBJECT_PEN3)); pc = static_cast< Ui::CColor* >(pw->SearchControl(EVENT_OBJECT_PEN3));
if ( pc != 0 ) if ( pc != 0 )
{ {
pc->ClearState(STATE_CHECK); pc->ClearState(Ui::STATE_CHECK);
} }
pc = static_cast< Ui::CColor* >(pw->SearchControl(EVENT_OBJECT_PEN4)); pc = static_cast< Ui::CColor* >(pw->SearchControl(EVENT_OBJECT_PEN4));
if ( pc != 0 ) if ( pc != 0 )
{ {
pc->ClearState(STATE_CHECK); pc->ClearState(Ui::STATE_CHECK);
} }
pc = static_cast< Ui::CColor* >(pw->SearchControl(EVENT_OBJECT_PEN5)); pc = static_cast< Ui::CColor* >(pw->SearchControl(EVENT_OBJECT_PEN5));
if ( pc != 0 ) if ( pc != 0 )
{ {
pc->ClearState(STATE_CHECK); pc->ClearState(Ui::STATE_CHECK);
} }
pc = static_cast< Ui::CColor* >(pw->SearchControl(EVENT_OBJECT_PEN6)); pc = static_cast< Ui::CColor* >(pw->SearchControl(EVENT_OBJECT_PEN6));
if ( pc != 0 ) if ( pc != 0 )
{ {
pc->ClearState(STATE_CHECK); pc->ClearState(Ui::STATE_CHECK);
} }
pc = static_cast< Ui::CColor* >(pw->SearchControl(EVENT_OBJECT_PEN7)); pc = static_cast< Ui::CColor* >(pw->SearchControl(EVENT_OBJECT_PEN7));
if ( pc != 0 ) if ( pc != 0 )
{ {
pc->ClearState(STATE_CHECK); pc->ClearState(Ui::STATE_CHECK);
} }
pc = static_cast< Ui::CColor* >(pw->SearchControl(EVENT_OBJECT_PEN8)); pc = static_cast< Ui::CColor* >(pw->SearchControl(EVENT_OBJECT_PEN8));
if ( pc != 0 ) if ( pc != 0 )
{ {
pc->ClearState(STATE_CHECK); pc->ClearState(Ui::STATE_CHECK);
} }
} }
#endif #endif
@ -2535,7 +2496,7 @@ void CBrain::CheckInterface(Ui::CWindow *pw, EventType event, bool bState)
control = pw->SearchControl(event); control = pw->SearchControl(event);
if ( control == 0 ) return; if ( control == 0 ) return;
control->SetState(STATE_CHECK, bState); control->SetState(Ui::STATE_CHECK, bState);
} }
// Changes the state of a button interface. // Changes the state of a button interface.
@ -2547,7 +2508,7 @@ void CBrain::EnableInterface(Ui::CWindow *pw, EventType event, bool bState)
control = pw->SearchControl(event); control = pw->SearchControl(event);
if ( control == 0 ) return; if ( control == 0 ) return;
control->SetState(STATE_ENABLE, bState); control->SetState(Ui::STATE_ENABLE, bState);
} }
// Changes the state of a button on the interface. // Changes the state of a button on the interface.
@ -2559,7 +2520,7 @@ void CBrain::DeadInterface(Ui::CWindow *pw, EventType event, bool bState)
control = pw->SearchControl(event); control = pw->SearchControl(event);
if ( control == 0 ) return; if ( control == 0 ) return;
control->SetState(STATE_DEAD, !bState); control->SetState(Ui::STATE_DEAD, !bState);
} }
// Change the default input state of a button interface. // Change the default input state of a button interface.
@ -2573,12 +2534,12 @@ void CBrain::DefaultEnter(Ui::CWindow *pw, EventType event, bool bState)
if ( bState ) if ( bState )
{ {
control->SetState(STATE_DEFAULT); control->SetState(Ui::STATE_DEFAULT);
m_defaultEnter = event; m_defaultEnter = event;
} }
else else
{ {
control->ClearState(STATE_DEFAULT); control->ClearState(Ui::STATE_DEFAULT);
} }
} }

View File

@ -18,9 +18,6 @@
#pragma once #pragma once
// #include <stdio.h>
#include "common/event.h" #include "common/event.h"
#include "common/misc.h" #include "common/misc.h"

View File

@ -17,14 +17,13 @@
// motion.cpp // motion.cpp
#include <stdio.h>
#include "object/motion/motion.h" #include "object/motion/motion.h"
#include "common/iman.h" #include "common/iman.h"
#include "script/cmdtoken.h" #include "script/cmdtoken.h"
#include <stdio.h>
#include <string.h>
// Object's constructor. // Object's constructor.

View File

@ -20,7 +20,7 @@
#include "common/event.h" #include "common/event.h"
#include "common/misc.h" #include "common/global.h"
#include "object/object.h" #include "object/object.h"

View File

@ -17,8 +17,6 @@
// motionvehicle.cpp // motionvehicle.cpp
#include <stdio.h>
#include "object/motion/motionvehicle.h" #include "object/motion/motionvehicle.h"
#include "graphics/engine/modelfile.h" #include "graphics/engine/modelfile.h"
@ -28,6 +26,8 @@
#include "object/brain.h" #include "object/brain.h"
#include "physics/physics.h" #include "physics/physics.h"
#include <stdio.h>
#include <string.h>

View File

@ -2760,7 +2760,7 @@ void CRobotMain::HiliteFrame(float rTime)
} }
//! Creates a tooltip //! Creates a tooltip
void CRobotMain::CreateTooltip(Math::Point pos, char* text) void CRobotMain::CreateTooltip(Math::Point pos, const char* text)
{ {
Math::Point corner; Math::Point corner;
corner.x = pos.x+0.022f; corner.x = pos.x+0.022f;
@ -6193,7 +6193,7 @@ Error CRobotMain::CheckEndMission(bool frame)
} }
//! Checks if the mission is finished after displaying a message //! Checks if the mission is finished after displaying a message
void CRobotMain::CheckEndMessage(char *message) void CRobotMain::CheckEndMessage(const char* message)
{ {
for (int t = 0; t < m_endTakeTotal; t++) for (int t = 0; t < m_endTakeTotal; t++)
{ {
@ -6222,7 +6222,7 @@ char* CRobotMain::GetObligatoryToken(int i)
} }
//! Checks if an instruction is part of the obligatory list //! Checks if an instruction is part of the obligatory list
int CRobotMain::IsObligatoryToken(char *token) int CRobotMain::IsObligatoryToken(const char* token)
{ {
for (int i = 0; i < m_obligatoryTotal; i++) for (int i = 0; i < m_obligatoryTotal; i++)
{ {
@ -6233,7 +6233,7 @@ int CRobotMain::IsObligatoryToken(char *token)
} }
//! Checks if an instruction is not part of the banned list //! Checks if an instruction is not part of the banned list
bool CRobotMain::IsProhibitedToken(char *token) bool CRobotMain::IsProhibitedToken(const char* token)
{ {
for (int i = 0; i < m_prohibitedTotal; i++) for (int i = 0; i < m_prohibitedTotal; i++)
{ {

View File

@ -189,11 +189,11 @@ public:
void ResetObject(); void ResetObject();
void ResetCreate(); void ResetCreate();
Error CheckEndMission(bool frame); Error CheckEndMission(bool frame);
void CheckEndMessage(char *message); void CheckEndMessage(const char* message);
int GetObligatoryToken(); int GetObligatoryToken();
char* GetObligatoryToken(int i); char* GetObligatoryToken(int i);
int IsObligatoryToken(char *token); int IsObligatoryToken(const char* token);
bool IsProhibitedToken(char *token); bool IsProhibitedToken(const char* token);
void UpdateMap(); void UpdateMap();
bool GetShowMap(); bool GetShowMap();

View File

@ -19,7 +19,8 @@
#pragma once #pragma once
#include "common/misc.h" #include "common/event.h"
#include "common/global.h"
#include "math/const.h" #include "math/const.h"

View File

@ -31,6 +31,8 @@
#include "physics/physics.h" #include "physics/physics.h"
#include "ui/displaytext.h" #include "ui/displaytext.h"
#include <string.h>
// Object's constructor. // Object's constructor.
CTaskBuild::CTaskBuild(CInstanceManager* iMan, CObject* object) CTaskBuild::CTaskBuild(CInstanceManager* iMan, CObject* object)

View File

@ -28,6 +28,7 @@
#include "math/geometry.h" #include "math/geometry.h"
#include "physics/physics.h" #include "physics/physics.h"
#include <string.h>
const float FLY_DIST_GROUND = 80.0f; // minimum distance to remain on the ground const float FLY_DIST_GROUND = 80.0f; // minimum distance to remain on the ground

View File

@ -22,7 +22,7 @@
#include "graphics/engine/particle.h" #include "graphics/engine/particle.h"
#include "object/auto/autoinfo.h" #include "object/auto/autoinfo.h"
#include <string.h>

View File

@ -26,6 +26,7 @@
#include "object/brain.h" #include "object/brain.h"
#include "physics/physics.h" #include "physics/physics.h"
#include <string.h>
const float ENERGY_TIME = 20.0f; // maximum duration if full battery const float ENERGY_TIME = 20.0f; // maximum duration if full battery

View File

@ -24,7 +24,7 @@
#include "common/misc.h" #include "common/global.h"
#include "object/object.h" #include "object/object.h"
#include "math/vector.h" #include "math/vector.h"

View File

@ -1,29 +1,17 @@
msgid "1.18 /e" msgid ""
msgstr "1.18 /d" msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Language: de_DE\n"
"X-Source-Language: en_US\n"
msgid "CeeBot-A 1.18" msgid "Colobot rules!"
msgstr "CeeBot-A 1.18" msgstr "Colobot ist wunderbar!"
msgid "CeeBot-Teen EDU 1.18" msgid "Colobot Gold"
msgstr "CeeBot-Teen EDU 1.18" msgstr "Colobot Gold"
msgid "CeeBot-A EDU 1.18"
msgstr "CeeBot-A EDU 1.18"
msgid "CeeBot-Teen PERSO 1.18"
msgstr "CeeBot-Teen PERSO 1.18"
msgid "CeeBot-A PERSO 1.18"
msgstr "CeeBot-A PERSO 1.18"
msgid "CeeBot-Teen DEMO 1.18"
msgstr "CeeBot-Teen DEMO 1.18"
msgid "CeeBot-A DEMO 1.18"
msgstr "CeeBot-A DEMO 1.18"
msgid "Demo 1.18 /e"
msgstr "Demo 1.18 /d"
msgid "SatCom" msgid "SatCom"
msgstr "SatCom" msgstr "SatCom"
@ -55,9 +43,6 @@ msgstr "Neu ..."
msgid " or " msgid " or "
msgstr " oder " msgstr " oder "
msgid "CeeBot"
msgstr "CeeBot"
msgid "COLOBOT" msgid "COLOBOT"
msgstr "COLOBOT" msgstr "COLOBOT"
@ -154,12 +139,6 @@ msgstr "Farbe des Anzugs:"
msgid "Strip color:" msgid "Strip color:"
msgstr "Farbe der Streifen:" msgstr "Farbe der Streifen:"
msgid "Do you want to quit CeeBot ?"
msgstr "Wollen Sie CeeBot schließen ?"
msgid "Quit\\Quit CeeBot"
msgstr "Schließen\\CeeBot schließen"
msgid "Do you want to quit COLOBOT ?" msgid "Do you want to quit COLOBOT ?"
msgstr "Wollen Sie COLOBOT schließen ?" msgstr "Wollen Sie COLOBOT schließen ?"
@ -223,8 +202,10 @@ msgstr "\\c; (keine)\\n;\n"
msgid "\\b;Error\n" msgid "\\b;Error\n"
msgstr "\\b;Fehler\n" msgstr "\\b;Fehler\n"
msgid "The list is only available if a \\l;radar station\\u object\\radar; is working.\n" msgid ""
msgstr "Die Liste ist ohne \\l;Radar\\u object\\radar; nicht verfügbar !\n" "The list is only available if a \\l;radar station\\u object\\radar; is "
"working.\n"
msgstr "Die Liste ist ohne \\l;Radar\\u object\\radar; nicht verfügbar.\n"
msgid "Open" msgid "Open"
msgstr "Öffnen" msgstr "Öffnen"
@ -266,7 +247,7 @@ msgid "Next"
msgstr "Nächster" msgstr "Nächster"
msgid "Previous" msgid "Previous"
msgstr "Vorherg." msgstr "Vorherg"
msgid "Menu (\\key quit;)" msgid "Menu (\\key quit;)"
msgstr "Menü (\\key quit;)" msgstr "Menü (\\key quit;)"
@ -304,9 +285,6 @@ msgstr "Speichern\\Aktuelle Mission speichern"
msgid "Load\\Load a saved mission" msgid "Load\\Load a saved mission"
msgstr "Laden\\Eine gespeicherte Mission öffnen" msgstr "Laden\\Eine gespeicherte Mission öffnen"
msgid "\\Return to CeeBot"
msgstr "\\Zurück zu CeeBot"
msgid "\\Return to COLOBOT" msgid "\\Return to COLOBOT"
msgstr "\\Zurück zu COLOBOT" msgstr "\\Zurück zu COLOBOT"
@ -314,7 +292,7 @@ msgid "<< Back \\Back to the previous screen"
msgstr "<< Zurück \\Zurück zum Hauptmenü" msgstr "<< Zurück \\Zurück zum Hauptmenü"
msgid "Play\\Start mission!" msgid "Play\\Start mission!"
msgstr "Spielen ...\\Los geht's" msgstr "Spielen ...\\Los geht's!"
msgid "Device\\Driver and resolution settings" msgid "Device\\Driver and resolution settings"
msgstr "Bildschirm\\Driver und Bildschirmauflösung" msgstr "Bildschirm\\Driver und Bildschirmauflösung"
@ -401,10 +379,11 @@ msgid "Exit film\\Film at the exit of exercises"
msgstr "Zurücksetzen \\Kleine Show beim Zurücksetzen in den Übungen" msgstr "Zurücksetzen \\Kleine Show beim Zurücksetzen in den Übungen"
msgid "Friendly fire\\Your shooting can damage your own objects " msgid "Friendly fire\\Your shooting can damage your own objects "
msgstr "Eigenbeschuss\\Ihre Einheiten werden von Ihren Waffen beschädigt." msgstr "Eigenbeschuss\\Ihre Einheiten werden von Ihren Waffen beschädigt"
msgid "Scrolling\\Scrolling when the mouse touches right or left border" msgid "Scrolling\\Scrolling when the mouse touches right or left border"
msgstr "Kameradrehung mit der Maus\\Die Kamera dreht wenn die Maus den Rand erreicht" msgstr ""
"Kameradrehung mit der Maus\\Die Kamera dreht wenn die Maus den Rand erreicht"
msgid "Mouse inversion X\\Inversion of the scrolling direction on the X axis" msgid "Mouse inversion X\\Inversion of the scrolling direction on the X axis"
msgstr "Umkehr X\\Umkehr der Kameradrehung X-Achse" msgstr "Umkehr X\\Umkehr der Kameradrehung X-Achse"
@ -425,7 +404,8 @@ msgid "Big indent\\Indent 2 or 4 spaces per level defined by braces"
msgstr "Einrücken mit 4 Leerstellen\\Einrücken mit 2 oder 4 Leerstellen" msgstr "Einrücken mit 4 Leerstellen\\Einrücken mit 2 oder 4 Leerstellen"
msgid "Access to solutions\\Show program \"4: Solution\" in the exercises" msgid "Access to solutions\\Show program \"4: Solution\" in the exercises"
msgstr "Lösung zugänglich\\Die Lösung ist im Programmslot \"4: Lösung\" zugänglich" msgstr ""
"Lösung zugänglich\\Die Lösung ist im Programmslot \"4: Lösung\" zugänglich"
msgid "Standard controls\\Standard key functions" msgid "Standard controls\\Standard key functions"
msgstr "Alles zurücksetzen\\Standarddefinition aller Tasten" msgstr "Alles zurücksetzen\\Standarddefinition aller Tasten"
@ -454,8 +434,9 @@ msgstr "Andere Kamera\\Sichtpunkt einstellen"
msgid "Previous object\\Selects the previous object" msgid "Previous object\\Selects the previous object"
msgstr "Vorherg. Auswahl\\Das vorhergehende Objekt auswählen" msgstr "Vorherg. Auswahl\\Das vorhergehende Objekt auswählen"
msgid "Standard action\\Standard action of the bot (take/grab, shoot, sniff, etc)" msgid ""
msgstr "Standardhandlung\\Führt die Standardhandlung des Roboters aus." "Standard action\\Standard action of the bot (take/grab, shoot, sniff, etc)"
msgstr "Standardhandlung\\Führt die Standardhandlung des Roboters aus"
msgid "Camera closer\\Moves the camera forward" msgid "Camera closer\\Moves the camera forward"
msgstr "Kamera näher\\Bewegung der Kamera vorwärts" msgstr "Kamera näher\\Bewegung der Kamera vorwärts"
@ -523,7 +504,8 @@ msgstr "Normal\\Normale Lautstärke"
msgid "Use a joystick\\Joystick or keyboard" msgid "Use a joystick\\Joystick or keyboard"
msgstr "Joystick\\Joystick oder Tastatur" msgstr "Joystick\\Joystick oder Tastatur"
msgid "Access to solution\\Shows the solution (detailed instructions for missions)" msgid ""
"Access to solution\\Shows the solution (detailed instructions for missions)"
msgstr "Zeigt die Lösung\\Zeigt nach 3mal Scheitern die Lösung" msgstr "Zeigt die Lösung\\Zeigt nach 3mal Scheitern die Lösung"
msgid "\\New player name" msgid "\\New player name"
@ -1312,22 +1294,6 @@ msgstr "Fehler"
msgid "Unknown command" msgid "Unknown command"
msgstr "Befehl unbekannt" msgstr "Befehl unbekannt"
msgid "CeeBot not installed."
msgstr "CeeBot wurde nicht installiert."
msgid ""
"Please insert the CeeBot CD\n"
"and re-run the game."
msgstr "Legen Sie die CeeBot-CD ein\nund starten Sie das Spiel neu."
msgid "COLOBOT not installed."
msgstr "COLOBOT wurde nicht installiert."
msgid ""
"Please insert the COLOBOT CD\n"
"and re-run the game."
msgstr "Legen Sie die COLOBOT-CD ein\nund starten Sie das Spiel neu."
msgid "Inappropriate bot" msgid "Inappropriate bot"
msgstr "Roboter ungeeignet" msgstr "Roboter ungeeignet"
@ -1490,8 +1456,11 @@ msgstr "Zu nahe an einer anderen Fahne"
msgid "No flag nearby" msgid "No flag nearby"
msgstr "Keine Fahne in Reichweite" msgstr "Keine Fahne in Reichweite"
msgid "The mission is not accomplished yet (press \\key help; for more details)" msgid ""
msgstr "Mission noch nicht beendet (Drücken Sie auf \\key help; für weitere Informationen)" "The mission is not accomplished yet (press \\key help; for more details)"
msgstr ""
"Mission noch nicht beendet (Drücken Sie auf \\key help; für weitere "
"Informationen)"
msgid "Bot destroyed" msgid "Bot destroyed"
msgstr "Roboter zerstört" msgstr "Roboter zerstört"
@ -1647,7 +1616,9 @@ msgid "Instruction \"break\" outside a loop"
msgstr "Anweisung \"break\" außerhalb einer Schleife" msgstr "Anweisung \"break\" außerhalb einer Schleife"
msgid "A label must be followed by \"for\", \"while\", \"do\" or \"switch\"" msgid "A label must be followed by \"for\", \"while\", \"do\" or \"switch\""
msgstr "Ein Label kann nur vor den Anweisungen \"for\", \"while\", \"do\" oder \"switch\" vorkommen" msgstr ""
"Ein Label kann nur vor den Anweisungen \"for\", \"while\", \"do\" oder "
"\"switch\" vorkommen"
msgid "This label does not exist" msgid "This label does not exist"
msgstr "Dieses Label existiert nicht" msgstr "Dieses Label existiert nicht"

View File

@ -1,29 +1,17 @@
msgid "1.18 /e" msgid ""
msgstr "1.18 /f" msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
"X-Language: fr_FR\n"
"X-Source-Language: en_US\n"
msgid "CeeBot-A 1.18" msgid "Colobot rules!"
msgstr "CeeBot-A 1.18" msgstr "Colobot est super!"
msgid "CeeBot-Teen EDU 1.18" msgid "Colobot Gold"
msgstr "CeeBot-Teen EDU 1.18" msgstr "Colobot Gold"
msgid "CeeBot-A EDU 1.18"
msgstr "CeeBot-A EDU 1.18"
msgid "CeeBot-Teen PERSO 1.18"
msgstr "CeeBot-Teen PERSO 1.18"
msgid "CeeBot-A PERSO 1.18"
msgstr "CeeBot-A PERSO 1.18"
msgid "CeeBot-Teen DEMO 1.18"
msgstr "CeeBot-Teen DEMO 1.18"
msgid "CeeBot-A DEMO 1.18"
msgstr "CeeBot-A DEMO 1.18"
msgid "Demo 1.18 /e"
msgstr "Demo 1.18 /f"
msgid "SatCom" msgid "SatCom"
msgstr "SatCom" msgstr "SatCom"
@ -55,9 +43,6 @@ msgstr "Nouveau ..."
msgid " or " msgid " or "
msgstr " ou " msgstr " ou "
msgid "CeeBot"
msgstr "CeeBot"
msgid "COLOBOT" msgid "COLOBOT"
msgstr "COLOBOT" msgstr "COLOBOT"
@ -154,12 +139,6 @@ msgstr "Couleur de la combinaison :"
msgid "Strip color:" msgid "Strip color:"
msgstr "Couleur des bandes :" msgstr "Couleur des bandes :"
msgid "Do you want to quit CeeBot ?"
msgstr "Voulez-vous quitter CeeBot ?"
msgid "Quit\\Quit CeeBot"
msgstr "Quitter\\Quitter CeeBot"
msgid "Do you want to quit COLOBOT ?" msgid "Do you want to quit COLOBOT ?"
msgstr "Voulez-vous quitter COLOBOT ?" msgstr "Voulez-vous quitter COLOBOT ?"
@ -223,8 +202,10 @@ msgstr "\\c; (aucun)\\n;\n"
msgid "\\b;Error\n" msgid "\\b;Error\n"
msgstr "\\b;Erreur\n" msgstr "\\b;Erreur\n"
msgid "The list is only available if a \\l;radar station\\u object\\radar; is working.\n" msgid ""
msgstr "Liste non disponible sans \\l;radar\\u object\\radar; !\n" "The list is only available if a \\l;radar station\\u object\\radar; is "
"working.\n"
msgstr "Liste non disponible sans \\l;radar\\u object\\radar;.\n"
msgid "Open" msgid "Open"
msgstr "Ouvrir" msgstr "Ouvrir"
@ -304,9 +285,6 @@ msgstr "Enregistrer\\Enregistrer la mission en cours"
msgid "Load\\Load a saved mission" msgid "Load\\Load a saved mission"
msgstr "Charger\\Charger une mission enregistrée" msgstr "Charger\\Charger une mission enregistrée"
msgid "\\Return to CeeBot"
msgstr "\\Retourner dans CeeBot"
msgid "\\Return to COLOBOT" msgid "\\Return to COLOBOT"
msgstr "\\Retourner dans COLOBOT" msgstr "\\Retourner dans COLOBOT"
@ -314,7 +292,7 @@ msgid "<< Back \\Back to the previous screen"
msgstr "<< Retour \\Retour au niveau précédent" msgstr "<< Retour \\Retour au niveau précédent"
msgid "Play\\Start mission!" msgid "Play\\Start mission!"
msgstr "Jouer ...\\Démarrer l'action" msgstr "Jouer ...\\Démarrer l'action!"
msgid "Device\\Driver and resolution settings" msgid "Device\\Driver and resolution settings"
msgstr "Affichage\\Pilote et résolution d'affichage" msgstr "Affichage\\Pilote et résolution d'affichage"
@ -404,13 +382,17 @@ msgid "Friendly fire\\Your shooting can damage your own objects "
msgstr "Dégâts ŕ soi-męme\\Vos tirs infligent des dommages ŕ vos unités" msgstr "Dégâts ŕ soi-męme\\Vos tirs infligent des dommages ŕ vos unités"
msgid "Scrolling\\Scrolling when the mouse touches right or left border" msgid "Scrolling\\Scrolling when the mouse touches right or left border"
msgstr "Défilement dans les bords\\Défilement lorsque la souris touches les bords gauche ou droite" msgstr ""
"Défilement dans les bords\\Défilement lorsque la souris touches les bords "
"gauche ou droite"
msgid "Mouse inversion X\\Inversion of the scrolling direction on the X axis" msgid "Mouse inversion X\\Inversion of the scrolling direction on the X axis"
msgstr "Inversion souris X\\Inversion de la rotation lorsque la souris touche un bord" msgstr ""
"Inversion souris X\\Inversion de la rotation lorsque la souris touche un bord"
msgid "Mouse inversion Y\\Inversion of the scrolling direction on the Y axis" msgid "Mouse inversion Y\\Inversion of the scrolling direction on the Y axis"
msgstr "Inversion souris Y\\Inversion de la rotation lorsque la souris touche un bord" msgstr ""
"Inversion souris Y\\Inversion de la rotation lorsque la souris touche un bord"
msgid "Quake at explosions\\The screen shakes at explosions" msgid "Quake at explosions\\The screen shakes at explosions"
msgstr "Secousses lors d'explosions\\L'écran vibre lors d'une explosion" msgstr "Secousses lors d'explosions\\L'écran vibre lors d'une explosion"
@ -454,7 +436,8 @@ msgstr "Changement de caméra\\Autre de point de vue"
msgid "Previous object\\Selects the previous object" msgid "Previous object\\Selects the previous object"
msgstr "Sélection précédente\\Sélectionne l'objet précédent" msgstr "Sélection précédente\\Sélectionne l'objet précédent"
msgid "Standard action\\Standard action of the bot (take/grab, shoot, sniff, etc)" msgid ""
"Standard action\\Standard action of the bot (take/grab, shoot, sniff, etc)"
msgstr "Action standard\\Action du bouton avec le cadre rouge" msgstr "Action standard\\Action du bouton avec le cadre rouge"
msgid "Camera closer\\Moves the camera forward" msgid "Camera closer\\Moves the camera forward"
@ -523,7 +506,8 @@ msgstr "Normal\\Niveaux normaux"
msgid "Use a joystick\\Joystick or keyboard" msgid "Use a joystick\\Joystick or keyboard"
msgstr "Utilise un joystick\\Joystick ou clavier" msgstr "Utilise un joystick\\Joystick ou clavier"
msgid "Access to solution\\Shows the solution (detailed instructions for missions)" msgid ""
"Access to solution\\Shows the solution (detailed instructions for missions)"
msgstr "Accčs ŕ la solution\\Donne la solution" msgstr "Accčs ŕ la solution\\Donne la solution"
msgid "\\New player name" msgid "\\New player name"
@ -1312,22 +1296,6 @@ msgstr "Erreur"
msgid "Unknown command" msgid "Unknown command"
msgstr "Commande inconnue" msgstr "Commande inconnue"
msgid "CeeBot not installed."
msgstr "CeeBot n'est pas installé."
msgid ""
"Please insert the CeeBot CD\n"
"and re-run the game."
msgstr "Veuillez mettre le CD de CeeBot\net relancer le jeu."
msgid "COLOBOT not installed."
msgstr "COLOBOT n'est pas installé."
msgid ""
"Please insert the COLOBOT CD\n"
"and re-run the game."
msgstr "Veuillez mettre le CD de COLOBOT\net relancer le jeu."
msgid "Inappropriate bot" msgid "Inappropriate bot"
msgstr "Robot inadapté" msgstr "Robot inadapté"
@ -1490,8 +1458,10 @@ msgstr "Trop proche d'un drapeau existant"
msgid "No flag nearby" msgid "No flag nearby"
msgstr "Aucun drapeau ŕ proximité" msgstr "Aucun drapeau ŕ proximité"
msgid "The mission is not accomplished yet (press \\key help; for more details)" msgid ""
msgstr "La misssion n'est pas terminée (appuyez sur \\key help; pour plus de détails)" "The mission is not accomplished yet (press \\key help; for more details)"
msgstr ""
"La misssion n'est pas terminée (appuyez sur \\key help; pour plus de détails)"
msgid "Bot destroyed" msgid "Bot destroyed"
msgstr "Robot détruit" msgstr "Robot détruit"
@ -1521,7 +1491,8 @@ msgid "Plans for tracked robots available "
msgstr "Fabrication d'un robot ŕ chenilles possible" msgstr "Fabrication d'un robot ŕ chenilles possible"
msgid "You can fly with the keys (\\key gup;) and (\\key gdown;)" msgid "You can fly with the keys (\\key gup;) and (\\key gdown;)"
msgstr "Il est possible de voler avec les touches (\\key gup;) et (\\key gdown;)" msgstr ""
"Il est possible de voler avec les touches (\\key gup;) et (\\key gdown;)"
msgid "Plans for thumper available" msgid "Plans for thumper available"
msgstr "Fabrication d'un robot secoueur possible" msgstr "Fabrication d'un robot secoueur possible"
@ -1647,7 +1618,9 @@ msgid "Instruction \"break\" outside a loop"
msgstr "Instruction \"break\" en dehors d'une boucle" msgstr "Instruction \"break\" en dehors d'une boucle"
msgid "A label must be followed by \"for\", \"while\", \"do\" or \"switch\"" msgid "A label must be followed by \"for\", \"while\", \"do\" or \"switch\""
msgstr "Un label ne peut se placer que devant un \"for\", un \"while\", un \"do\" ou un \"switch\"" msgstr ""
"Un label ne peut se placer que devant un \"for\", un \"while\", un \"do\" ou "
"un \"switch\""
msgid "This label does not exist" msgid "This label does not exist"
msgstr "Cette étiquette n'existe pas" msgstr "Cette étiquette n'existe pas"

View File

@ -1,29 +1,17 @@
msgid "1.18 /e" msgid ""
msgstr "Wersja 1.18 /pl" msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
"X-Language: pl_PL\n"
"X-Source-Language: en_US\n"
msgid "CeeBot-A 1.18" msgid "Colobot rules!"
msgstr "CeeBot-A 1.18" msgstr "Colobot rządzi!"
msgid "CeeBot-Teen EDU 1.18" msgid "Colobot Gold"
msgstr "CeeBot-Teen EDU 1.18" msgstr "Colobot Gold"
msgid "CeeBot-A EDU 1.18"
msgstr "CeeBot-A EDU 1.18"
msgid "CeeBot-Teen PERSO 1.18"
msgstr "CeeBot-Teen PERSO 1.18"
msgid "CeeBot-A PERSO 1.18"
msgstr "CeeBot-A PERSO 1.18"
msgid "CeeBot-Teen DEMO 1.18"
msgstr "CeeBot-Teen DEMO 1.18"
msgid "CeeBot-A DEMO 1.18"
msgstr "CeeBot-A DEMO 1.18"
msgid "Demo 1.18 /e"
msgstr "Demo 1.18 /pl"
msgid "SatCom" msgid "SatCom"
msgstr "SatCom" msgstr "SatCom"
@ -55,9 +43,6 @@ msgstr "Nowy ..."
msgid " or " msgid " or "
msgstr " lub " msgstr " lub "
msgid "CeeBot"
msgstr "CeeBot"
msgid "COLOBOT" msgid "COLOBOT"
msgstr "COLOBOT" msgstr "COLOBOT"
@ -154,12 +139,6 @@ msgstr "Kolor skafandra:"
msgid "Strip color:" msgid "Strip color:"
msgstr "Kolor pasków:" msgstr "Kolor pasków:"
msgid "Do you want to quit CeeBot ?"
msgstr "Czy na pewno chcesz opuścić grę CeeBot?"
msgid "Quit\\Quit CeeBot"
msgstr "Zakończ\\Kończy grę CeeBot"
msgid "Do you want to quit COLOBOT ?" msgid "Do you want to quit COLOBOT ?"
msgstr "Czy na pewno chcesz opuścić grę COLOBOT?" msgstr "Czy na pewno chcesz opuścić grę COLOBOT?"
@ -223,8 +202,12 @@ msgstr "\\c; (brak)\\n;\n"
msgid "\\b;Error\n" msgid "\\b;Error\n"
msgstr "\\b;Błąd\n" msgstr "\\b;Błąd\n"
msgid "The list is only available if a \\l;radar station\\u object\\radar; is working.\n" msgid ""
msgstr "Lista jest dostępna jedynie gdy działa \\l;stacja radarowa\\u object\\radar;.\n" "The list is only available if a \\l;radar station\\u object\\radar; is "
"working.\n"
msgstr ""
"Lista jest dostępna jedynie gdy działa \\l;stacja radarowa\\u "
"object\\radar;.\n"
msgid "Open" msgid "Open"
msgstr "Otwórz" msgstr "Otwórz"
@ -304,9 +287,6 @@ msgstr "Zapisz\\Zapisuje bieżącą misję"
msgid "Load\\Load a saved mission" msgid "Load\\Load a saved mission"
msgstr "Wczytaj\\Wczytuje zapisaną misję" msgstr "Wczytaj\\Wczytuje zapisaną misję"
msgid "\\Return to CeeBot"
msgstr "\\Powróć do gry CeeBot"
msgid "\\Return to COLOBOT" msgid "\\Return to COLOBOT"
msgstr "\\Powróć do gry COLOBOT" msgstr "\\Powróć do gry COLOBOT"
@ -404,7 +384,9 @@ msgid "Friendly fire\\Your shooting can damage your own objects "
msgstr "Przyjacielski ogień\\Własne strzały uszkadzają Twoje obiekty" msgstr "Przyjacielski ogień\\Własne strzały uszkadzają Twoje obiekty"
msgid "Scrolling\\Scrolling when the mouse touches right or left border" msgid "Scrolling\\Scrolling when the mouse touches right or left border"
msgstr "Przewijanie\\Ekran jest przewijany gdy mysz dotknie prawej lub lewej jego krawędzi" msgstr ""
"Przewijanie\\Ekran jest przewijany gdy mysz dotknie prawej lub lewej jego "
"krawędzi"
msgid "Mouse inversion X\\Inversion of the scrolling direction on the X axis" msgid "Mouse inversion X\\Inversion of the scrolling direction on the X axis"
msgstr "Odwrócenie myszy X\\Odwrócenie kierunków przewijania w poziomie" msgstr "Odwrócenie myszy X\\Odwrócenie kierunków przewijania w poziomie"
@ -422,7 +404,9 @@ msgid "Automatic indent\\When program editing"
msgstr "Automatyczne wcięcia\\Automatyczne wcięcia podczas edycji programu" msgstr "Automatyczne wcięcia\\Automatyczne wcięcia podczas edycji programu"
msgid "Big indent\\Indent 2 or 4 spaces per level defined by braces" msgid "Big indent\\Indent 2 or 4 spaces per level defined by braces"
msgstr "Duże wcięcie\\2 lub 4 spacje wcięcia na każdy poziom zdefiniowany przez klamry" msgstr ""
"Duże wcięcie\\2 lub 4 spacje wcięcia na każdy poziom zdefiniowany przez "
"klamry"
msgid "Access to solutions\\Show program \"4: Solution\" in the exercises" msgid "Access to solutions\\Show program \"4: Solution\" in the exercises"
msgstr "Accčs aux solutions\\Programme \"4: Solution\" dans les exercices" msgstr "Accčs aux solutions\\Programme \"4: Solution\" dans les exercices"
@ -454,8 +438,11 @@ msgstr "Zmień kamerę\\Przełącza pomiędzy kamerą pokładową i śledzącą"
msgid "Previous object\\Selects the previous object" msgid "Previous object\\Selects the previous object"
msgstr "Poprzedni obiekt\\Zaznacz poprzedni obiekt" msgstr "Poprzedni obiekt\\Zaznacz poprzedni obiekt"
msgid "Standard action\\Standard action of the bot (take/grab, shoot, sniff, etc)" msgid ""
msgstr "Standardowa akcja\\Standardowa akcja robota (podnieś/upuść, strzelaj, szukaj, itp.)" "Standard action\\Standard action of the bot (take/grab, shoot, sniff, etc)"
msgstr ""
"Standardowa akcja\\Standardowa akcja robota (podnieś/upuść, strzelaj, "
"szukaj, itp.)"
msgid "Camera closer\\Moves the camera forward" msgid "Camera closer\\Moves the camera forward"
msgstr "Kamera bliżej\\Przybliża kamerę" msgstr "Kamera bliżej\\Przybliża kamerę"
@ -479,10 +466,12 @@ msgid "Programming help\\Gives more detailed help with programming"
msgstr "Podręcznik programowania\\Dostarcza szczegółową pomoc w programowaniu" msgstr "Podręcznik programowania\\Dostarcza szczegółową pomoc w programowaniu"
msgid "Key word help\\More detailed help about key words" msgid "Key word help\\More detailed help about key words"
msgstr "Pomoc dot. słów kluczowych\\Dokładniejsza pomoc na temat słów kluczowych" msgstr ""
"Pomoc dot. słów kluczowych\\Dokładniejsza pomoc na temat słów kluczowych"
msgid "Origin of last message\\Shows where the last message was sent from" msgid "Origin of last message\\Shows where the last message was sent from"
msgstr "Miejsce nadania wiadomości\\Pokazuje skąd została wysłana ostatnia wiadomość" msgstr ""
"Miejsce nadania wiadomości\\Pokazuje skąd została wysłana ostatnia wiadomość"
msgid "Speed 1.0x\\Normal speed" msgid "Speed 1.0x\\Normal speed"
msgstr "Prędkość 1,0x\\Prędkość normalna" msgstr "Prędkość 1,0x\\Prędkość normalna"
@ -506,13 +495,15 @@ msgid "3D sound\\3D positioning of the sound"
msgstr "Dźwięk 3D\\Przestrzenne pozycjonowanie dźwięków" msgstr "Dźwięk 3D\\Przestrzenne pozycjonowanie dźwięków"
msgid "Lowest\\Minimum graphic quality (highest frame rate)" msgid "Lowest\\Minimum graphic quality (highest frame rate)"
msgstr "Najniższa\\Minimalna jakość grafiki (najwyższa częstotliwość odświeżania)" msgstr ""
"Najniższa\\Minimalna jakość grafiki (najwyższa częstotliwość odświeżania)"
msgid "Normal\\Normal graphic quality" msgid "Normal\\Normal graphic quality"
msgstr "Normalna\\Normalna jakość grafiki" msgstr "Normalna\\Normalna jakość grafiki"
msgid "Highest\\Highest graphic quality (lowest frame rate)" msgid "Highest\\Highest graphic quality (lowest frame rate)"
msgstr "Najwyższa\\Maksymalna jakość grafiki (najniższa częstotliwość odświeżania)" msgstr ""
"Najwyższa\\Maksymalna jakość grafiki (najniższa częstotliwość odświeżania)"
msgid "Mute\\No sound" msgid "Mute\\No sound"
msgstr "Cisza\\Brak dźwięków" msgstr "Cisza\\Brak dźwięków"
@ -523,8 +514,11 @@ msgstr "Normalne\\Normalna głośność dźwięków"
msgid "Use a joystick\\Joystick or keyboard" msgid "Use a joystick\\Joystick or keyboard"
msgstr "Używaj joysticka\\Joystick lub klawiatura" msgstr "Używaj joysticka\\Joystick lub klawiatura"
msgid "Access to solution\\Shows the solution (detailed instructions for missions)" msgid ""
msgstr "Dostęp do rozwiązania\\Pokazuje rozwiązanie (szczegółowe instrukcje dotyczące misji)" "Access to solution\\Shows the solution (detailed instructions for missions)"
msgstr ""
"Dostęp do rozwiązania\\Pokazuje rozwiązanie (szczegółowe instrukcje "
"dotyczące misji)"
msgid "\\New player name" msgid "\\New player name"
msgstr "\\Nowe imię gracza" msgstr "\\Nowe imię gracza"
@ -1312,22 +1306,6 @@ msgstr "Błąd"
msgid "Unknown command" msgid "Unknown command"
msgstr "Nieznane polecenie" msgstr "Nieznane polecenie"
msgid "CeeBot not installed."
msgstr "Gra CeeBot nie jest zainstalowana."
msgid ""
"Please insert the CeeBot CD\n"
"and re-run the game."
msgstr "Włóż dysk CD z grą CeeBot\ni uruchom grę jeszcze raz."
msgid "COLOBOT not installed."
msgstr "Gra COLOBOT nie jest zainstalowana."
msgid ""
"Please insert the COLOBOT CD\n"
"and re-run the game."
msgstr "Włóż dysk CD z grą COLOBOT\ni uruchom grę jeszcze raz."
msgid "Inappropriate bot" msgid "Inappropriate bot"
msgstr "Nieodpowiedni robot" msgstr "Nieodpowiedni robot"
@ -1490,7 +1468,8 @@ msgstr "Za blisko istniejącej flagi"
msgid "No flag nearby" msgid "No flag nearby"
msgstr "Nie ma flagi w pobliżu" msgstr "Nie ma flagi w pobliżu"
msgid "The mission is not accomplished yet (press \\key help; for more details)" msgid ""
"The mission is not accomplished yet (press \\key help; for more details)"
msgstr "Misja nie jest wypełniona (naciśnij \\key help; aby uzyskać szczegóły)" msgstr "Misja nie jest wypełniona (naciśnij \\key help; aby uzyskać szczegóły)"
msgid "Bot destroyed" msgid "Bot destroyed"
@ -1590,7 +1569,8 @@ msgid "Spider fatally wounded"
msgstr "Pająk śmiertelnie raniony" msgstr "Pająk śmiertelnie raniony"
msgid "Press \\key help; to read instructions on your SatCom" msgid "Press \\key help; to read instructions on your SatCom"
msgstr "Naciśnij klawisz \\key help; aby wyświetlić rozkazy na przekaźniku SatCom" msgstr ""
"Naciśnij klawisz \\key help; aby wyświetlić rozkazy na przekaźniku SatCom"
msgid "Opening bracket missing" msgid "Opening bracket missing"
msgstr "Brak nawiasu otwierającego" msgstr "Brak nawiasu otwierającego"
@ -1638,7 +1618,7 @@ msgid "Unknown function"
msgstr "Funkcja nieznana" msgstr "Funkcja nieznana"
msgid "Sign \" : \" missing" msgid "Sign \" : \" missing"
msgstr "Brak znaku \" : " msgstr "Brak znaku \" :\""
msgid "Keyword \"while\" missing" msgid "Keyword \"while\" missing"
msgstr "Brak kluczowego słowa \"while" msgstr "Brak kluczowego słowa \"while"

View File

@ -15,20 +15,11 @@
// * along with this program. If not, see http://www.gnu.org/licenses/. // * along with this program. If not, see http://www.gnu.org/licenses/.
// #include <windows.h> #include "script/cbottoken.h"
// #include <stdio.h>
// #include <d3d.h>
//
// #include "common/struct.h"
// #include "old/d3dengine.h"
// #include "old/d3dmath.h"
// #include "common/language.h"
// #include "common/global.h"
// #include "common/event.h"
#include "object/object.h" #include "object/object.h"
// #include "script/cbottoken.h"
#include <string.h>
// Seeking the name of an object. // Seeking the name of an object.

View File

@ -15,10 +15,11 @@
// * along with this program. If not, see http://www.gnu.org/licenses/. // * along with this program. If not, see http://www.gnu.org/licenses/.
#include "common/global.h"
#include "script/cmdtoken.h" #include "script/cmdtoken.h"
#include "common/global.h"
#include <string.h>

View File

@ -18,10 +18,6 @@
#pragma once #pragma once
// #include "old/d3denum.h"
// #include "old/d3dengine.h"
// #include "object/object.h"
#include "graphics/engine/water.h" #include "graphics/engine/water.h"
#include "graphics/engine/engine.h" #include "graphics/engine/engine.h"
#include "graphics/engine/pyro.h" #include "graphics/engine/pyro.h"

View File

@ -18,37 +18,27 @@
#include "script/script.h" #include "script/script.h"
// #include <windows.h>
#include <stdio.h>
// #include <d3d.h>
//
#include "math/vector.h"
// #include "common/struct.h"
#include "math/geometry.h"
// #include "old/d3dengine.h"
// #include "old/d3dmath.h"
#include "common/global.h" #include "common/global.h"
// #include "common/event.h"
// #include "common/misc.h"
#include "common/iman.h" #include "common/iman.h"
#include "common/restext.h" #include "common/restext.h"
// #include "old/math3d.h"
#include "object/robotmain.h"
#include "graphics/engine/terrain.h" #include "graphics/engine/terrain.h"
#include "graphics/engine/water.h" #include "graphics/engine/water.h"
#include "graphics/engine/text.h" #include "graphics/engine/text.h"
#include "math/geometry.h"
#include "math/vector.h"
#include "object/object.h" #include "object/object.h"
#include "object/robotmain.h"
#include "object/task/taskmanager.h"
#include "physics/physics.h" #include "physics/physics.h"
#include "script/cbottoken.h"
#include "ui/interface.h" #include "ui/interface.h"
#include "ui/edit.h" #include "ui/edit.h"
#include "ui/list.h" #include "ui/list.h"
#include "ui/displaytext.h" #include "ui/displaytext.h"
#include "object/task/taskmanager.h"
// #include "object/task/task.h"
// #include "object/task/taskmanip.h" #include <stdio.h>
// #include "object/task/taskgoto.h"
// #include "object/task/taskshield.h"
#include "script/cbottoken.h"
@ -3101,7 +3091,7 @@ bool CScript::Step(const Event &event)
if ( !m_bStepMode ) return false; if ( !m_bStepMode ) return false;
m_engine->SetPause(false); m_engine->SetPause(false);
m_engine->StepSimulation(0.01f); // advance of 10ms // TODO: m_app StepSimulation??? m_engine->StepSimulation(0.01f); // advance of 10ms
m_engine->SetPause(true); m_engine->SetPause(true);
m_event = event; m_event = event;
@ -3650,7 +3640,7 @@ bool CScript::SendScript(char* text)
// Reads a script as a text file. // Reads a script as a text file.
bool CScript::ReadScript(char* filename) bool CScript::ReadScript(const char* filename)
{ {
FILE* file; FILE* file;
Ui::CEdit* edit; Ui::CEdit* edit;
@ -3685,7 +3675,7 @@ bool CScript::ReadScript(char* filename)
// Writes a script as a text file. // Writes a script as a text file.
bool CScript::WriteScript(char* filename) bool CScript::WriteScript(const char* filename)
{ {
Ui::CEdit* edit; Ui::CEdit* edit;
char name[100]; char name[100];

View File

@ -76,8 +76,8 @@ public:
void New(Ui::CEdit* edit, char* name); void New(Ui::CEdit* edit, char* name);
bool SendScript(char* text); bool SendScript(char* text);
bool ReadScript(char* filename); bool ReadScript(const char* filename);
bool WriteScript(char* filename); bool WriteScript(const char* filename);
bool ReadStack(FILE *file); bool ReadStack(FILE *file);
bool WriteStack(FILE *file); bool WriteStack(FILE *file);
bool Compare(CScript* other); bool Compare(CScript* other);

View File

@ -17,13 +17,15 @@
#include "button.h" #include "ui/button.h"
#include <common/event.h> #include "common/event.h"
#include <common/misc.h> #include "common/misc.h"
#include <common/restext.h> #include "common/restext.h"
#include <graphics/engine/engine.h> #include "graphics/engine/engine.h"
#include <string.h>
namespace Ui { namespace Ui {

View File

@ -19,7 +19,8 @@
#pragma once #pragma once
#include "control.h" #include "ui/control.h"
namespace Ui { namespace Ui {

View File

@ -16,16 +16,17 @@
// * along with this program. If not, see http://www.gnu.org/licenses/. // * along with this program. If not, see http://www.gnu.org/licenses/.
#include "check.h" #include "ui/check.h"
#include <common/event.h> #include "common/event.h"
#include <common/iman.h> #include "common/iman.h"
#include <common/misc.h> #include "common/misc.h"
#include <common/restext.h> #include "common/restext.h"
#include <graphics/engine/engine.h> #include "graphics/engine/engine.h"
#include <graphics/engine/text.h> #include "graphics/engine/text.h"
#include <string.h>
namespace Ui { namespace Ui {

View File

@ -19,7 +19,7 @@
#pragma once #pragma once
#include "control.h" #include "ui/control.h"
namespace Gfx{ namespace Gfx{

View File

@ -16,7 +16,7 @@
// * along with this program. If not, see http://www.gnu.org/licenses/. // * along with this program. If not, see http://www.gnu.org/licenses/.
#include "color.h" #include "ui/color.h"
#include "common/event.h" #include "common/event.h"
#include "common/iman.h" #include "common/iman.h"
@ -26,6 +26,8 @@
#include "graphics/core/device.h" #include "graphics/core/device.h"
#include "graphics/engine/engine.h" #include "graphics/engine/engine.h"
#include <string.h>
namespace Ui { namespace Ui {
const float DELAY1 = 0.4f; const float DELAY1 = 0.4f;
@ -188,10 +190,10 @@ void CColor::Draw()
m_engine->SetTexture("xxx.tga"); // no texture m_engine->SetTexture("xxx.tga"); // no texture
m_engine->SetState(Gfx::ENG_RSTATE_NORMAL); m_engine->SetState(Gfx::ENG_RSTATE_NORMAL);
vertex[0] = Gfx::VertexCol(Math::Vector(p1.x, p1.y, 0.0f), color,0x00000000, Math::Point(0.0f, 0.0f)); vertex[0] = Gfx::VertexCol(Math::Vector(p1.x, p1.y, 0.0f), color, Gfx::Color(), Math::Point(0.0f, 0.0f));
vertex[1] = Gfx::VertexCol(Math::Vector(p1.x, p2.y, 0.0f), color,0x00000000, Math::Point(0.0f, 0.0f)); vertex[1] = Gfx::VertexCol(Math::Vector(p1.x, p2.y, 0.0f), color, Gfx::Color(), Math::Point(0.0f, 0.0f));
vertex[2] = Gfx::VertexCol(Math::Vector(p2.x, p1.y, 0.0f), color,0x00000000, Math::Point(0.0f, 0.0f)); vertex[2] = Gfx::VertexCol(Math::Vector(p2.x, p1.y, 0.0f), color, Gfx::Color(), Math::Point(0.0f, 0.0f));
vertex[3] = Gfx::VertexCol(Math::Vector(p2.x, p2.y, 0.0f), color,0x00000000, Math::Point(0.0f, 0.0f)); vertex[3] = Gfx::VertexCol(Math::Vector(p2.x, p2.y, 0.0f), color, Gfx::Color(), Math::Point(0.0f, 0.0f));
device = m_engine->GetDevice(); device = m_engine->GetDevice();
device->DrawPrimitive(Gfx::PRIMITIVE_TRIANGLE_STRIP, vertex, 4); device->DrawPrimitive(Gfx::PRIMITIVE_TRIANGLE_STRIP, vertex, 4);

View File

@ -19,8 +19,8 @@
#pragma once #pragma once
#include "ui/control.h"
#include "control.h"
namespace Gfx{ namespace Gfx{
class CEngine; class CEngine;

View File

@ -15,7 +15,7 @@
// * You should have received a copy of the GNU General Public License // * You should have received a copy of the GNU General Public License
// * along with this program. If not, see http://www.gnu.org/licenses/. // * along with this program. If not, see http://www.gnu.org/licenses/.
#include "compass.h" #include "ui/compass.h"
#include "common/event.h" #include "common/event.h"
#include "common/iman.h" #include "common/iman.h"

View File

@ -19,8 +19,8 @@
#pragma once #pragma once
#include "ui/control.h"
#include "control.h"
namespace Gfx { namespace Gfx {
class CEngine; class CEngine;

View File

@ -23,7 +23,6 @@
#include <common/event.h> #include <common/event.h>
#include <common/iman.h> #include <common/iman.h>
#include <common/language.h>
#include <common/misc.h> #include <common/misc.h>
#include <common/restext.h> #include <common/restext.h>

Some files were not shown because too many files have changed in this diff Show More