SDL project
- added (very basic) SDL template in CApplication and CEngine - split project into two targets: colobot_old (dependent on DirectX and WinAPI) and colobot_new (dependent on SDL and OpenGL) - moved sound.h/cpp to old/ and created new template in Snd namespace - added platform-independent dialog boxes in app/system.h/cppdev-ui
parent
f58918031c
commit
b08a63790c
|
@ -1,9 +1,15 @@
|
|||
# CMake project file for compiling with MinGW
|
||||
# CMake project file for compiling with GCC/MinGW
|
||||
|
||||
cmake_minimum_required(VERSION 2.8)
|
||||
|
||||
project(colobot CXX)
|
||||
project(colobot C CXX)
|
||||
|
||||
# Required packages
|
||||
find_package(OpenGL REQUIRED)
|
||||
find_package(SDL REQUIRED)
|
||||
find_package(SDL_image REQUIRED)
|
||||
|
||||
# Build with debugging symbols
|
||||
set(CMAKE_BUILD_TYPE debug)
|
||||
|
||||
# Currently compiles only with -fpermissive
|
||||
|
@ -11,4 +17,5 @@ set(CMAKE_BUILD_TYPE debug)
|
|||
set(CMAKE_CXX_FLAGS_RELEASE "-fpermissive -O2")
|
||||
set(CMAKE_CXX_FLAGS_DEBUG "-fpermissive -w -g -O0")
|
||||
|
||||
# Subdirectory with sources
|
||||
add_subdirectory(src bin)
|
||||
|
|
|
@ -1,7 +1,9 @@
|
|||
# CBot shared library
|
||||
# CBot shared library is built separately
|
||||
add_subdirectory(CBot)
|
||||
|
||||
set(SOURCES
|
||||
|
||||
# Source files for old target (dependent on WinAPI & DirectX)
|
||||
set(OLD_SOURCES
|
||||
old/d3dapp.cpp
|
||||
old/joystick.cpp
|
||||
old/blitz.cpp
|
||||
|
@ -23,29 +25,13 @@ old/d3dutil.cpp
|
|||
old/d3dmath.cpp
|
||||
old/math3d.cpp
|
||||
old/modfile.cpp
|
||||
app/app.cpp
|
||||
old/sound.cpp
|
||||
common/event.cpp
|
||||
common/iman.cpp
|
||||
common/metafile.cpp
|
||||
common/misc.cpp
|
||||
common/profile.cpp
|
||||
common/restext.cpp
|
||||
graphics/common/camera.cpp
|
||||
graphics/common/cloud.cpp
|
||||
graphics/common/color.cpp
|
||||
graphics/common/engine.cpp
|
||||
graphics/common/light.cpp
|
||||
graphics/common/lightning.cpp
|
||||
graphics/common/model.cpp
|
||||
graphics/common/modfile.cpp
|
||||
graphics/common/particle.cpp
|
||||
graphics/common/planet.cpp
|
||||
graphics/common/pyro.cpp
|
||||
graphics/common/terrain.cpp
|
||||
graphics/common/text.cpp
|
||||
graphics/common/water.cpp
|
||||
graphics/opengl/gldevice.cpp
|
||||
graphics/opengl/glengine.cpp
|
||||
object/auto/auto.cpp
|
||||
object/auto/autobase.cpp
|
||||
object/auto/autoconvert.cpp
|
||||
|
@ -110,7 +96,6 @@ physics/physics.cpp
|
|||
script/cbottoken.cpp
|
||||
script/cmdtoken.cpp
|
||||
script/script.cpp
|
||||
sound/sound.cpp
|
||||
ui/button.cpp
|
||||
ui/check.cpp
|
||||
ui/color.cpp
|
||||
|
@ -139,25 +124,174 @@ ui/target.cpp
|
|||
ui/window.cpp
|
||||
)
|
||||
|
||||
add_definitions(-DSTRICT -DD3D_OVERLOADS)
|
||||
# Source files for new target (dependent on SDL & OpenGL)
|
||||
# Commented out files are still dependent on DirectX or WinAPI
|
||||
set(NEW_SOURCES
|
||||
app/app.cpp
|
||||
app/main.cpp
|
||||
app/system.cpp
|
||||
common/event.cpp
|
||||
common/iman.cpp
|
||||
# common/metafile.cpp
|
||||
# common/misc.cpp
|
||||
# common/modfile.cpp
|
||||
# common/profile.cpp
|
||||
# common/restext.cpp
|
||||
graphics/common/camera.cpp
|
||||
graphics/common/cloud.cpp
|
||||
graphics/common/color.cpp
|
||||
graphics/common/device.cpp
|
||||
graphics/common/engine.cpp
|
||||
graphics/common/light.cpp
|
||||
graphics/common/lightning.cpp
|
||||
graphics/common/model.cpp
|
||||
graphics/common/modfile.cpp
|
||||
graphics/common/particle.cpp
|
||||
graphics/common/planet.cpp
|
||||
graphics/common/pyro.cpp
|
||||
graphics/common/terrain.cpp
|
||||
graphics/common/text.cpp
|
||||
graphics/common/water.cpp
|
||||
graphics/opengl/gldevice.cpp
|
||||
graphics/opengl/glengine.cpp
|
||||
# object/auto/auto.cpp
|
||||
# object/auto/autobase.cpp
|
||||
# object/auto/autoconvert.cpp
|
||||
# object/auto/autoderrick.cpp
|
||||
# object/auto/autodestroyer.cpp
|
||||
# object/auto/autoegg.cpp
|
||||
# object/auto/autoenergy.cpp
|
||||
# object/auto/autofactory.cpp
|
||||
# object/auto/autoflag.cpp
|
||||
# object/auto/autohuston.cpp
|
||||
# object/auto/autoinfo.cpp
|
||||
# object/auto/autojostle.cpp
|
||||
# object/auto/autokid.cpp
|
||||
# object/auto/autolabo.cpp
|
||||
# object/auto/automush.cpp
|
||||
# object/auto/autonest.cpp
|
||||
# object/auto/autonuclear.cpp
|
||||
# object/auto/autopara.cpp
|
||||
# object/auto/autoportico.cpp
|
||||
# object/auto/autoradar.cpp
|
||||
# object/auto/autorepair.cpp
|
||||
# object/auto/autoresearch.cpp
|
||||
# object/auto/autoroot.cpp
|
||||
# object/auto/autosafe.cpp
|
||||
# object/auto/autostation.cpp
|
||||
# object/auto/autotower.cpp
|
||||
# object/brain.cpp
|
||||
# object/mainmovie.cpp
|
||||
# object/motion/motion.cpp
|
||||
# object/motion/motionant.cpp
|
||||
# object/motion/motionbee.cpp
|
||||
# object/motion/motionhuman.cpp
|
||||
# object/motion/motionmother.cpp
|
||||
# object/motion/motionspider.cpp
|
||||
# object/motion/motiontoto.cpp
|
||||
# object/motion/motionvehicle.cpp
|
||||
# object/motion/motionworm.cpp
|
||||
# object/object.cpp
|
||||
# object/robotmain.cpp
|
||||
# object/task/task.cpp
|
||||
# object/task/taskadvance.cpp
|
||||
# object/task/taskbuild.cpp
|
||||
# object/task/taskfire.cpp
|
||||
# object/task/taskfireant.cpp
|
||||
# object/task/taskflag.cpp
|
||||
# object/task/taskgoto.cpp
|
||||
# object/task/taskgungoal.cpp
|
||||
# object/task/taskinfo.cpp
|
||||
# object/task/taskmanager.cpp
|
||||
# object/task/taskmanip.cpp
|
||||
# object/task/taskpen.cpp
|
||||
# object/task/taskrecover.cpp
|
||||
# object/task/taskreset.cpp
|
||||
# object/task/tasksearch.cpp
|
||||
# object/task/taskshield.cpp
|
||||
# object/task/taskspiderexplo.cpp
|
||||
# object/task/tasktake.cpp
|
||||
# object/task/taskterraform.cpp
|
||||
# object/task/taskturn.cpp
|
||||
# object/task/taskwait.cpp
|
||||
# physics/physics.cpp
|
||||
# script/cbottoken.cpp
|
||||
# script/cmdtoken.cpp
|
||||
# script/script.cpp
|
||||
sound/sound.cpp
|
||||
# ui/button.cpp
|
||||
# ui/check.cpp
|
||||
# ui/color.cpp
|
||||
# ui/compass.cpp
|
||||
# ui/control.cpp
|
||||
# ui/displayinfo.cpp
|
||||
# ui/displaytext.cpp
|
||||
# ui/edit.cpp
|
||||
# ui/editvalue.cpp
|
||||
# ui/gauge.cpp
|
||||
# ui/group.cpp
|
||||
# ui/image.cpp
|
||||
# ui/interface.cpp
|
||||
# ui/key.cpp
|
||||
# ui/label.cpp
|
||||
# ui/list.cpp
|
||||
# ui/maindialog.cpp
|
||||
# ui/mainmap.cpp
|
||||
# ui/mainshort.cpp
|
||||
# ui/map.cpp
|
||||
# ui/scroll.cpp
|
||||
# ui/shortcut.cpp
|
||||
# ui/slider.cpp
|
||||
# ui/studio.cpp
|
||||
# ui/target.cpp
|
||||
# ui/window.cpp
|
||||
)
|
||||
|
||||
# Change to DirectX SDK directory
|
||||
set(DXSDK_DIR "c:/dxsdk")
|
||||
|
||||
include_directories(${DXSDK_DIR}/include .)
|
||||
# Configure options
|
||||
option(DEBUG "Enable debug output" ON)
|
||||
|
||||
if (${CMAKE_SYSTEM_NAME} MATCHES "Windows")
|
||||
set(PLATFORM_WINDOWS 1)
|
||||
set(PLATFORM_LINUX 0)
|
||||
set(PLATFORM_OTHER 0)
|
||||
elseif(${CMAKE_SYSTEM_NAME} MATCHES "Linux")
|
||||
set(PLATFORM_WINDOWS 0)
|
||||
set(PLATFORM_LINUX 1)
|
||||
set(PLATFORM_OTHER 0)
|
||||
else()
|
||||
set(PLATFORM_WINDOWS 0)
|
||||
set(PLATFORM_LINUX 0)
|
||||
set(PLATFORM_OTHER 1)
|
||||
endif()
|
||||
|
||||
# Configure file
|
||||
configure_file(common/config.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/common/config.h)
|
||||
|
||||
# #defines needed for old target
|
||||
add_definitions(-DSTRICT -DD3D_OVERLOADS)
|
||||
|
||||
include_directories(${DXSDK_DIR}/include . ${CMAKE_CURRENT_BINARY_DIR})
|
||||
|
||||
link_directories(${CMAKE_CURRENT_SOURCE_DIR}/CBot ${DXSDK_DIR}/lib)
|
||||
|
||||
set( LIBS -lkernel32 -luser32 -lgdi32 -lwinspool -lcomdlg32
|
||||
|
||||
# Old target
|
||||
set(OLD_LIBS -lkernel32 -luser32 -lgdi32 -lwinspool -lcomdlg32
|
||||
-ladvapi32 -lshell32 -lole32 -loleaut32 -luuid -lodbc32
|
||||
-lodbccp32 -lwinmm
|
||||
${DXSDK_DIR}/lib/ddraw.lib ${DXSDK_DIR}/lib/dinput.lib ${DXSDK_DIR}/lib/dxguid.lib ${DXSDK_DIR}/lib/d3d8.lib ${DXSDK_DIR}/lib/dsound.lib )
|
||||
${DXSDK_DIR}/lib/ddraw.lib ${DXSDK_DIR}/lib/dinput.lib ${DXSDK_DIR}/lib/dxguid.lib ${DXSDK_DIR}/lib/d3d8.lib ${DXSDK_DIR}/lib/dsound.lib)
|
||||
|
||||
# To build with libwine:
|
||||
# include_directories(/usr/include/wine/windows /usr/include/wine/msvcrt)
|
||||
# set(LIBS -lwine)
|
||||
add_executable(colobot_old ${OLD_SOURCES})
|
||||
|
||||
add_executable(colobot ${SOURCES})
|
||||
target_link_libraries(colobot_old CBot ${OLD_LIBS})
|
||||
|
||||
target_link_libraries(colobot CBot ${LIBS})
|
||||
|
||||
# New target
|
||||
set(NEW_LIBS ${SDL_LIBRARY} ${SDLIMAGE_LIBRARY} ${OPENGL_LIBRARY})
|
||||
|
||||
add_executable(colobot_new ${NEW_SOURCES})
|
||||
|
||||
target_link_libraries(colobot_new ${NEW_LIBS})
|
||||
|
|
504
src/app/app.cpp
504
src/app/app.cpp
|
@ -19,5 +19,507 @@
|
|||
|
||||
#include "app/app.h"
|
||||
|
||||
#include "app/system.h"
|
||||
#include "common/iman.h"
|
||||
|
||||
// TODO implementation
|
||||
|
||||
#include <SDL/SDL.h>
|
||||
#include <SDL/SDL_image.h>
|
||||
|
||||
|
||||
/**
|
||||
* \struct ApplicationPrivate Private data of CApplication class
|
||||
*
|
||||
* Contains SDL-specific variables that should not be visible outside application module.
|
||||
*/
|
||||
struct ApplicationPrivate
|
||||
{
|
||||
//! Display surface
|
||||
SDL_Surface *surface;
|
||||
//! Currently handled event
|
||||
SDL_Event currentEvent;
|
||||
//! Joystick
|
||||
SDL_Joystick *joystick;
|
||||
//! Index of joystick device
|
||||
int joystickDevice;
|
||||
|
||||
ApplicationPrivate()
|
||||
{
|
||||
memset(¤tEvent, 0, sizeof(SDL_Event));
|
||||
surface = NULL;
|
||||
joystick = NULL;
|
||||
joystickDevice = 0;
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
CApplication::CApplication()
|
||||
{
|
||||
m_private = new ApplicationPrivate();
|
||||
m_exitCode = 0;
|
||||
|
||||
m_iMan = new CInstanceManager();
|
||||
m_event = new CEvent(m_iMan);
|
||||
|
||||
m_engine = 0;
|
||||
m_robotMain = 0;
|
||||
m_sound = 0;
|
||||
|
||||
m_keyState = 0;
|
||||
m_axeKey = Math::Vector(0.0f, 0.0f, 0.0f);
|
||||
m_axeJoy = Math::Vector(0.0f, 0.0f, 0.0f);
|
||||
|
||||
m_vidMemTotal = 0;
|
||||
m_active = false;
|
||||
m_activateApp = false;
|
||||
m_ready = false;
|
||||
m_joystick = false;
|
||||
m_time = 0.0f;
|
||||
|
||||
for (int i = 0; i < 32; i++)
|
||||
{
|
||||
m_joyButton[i] = false;
|
||||
}
|
||||
|
||||
m_windowTitle = "COLOBOT";
|
||||
|
||||
m_appUseZBuffer = true;
|
||||
m_appUseStereo = true;
|
||||
m_showStats = false;
|
||||
m_debugMode = false;
|
||||
m_audioState = true;
|
||||
m_audioTrack = true;
|
||||
m_niceMouse = false;
|
||||
m_setupMode = true;
|
||||
|
||||
ResetKey();
|
||||
}
|
||||
|
||||
CApplication::~CApplication()
|
||||
{
|
||||
delete m_private;
|
||||
m_private = NULL;
|
||||
|
||||
delete m_iMan;
|
||||
m_iMan = NULL;
|
||||
}
|
||||
|
||||
Error CApplication::ParseArguments(int argc, char *argv[])
|
||||
{
|
||||
for (int i = 1; i < argc; ++i)
|
||||
{
|
||||
std::string arg = argv[i];
|
||||
|
||||
if (arg == "-debug")
|
||||
{
|
||||
m_showStats = true;
|
||||
SetDebugMode(true);
|
||||
}
|
||||
else if (arg == "-audiostate")
|
||||
{
|
||||
m_audioState = false;
|
||||
}
|
||||
else if (arg == "-audiotrack")
|
||||
{
|
||||
m_audioTrack = false;
|
||||
}
|
||||
// TODO else {} report invalid argument
|
||||
}
|
||||
|
||||
return ERR_OK;
|
||||
}
|
||||
|
||||
bool CApplication::Create()
|
||||
{
|
||||
/*
|
||||
TODO
|
||||
Full screen by default unless in debug mode
|
||||
if (! m_debugMode)
|
||||
m_deviceConfig.fullScreen = true;
|
||||
|
||||
int full = 0;
|
||||
if (GetProfileInt("Device", "FullScreen", full))
|
||||
m_deviceConfig.fullScreen = full == 1;
|
||||
*/
|
||||
|
||||
// Temporarily -- only in windowed mode
|
||||
m_deviceConfig.fullScreen = false;
|
||||
|
||||
/*
|
||||
TODO
|
||||
// Create the 3D engine.
|
||||
m_engine = new CEngine(m_iMan, this);
|
||||
|
||||
// Initialize the app's custom scene stuff
|
||||
if (! m_engine->OneTimeSceneInit())
|
||||
{
|
||||
SystemDialog(SDT_ERROR, "COLOBOT - Error", m_engine->RetError());
|
||||
return false;
|
||||
}
|
||||
|
||||
// Create the sound instance.
|
||||
m_sound = new CSound(m_iMan);
|
||||
|
||||
// Create the robot application.
|
||||
m_robotMain = new CRobotMain(m_iMan);
|
||||
*/
|
||||
|
||||
|
||||
Uint32 initFlags = SDL_INIT_VIDEO;
|
||||
if (m_joystick)
|
||||
initFlags |= SDL_INIT_JOYSTICK;
|
||||
|
||||
if (SDL_Init(initFlags) < 0)
|
||||
{
|
||||
SystemDialog( SDT_ERROR, "COLOBOT - Error", "SDL initialization error:\n" + std::string(SDL_GetError()) );
|
||||
return false;
|
||||
}
|
||||
|
||||
const SDL_VideoInfo *videoInfo = SDL_GetVideoInfo();
|
||||
if (! videoInfo)
|
||||
{
|
||||
SystemDialog( SDT_ERROR, "COLOBOT - Error", "SDL error while getting video info:\n " + std::string(SDL_GetError()) );
|
||||
return false;
|
||||
}
|
||||
|
||||
Uint32 videoFlags = SDL_OPENGL | SDL_GL_DOUBLEBUFFER | SDL_HWPALETTE;
|
||||
|
||||
if (m_deviceConfig.resizeable)
|
||||
videoFlags |= SDL_RESIZABLE;
|
||||
|
||||
// Use hardware surface if available
|
||||
if (videoInfo->hw_available)
|
||||
videoFlags |= SDL_HWSURFACE;
|
||||
else
|
||||
videoFlags |= SDL_SWSURFACE;
|
||||
|
||||
// Enable hardware blit if available
|
||||
if (videoInfo->blit_hw)
|
||||
videoFlags |= SDL_HWACCEL;
|
||||
|
||||
if (m_deviceConfig.fullScreen)
|
||||
videoFlags |= SDL_FULLSCREEN;
|
||||
|
||||
SDL_GL_SetAttribute(SDL_GL_RED_SIZE, 8);
|
||||
SDL_GL_SetAttribute(SDL_GL_GREEN_SIZE, 8);
|
||||
SDL_GL_SetAttribute(SDL_GL_BLUE_SIZE, 8);
|
||||
SDL_GL_SetAttribute(SDL_GL_ALPHA_SIZE, 8);
|
||||
|
||||
SDL_GL_SetAttribute(SDL_GL_DEPTH_SIZE, 24);
|
||||
SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1);
|
||||
|
||||
if ((IMG_Init(IMG_INIT_PNG) & IMG_INIT_PNG) == 0)
|
||||
{
|
||||
SystemDialog( SDT_ERROR, "COLOBOT - Error", std::string("SDL_Image initialization error:\n") +
|
||||
std::string(IMG_GetError()) );
|
||||
return false;
|
||||
}
|
||||
|
||||
m_private->surface = SDL_SetVideoMode(m_deviceConfig.width, m_deviceConfig.height,
|
||||
m_deviceConfig.bpp, videoFlags);
|
||||
|
||||
if (! m_private->surface)
|
||||
{
|
||||
SystemDialog( SDT_ERROR, "COLOBT - Error", std::string("SDL error while setting video mode:\n") +
|
||||
std::string(SDL_GetError()) );
|
||||
return false;
|
||||
}
|
||||
|
||||
SDL_WM_SetCaption(m_windowTitle.c_str(), m_windowTitle.c_str());
|
||||
|
||||
SDL_EnableUNICODE(1);
|
||||
|
||||
|
||||
/*
|
||||
TODO
|
||||
|
||||
InitJoystick();
|
||||
|
||||
if ( !GetProfileInt("Setup", "Sound3D", b3D) )
|
||||
{
|
||||
b3D = true;
|
||||
}
|
||||
m_pSound->SetDebugMode(m_bDebugMode);
|
||||
m_pSound->Create(m_hWnd, b3D);
|
||||
m_pSound->CacheAll();
|
||||
m_pSound->SetState(m_bAudioState);
|
||||
m_pSound->SetAudioTrack(m_bAudioTrack);
|
||||
m_pSound->SetCDpath(m_CDpath);
|
||||
|
||||
// First execution?
|
||||
if ( !GetProfileInt("Setup", "ObjectDirty", iValue) )
|
||||
{
|
||||
m_pD3DEngine->FirstExecuteAdapt(true);
|
||||
}
|
||||
|
||||
// Creates the file colobot.ini at the first execution.
|
||||
m_pRobotMain->CreateIni();
|
||||
|
||||
m_pRobotMain->ChangePhase(PHASE_WELCOME2);
|
||||
|
||||
m_engine->TimeInit();
|
||||
*/
|
||||
|
||||
// The app is ready to go
|
||||
m_ready = true;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
void CApplication::Destroy()
|
||||
{
|
||||
if (m_private->joystick != NULL)
|
||||
{
|
||||
SDL_JoystickClose(m_private->joystick);
|
||||
m_private->joystick = NULL;
|
||||
}
|
||||
|
||||
SDL_FreeSurface(m_private->surface);
|
||||
m_private->surface = NULL;
|
||||
|
||||
IMG_Quit();
|
||||
|
||||
SDL_Quit();
|
||||
}
|
||||
|
||||
int CApplication::Run()
|
||||
{
|
||||
m_active = true;
|
||||
|
||||
while (m_private->currentEvent.type != SDL_QUIT)
|
||||
{
|
||||
// Use SDL_PeepEvents() if the app is active, so we can use idle time to
|
||||
// render the scene. Else, use SDL_PollEvent() to avoid eating CPU time.
|
||||
int count = 0;
|
||||
if (m_active)
|
||||
{
|
||||
SDL_PumpEvents();
|
||||
count = SDL_PeepEvents(&m_private->currentEvent, 1, SDL_GETEVENT, SDL_ALLEVENTS);
|
||||
}
|
||||
else
|
||||
{
|
||||
SDL_PollEvent(&m_private->currentEvent);
|
||||
}
|
||||
|
||||
// If received an event
|
||||
if ((m_active && count > 0) || (!m_active))
|
||||
{
|
||||
ParseEvent();
|
||||
}
|
||||
|
||||
// Render a frame during idle time (no messages are waiting)
|
||||
if (m_active && m_ready)
|
||||
{
|
||||
Event event;
|
||||
while (m_event->GetEvent(event))
|
||||
{
|
||||
if (event.event == EVENT_QUIT)
|
||||
{
|
||||
goto end; // exit both loops
|
||||
}
|
||||
|
||||
//m_robotMain->EventProcess(event);
|
||||
}
|
||||
|
||||
//if ( !RetNiceMouse())
|
||||
//{
|
||||
// SetMouseType(m_engine->RetMouseType());
|
||||
//}
|
||||
|
||||
// If an error occurs, push quit event to the queue
|
||||
if (! Render())
|
||||
{
|
||||
SDL_Event quitEvent;
|
||||
memset(&quitEvent, 0, sizeof(SDL_Event));
|
||||
quitEvent.type = SDL_QUIT;
|
||||
SDL_PushEvent(&quitEvent);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
end:
|
||||
//m_sound->StopMusic();
|
||||
Destroy();
|
||||
|
||||
return m_exitCode;
|
||||
}
|
||||
|
||||
void CApplication::ParseEvent()
|
||||
{
|
||||
/* Event event;
|
||||
|
||||
if (m_private->currentEvent.type == SDL_MOUSEBUTTONDOWN)
|
||||
{
|
||||
if (m_private->currentEvent.button.button == SDL_BUTTON_LEFT)
|
||||
event.event = EVENT_LBUTTONDOWN;
|
||||
else if (m_private->currentEvent.button.button == SDL_BUTTON_RIGHT)
|
||||
event.event = EVENT_RBUTTONDOWN;
|
||||
}
|
||||
else if (m_private->currentEvent.type == SDL_MOUSEBUTTONUP)
|
||||
{
|
||||
if (m_private->currentEvent.button.button == SDL_BUTTON_LEFT)
|
||||
event.event = EVENT_LBUTTONUP;
|
||||
else if (m_private->currentEvent.button.button == SDL_BUTTON_RIGHT)
|
||||
event.event = EVENT_RBUTTONUP;
|
||||
}
|
||||
else if (m_private->currentEvent.type == SDL_MOUSEMOTION)
|
||||
{
|
||||
event.event = EVENT_MOUSEMOVE;
|
||||
}
|
||||
else if (m_private->currentEvent.type == SDL_KEYDOWN)
|
||||
{
|
||||
event.event = EVENT_KEYDOWN;
|
||||
}
|
||||
else if (m_private->currentEvent.type == SDL_KEYUP)
|
||||
{
|
||||
event.event = EVENT_KEYUP;
|
||||
}
|
||||
|
||||
if (m_robotMain != NULL && event.event != EVENT_NULL)
|
||||
{
|
||||
m_robotMain->EventProcess(event);
|
||||
}
|
||||
if (m_engine != NULL)
|
||||
{
|
||||
m_engine->MsgProc( hWnd, uMsg, wParam, lParam );
|
||||
}
|
||||
|
||||
ProcessEvent(event);*/
|
||||
}
|
||||
|
||||
void CApplication::ProcessEvent(Event event)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
bool CApplication::Render()
|
||||
{
|
||||
bool result = m_engine->Render();
|
||||
if (! result)
|
||||
return false;
|
||||
|
||||
if (m_deviceConfig.doubleBuf)
|
||||
SDL_GL_SwapBuffers();
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
void CApplication::Pause(bool pause)
|
||||
{
|
||||
// TODO
|
||||
}
|
||||
|
||||
void CApplication::SetMousePos(Math::Point pos)
|
||||
{
|
||||
// TODO
|
||||
}
|
||||
|
||||
void CApplication::StepSimulation(float rTime)
|
||||
{
|
||||
// TODO
|
||||
}
|
||||
|
||||
void SetShowStat(bool show)
|
||||
{
|
||||
// TODO
|
||||
}
|
||||
|
||||
bool CApplication::RetShowStat()
|
||||
{
|
||||
// TODO
|
||||
return false;
|
||||
}
|
||||
|
||||
void CApplication::SetDebugMode(bool mode)
|
||||
{
|
||||
// TODO
|
||||
}
|
||||
|
||||
bool CApplication::RetDebugMode()
|
||||
{
|
||||
// TODO
|
||||
return false;
|
||||
}
|
||||
|
||||
bool CApplication::RetSetupMode()
|
||||
{
|
||||
// TODO
|
||||
return false;
|
||||
}
|
||||
|
||||
void CApplication::FlushPressKey()
|
||||
{
|
||||
// TODO
|
||||
}
|
||||
|
||||
void CApplication::ResetKey()
|
||||
{
|
||||
// TODO
|
||||
}
|
||||
|
||||
void CApplication::SetKey(int keyRank, int option, int key)
|
||||
{
|
||||
// TODO
|
||||
}
|
||||
|
||||
int CApplication::RetKey(int keyRank, int option)
|
||||
{
|
||||
// TODO
|
||||
return 0;
|
||||
}
|
||||
|
||||
void CApplication::SetJoystick(bool enable)
|
||||
{
|
||||
// TODO
|
||||
}
|
||||
|
||||
bool CApplication::RetJoystick()
|
||||
{
|
||||
// TODO
|
||||
return false;
|
||||
}
|
||||
|
||||
void SetMouseType(Gfx::MouseType type)
|
||||
{
|
||||
// TODO
|
||||
}
|
||||
|
||||
void SetNiceMouse(bool nice)
|
||||
{
|
||||
// TODO
|
||||
}
|
||||
|
||||
bool CApplication::RetNiceMouse()
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
bool CApplication::RetNiceMouseCap()
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
bool CApplication::WriteScreenShot(char *filename, int width, int height)
|
||||
{
|
||||
// TODO
|
||||
}
|
||||
|
||||
void CApplication::InitText()
|
||||
{
|
||||
// TODO
|
||||
}
|
||||
|
||||
void CApplication::DrawSuppl()
|
||||
{
|
||||
// TODO
|
||||
}
|
||||
|
||||
void CApplication::ShowStats()
|
||||
{
|
||||
// TODO
|
||||
}
|
||||
|
||||
void CApplication::OutputText(long x, long y, char* str)
|
||||
{
|
||||
// TODO
|
||||
}
|
||||
|
|
111
src/app/app.h
111
src/app/app.h
|
@ -21,40 +21,59 @@
|
|||
|
||||
|
||||
#include "common/misc.h"
|
||||
#include "graphics/common/device.h"
|
||||
#include "graphics/common/engine.h"
|
||||
|
||||
#include <string>
|
||||
|
||||
|
||||
class CInstanceManager;
|
||||
class CEvent;
|
||||
class CRobotMain;
|
||||
class CSound;
|
||||
|
||||
struct ApplicationPrivate;
|
||||
|
||||
|
||||
/**
|
||||
* \class CApplication Main application
|
||||
*
|
||||
* This class is responsible for creating and handling main application window,
|
||||
* receiving events, etc.
|
||||
*
|
||||
* ...
|
||||
*/
|
||||
class CApplication
|
||||
{
|
||||
public:
|
||||
//! Constructor (can only be called once!)
|
||||
CApplication();
|
||||
//! Destructor
|
||||
~CApplication();
|
||||
|
||||
public:
|
||||
//! Parses commandline arguments
|
||||
Error ParseArguments(int argc, char *argv[]);
|
||||
//! Initializes the application
|
||||
bool Create();
|
||||
//! Main event loop
|
||||
int Run();
|
||||
|
||||
protected:
|
||||
//LRESULT OnQuerySuspend( DWORD dwFlags );
|
||||
//LRESULT OnResumeSuspend( DWORD dwData );
|
||||
//! Cleans up before exit
|
||||
void Destroy();
|
||||
//! Processes an SDL event to Event struct
|
||||
void ParseEvent();
|
||||
//! Handles some incoming events
|
||||
void ProcessEvent(Event event);
|
||||
//! Renders the image in window
|
||||
bool Render();
|
||||
|
||||
public:
|
||||
Error RegQuery();
|
||||
Error AudioQuery();
|
||||
Error CheckMistery(char *strCmdLine);
|
||||
int GetVidMemTotal();
|
||||
bool IsVideo8MB();
|
||||
bool IsVideo32MB();
|
||||
//HRESULT Create( HINSTANCE, TCHAR* );
|
||||
int Run();
|
||||
//LRESULT MsgProc( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam );
|
||||
void Pause(bool pause);
|
||||
//Math::Point ConvPosToInterface(HWND hWnd, LPARAM lParam);
|
||||
void StepSimulation(float rTime);
|
||||
|
||||
void SetMousePos(Math::Point pos);
|
||||
void StepSimul(float rTime);
|
||||
char* RetCDpath();
|
||||
|
||||
void SetShowStat(bool show);
|
||||
bool RetShowStat();
|
||||
|
@ -62,30 +81,21 @@ public:
|
|||
bool RetDebugMode();
|
||||
bool RetSetupMode();
|
||||
|
||||
bool EnumDevices(char *bufDevices, int lenDevices, char *bufModes, int lenModes, int &totalDevices, int &selectDevices, int &totalModes, int &selectModes);
|
||||
bool RetFullScreen();
|
||||
bool ChangeDevice(char *device, char *mode, bool bFull);
|
||||
|
||||
void FlushPressKey();
|
||||
void ResetKey();
|
||||
void SetKey(int keyRank, int option, int key);
|
||||
int RetKey(int keyRank, int option);
|
||||
|
||||
void SetJoystick(bool bEnable);
|
||||
void SetJoystick(bool enable);
|
||||
bool RetJoystick();
|
||||
|
||||
void SetMouseType(Gfx::MouseType type);
|
||||
void SetNiceMouse(bool bNice);
|
||||
void SetNiceMouse(bool nice);
|
||||
bool RetNiceMouse();
|
||||
bool RetNiceMouseCap();
|
||||
|
||||
bool WriteScreenShot(char *filename, int width, int height);
|
||||
|
||||
//bool GetRenderDC(HDC &hDC);
|
||||
//bool ReleaseRenderDC(HDC &hDC);
|
||||
//PBITMAPINFO CreateBitmapInfoStruct(HBITMAP hBmp);
|
||||
//bool CreateBMPFile(LPTSTR pszFile, PBITMAPINFO pbi, HBITMAP hBMP, HDC hDC);
|
||||
|
||||
protected:
|
||||
//HRESULT ConfirmDevice( DDCAPS* pddDriverCaps, D3DDEVICEDESC7* pd3dDeviceDesc );
|
||||
//HRESULT Initialize3DEnvironment();
|
||||
|
@ -102,55 +112,42 @@ protected:
|
|||
void OutputText(long x, long y, char* str);
|
||||
|
||||
protected:
|
||||
//! Private (SDL-dependent data)
|
||||
ApplicationPrivate* m_private;
|
||||
CInstanceManager* m_iMan;
|
||||
Gfx::DeviceConfig m_deviceConfig;
|
||||
Gfx::CEngine* m_engine;
|
||||
CEvent* m_event;
|
||||
CRobotMain* m_robotMain;
|
||||
CSound* m_sound;
|
||||
|
||||
//HINSTANCE m_instance;
|
||||
//HWND m_hWnd;
|
||||
//D3DEnum_DeviceInfo* m_pDeviceInfo;
|
||||
//LPDIRECTDRAW7 m_pDD;
|
||||
//LPDIRECT3D7 m_pD3D;
|
||||
//LPDIRECT3DDEVICE7 m_pD3DDevice;
|
||||
//LPDIRECTDRAWSURFACE7 m_pddsRenderTarget;
|
||||
//DDSURFACEDESC2 m_ddsdRenderTarget;
|
||||
//LPDIRECTDRAWSURFACE7 m_pddsDepthBuffer;
|
||||
//! Code to return at exit
|
||||
int m_exitCode;
|
||||
|
||||
//HANDLE m_thread;
|
||||
//DWORD m_threadId;
|
||||
|
||||
char m_CDpath[100];
|
||||
|
||||
//CD3DFramework7* m_pFramework;
|
||||
bool m_active;
|
||||
bool m_activateApp;
|
||||
bool m_ready;
|
||||
bool m_joystick;
|
||||
|
||||
std::string m_windowTitle;
|
||||
long m_vidMemTotal;
|
||||
char* m_strWindowTitle;
|
||||
bool m_bAppUseZBuffer;
|
||||
bool m_bAppUseStereo;
|
||||
bool m_bShowStats;
|
||||
bool m_bDebugMode;
|
||||
bool m_bAudioState;
|
||||
bool m_bAudioTrack;
|
||||
bool m_bNiceMouse;
|
||||
bool m_bSetupMode;
|
||||
//HRESULT (*m_fnConfirmDevice)(DDCAPS*, D3DDEVICEDESC7*);
|
||||
|
||||
public:
|
||||
Gfx::CEngine* m_pD3DEngine;
|
||||
CRobotMain* m_pRobotMain;
|
||||
CSound* m_pSound;
|
||||
bool m_appUseZBuffer;
|
||||
bool m_appUseStereo;
|
||||
bool m_showStats;
|
||||
bool m_debugMode;
|
||||
bool m_audioState;
|
||||
bool m_audioTrack;
|
||||
bool m_niceMouse;
|
||||
bool m_setupMode;
|
||||
|
||||
int m_keyState;
|
||||
Math::Vector m_axeKey;
|
||||
Math::Vector m_axeJoy;
|
||||
bool m_joyButton[32];
|
||||
Math::Point m_mousePos;
|
||||
long m_mshMouseWheel;
|
||||
long m_mouseWheel;
|
||||
|
||||
float m_aTime;
|
||||
float m_time;
|
||||
long m_key[50][2];
|
||||
};
|
||||
|
||||
|
|
|
@ -0,0 +1,41 @@
|
|||
// * This file is part of the COLOBOT source code
|
||||
// * Copyright (C) 2001-2008, Daniel ROUX & EPSITEC SA, www.epsitec.ch
|
||||
// * Copyright (C) 2012, Polish Portal of Colobot (PPC)
|
||||
// *
|
||||
// * 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/.
|
||||
|
||||
// main.cpp
|
||||
|
||||
#include "app/app.h"
|
||||
#include "app/system.h"
|
||||
#include "common/misc.h"
|
||||
#include "common/restext.h"
|
||||
|
||||
|
||||
//! Entry point to the program
|
||||
int main(int argc, char *argv[])
|
||||
{
|
||||
CApplication app; // single instance of the application
|
||||
|
||||
Error err = app.ParseArguments(argc, argv);
|
||||
if (err != ERR_OK)
|
||||
{
|
||||
SystemDialog(SDT_ERROR, "COLOBOT", "Invalid commandline arguments!\n");
|
||||
}
|
||||
|
||||
if (! app.Create())
|
||||
return 0;
|
||||
|
||||
return app.Run();
|
||||
}
|
|
@ -0,0 +1,253 @@
|
|||
// * This file is part of the COLOBOT source code
|
||||
// * Copyright (C) 2001-2008, Daniel ROUX & EPSITEC SA, www.epsitec.ch
|
||||
// * Copyright (C) 2012, Polish Portal of Colobot (PPC)
|
||||
// *
|
||||
// * 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/.
|
||||
|
||||
// system.cpp
|
||||
|
||||
#include "app/system.h"
|
||||
|
||||
#include "common/config.h"
|
||||
|
||||
#if defined(PLATFORM_WINDOWS)
|
||||
#include <windows.h>
|
||||
#elif defined(PLATFORM_LINUX)
|
||||
#include <cstdlib>
|
||||
#else
|
||||
#include <iostream>
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
SystemDialogResult SystemDialog_Windows(SystemDialogType type, const std::string& title, const std::string& message);
|
||||
SystemDialogResult SystemDialog_Linux(SystemDialogType type, const std::string& title, const std::string& message);
|
||||
SystemDialogResult SystemDialog_Other(SystemDialogType type, const std::string& title, const std::string& message);
|
||||
|
||||
/**
|
||||
* Displays a system dialog with info, error, question etc. message.
|
||||
*
|
||||
* \param type type of dialog
|
||||
* \param message text of message (in UTF-8)
|
||||
* \param title dialog title (in UTF-8)
|
||||
* \returns result (which button was clicked)
|
||||
*/
|
||||
SystemDialogResult SystemDialog(SystemDialogType type, const std::string& title, const std::string& message)
|
||||
{
|
||||
#if defined(PLATFORM_WINDOWS)
|
||||
return SystemDialog_Windows(type, title, message);
|
||||
#elif defined(PLATFORM_LINUX)
|
||||
return SystemDialog_Linux(type, title, message);
|
||||
#else
|
||||
return SystemDialog_Other(type, title, message);
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
|
||||
#if defined(PLATFORM_WINDOWS)
|
||||
|
||||
// Convert a wide Unicode string to an UTF8 string
|
||||
std::string UTF8_Encode_Windows(const std::wstring &wstr)
|
||||
{
|
||||
int size_needed = WideCharToMultiByte(CP_UTF8, 0, &wstr[0], (int)wstr.size(), NULL, 0, NULL, NULL);
|
||||
std::string strTo(size_needed, 0);
|
||||
WideCharToMultiByte(CP_UTF8, 0, &wstr[0], (int)wstr.size(), &strTo[0], size_needed, NULL, NULL);
|
||||
return strTo;
|
||||
}
|
||||
|
||||
// Convert an UTF8 string to a wide Unicode String
|
||||
std::wstring UTF8_Decode_Windows(const std::string &str)
|
||||
{
|
||||
int size_needed = MultiByteToWideChar(CP_UTF8, 0, &str[0], (int)str.size(), NULL, 0);
|
||||
std::wstring wstrTo(size_needed, 0);
|
||||
MultiByteToWideChar(CP_UTF8, 0, &str[0], (int)str.size(), &wstrTo[0], size_needed);
|
||||
return wstrTo;
|
||||
}
|
||||
|
||||
SystemDialogResult SystemDialog_Windows(SystemDialogType type, const std::string& title, const std::string& message)
|
||||
{
|
||||
unsigned int windowsType = 0;
|
||||
std::wstring windowsMessage = UTF8_Decode_Windows(message);
|
||||
std::wstring windowsTitle = UTF8_Decode_Windows(title);
|
||||
|
||||
switch (type)
|
||||
{
|
||||
case SDT_INFO:
|
||||
default:
|
||||
windowsType = MB_ICONINFORMATION|MB_OK;
|
||||
break;
|
||||
case SDT_WARNING:
|
||||
windowsType = MB_ICONWARNING|MB_OK;
|
||||
break;
|
||||
case SDT_ERROR:
|
||||
windowsType = MB_ICONERROR|MB_OK;
|
||||
break;
|
||||
case SDT_YES_NO:
|
||||
windowsType = MB_ICONQUESTION|MB_YESNO;
|
||||
break;
|
||||
case SDT_OK_CANCEL:
|
||||
windowsType = MB_ICONWARNING|MB_OKCANCEL;
|
||||
break;
|
||||
}
|
||||
|
||||
switch (MessageBoxW(NULL, windowsMessage.c_str(), windowsTitle.c_str(), windowsType))
|
||||
{
|
||||
case IDOK:
|
||||
return SDR_OK;
|
||||
case IDCANCEL:
|
||||
return SDR_CANCEL;
|
||||
case IDYES:
|
||||
return SDR_YES;
|
||||
case IDNO:
|
||||
return SDR_NO;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
return SDR_OK;
|
||||
}
|
||||
|
||||
#elif defined(PLATFORM_LINUX)
|
||||
|
||||
SystemDialogResult SystemDialog_Linux(SystemDialogType type, const std::string& title, const std::string& message)
|
||||
{
|
||||
std::string options = "";
|
||||
switch (type)
|
||||
{
|
||||
case SDT_INFO:
|
||||
default:
|
||||
options = "--info";
|
||||
break;
|
||||
case SDT_WARNING:
|
||||
options = "--warning";
|
||||
break;
|
||||
case SDT_ERROR:
|
||||
options = "--error";
|
||||
break;
|
||||
case SDT_YES_NO:
|
||||
options = "--question --ok-label=\"Yes\" --cancel-label=\"No\"";
|
||||
break;
|
||||
case SDT_OK_CANCEL:
|
||||
options = "--question --ok-label=\"OK\" --cancel-label=\"Cancel\"";
|
||||
break;
|
||||
}
|
||||
|
||||
std::string command = "zenity " + options + " --text=\"" + message + "\" --title=\"" + title + "\"";
|
||||
int code = system(command.c_str());
|
||||
|
||||
SystemDialogResult result = SDR_OK;
|
||||
switch (type)
|
||||
{
|
||||
case SDT_YES_NO:
|
||||
result = code ? SDR_NO : SDR_YES;
|
||||
break;
|
||||
case SDT_OK_CANCEL:
|
||||
result = code ? SDR_CANCEL : SDR_OK;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
#else
|
||||
|
||||
SystemDialogResult SystemDialog_Other(SystemDialogType type, const std::string& title, const std::string& message)
|
||||
{
|
||||
switch (type)
|
||||
{
|
||||
case SDT_INFO:
|
||||
std::cout << "INFO: ";
|
||||
break;
|
||||
case SDT_WARNING:
|
||||
std::cout << "WARNING:";
|
||||
break;
|
||||
case SDT_ERROR:
|
||||
std::cout << "ERROR: ";
|
||||
break;
|
||||
case SDT_YES_NO:
|
||||
case SDT_OK_CANCEL:
|
||||
std::cout << "QUESTION: ";
|
||||
break;
|
||||
}
|
||||
|
||||
std::cout << message << std::endl;
|
||||
|
||||
std::string line;
|
||||
|
||||
SystemDialogResult result = SDR_OK;
|
||||
|
||||
bool done = false;
|
||||
while (!done)
|
||||
{
|
||||
switch (type)
|
||||
{
|
||||
case SDT_INFO:
|
||||
case SDT_WARNING:
|
||||
case SDT_ERROR:
|
||||
std::cout << "Press ENTER to continue";
|
||||
break;
|
||||
|
||||
case SDT_YES_NO:
|
||||
std::cout << "Type 'Y' for Yes or 'N' for No";
|
||||
break;
|
||||
|
||||
case SDT_OK_CANCEL:
|
||||
std::cout << "Type 'O' for OK or 'C' for Cancel";
|
||||
break;
|
||||
}
|
||||
|
||||
std::getline(std::cin, line);
|
||||
|
||||
switch (type)
|
||||
{
|
||||
case SDT_INFO:
|
||||
case SDT_WARNING:
|
||||
case SDT_ERROR:
|
||||
done = true;
|
||||
break;
|
||||
|
||||
case SDT_YES_NO:
|
||||
if (line == "Y" || line == "y")
|
||||
{
|
||||
result = SDR_YES;
|
||||
done = true;
|
||||
}
|
||||
else if (line == "N" || line == "n")
|
||||
{
|
||||
result = SDR_NO;
|
||||
done = true;
|
||||
}
|
||||
break;
|
||||
|
||||
case SDT_OK_CANCEL:
|
||||
if (line == "O" || line == "o")
|
||||
{
|
||||
done = true;
|
||||
result = SDR_OK;
|
||||
}
|
||||
else if (line == "C" || line == "c")
|
||||
{
|
||||
done = true;
|
||||
result = SDR_CANCEL;
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
#endif // if defined(PLATFORM_WINDOWS)
|
|
@ -0,0 +1,57 @@
|
|||
// * This file is part of the COLOBOT source code
|
||||
// * Copyright (C) 2001-2008, Daniel ROUX & EPSITEC SA, www.epsitec.ch
|
||||
// * Copyright (C) 2012, Polish Portal of Colobot (PPC)
|
||||
// *
|
||||
// * 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/.
|
||||
|
||||
// system.h
|
||||
|
||||
#pragma once
|
||||
|
||||
|
||||
#include <string>
|
||||
|
||||
|
||||
/**
|
||||
* \enum SysDialogType Type of system dialog
|
||||
*/
|
||||
enum SystemDialogType
|
||||
{
|
||||
//! Information message
|
||||
SDT_INFO,
|
||||
//! Warning message
|
||||
SDT_WARNING,
|
||||
//! Error message
|
||||
SDT_ERROR,
|
||||
//! Yes/No question
|
||||
SDT_YES_NO,
|
||||
//! Ok/Cancel question
|
||||
SDT_OK_CANCEL
|
||||
};
|
||||
|
||||
/**
|
||||
* \enum SysDialogResult Result of system dialog
|
||||
*
|
||||
* Means which button was pressed.
|
||||
*/
|
||||
enum SystemDialogResult
|
||||
{
|
||||
SDR_OK,
|
||||
SDR_CANCEL,
|
||||
SDR_YES,
|
||||
SDR_NO
|
||||
};
|
||||
|
||||
//! Displays a system dialog
|
||||
SystemDialogResult SystemDialog(SystemDialogType, const std::string &title, const std::string &message);
|
|
@ -0,0 +1,8 @@
|
|||
#pragma once
|
||||
|
||||
// Macros set by CMake
|
||||
#cmakedefine DEBUG
|
||||
#cmakedefine PLATFORM_WINDOWS @PLATFORM_WINDOWS@
|
||||
#cmakedefine PLATFORM_LINUX @PLATFORM_LINUX@
|
||||
#cmakedefine PLATFORM_OTHER @PLATFORM_OTHER@
|
||||
|
|
@ -16,16 +16,23 @@
|
|||
|
||||
// event.cpp
|
||||
|
||||
|
||||
#include <windows.h>
|
||||
#include <stdio.h>
|
||||
|
||||
#include "common/struct.h"
|
||||
#include "common/iman.h"
|
||||
#include "common/event.h"
|
||||
|
||||
#include <string.h>
|
||||
|
||||
|
||||
Event::Event()
|
||||
{
|
||||
event = EVENT_NULL;
|
||||
param = 0;
|
||||
axeX = 0.0f;
|
||||
axeY = 0.0f;
|
||||
axeZ = 0.0f;
|
||||
keyState = 0;
|
||||
rTime = 0.0f;
|
||||
}
|
||||
|
||||
|
||||
// Object's constructor.
|
||||
|
||||
|
@ -57,7 +64,7 @@ void CEvent::Flush()
|
|||
|
||||
void CEvent::MakeEvent(Event &event, EventMsg msg)
|
||||
{
|
||||
ZeroMemory(&event, sizeof(Event));
|
||||
memset(&event, 0, sizeof(Event));
|
||||
event.event = msg;
|
||||
}
|
||||
|
||||
|
|
|
@ -538,6 +538,8 @@ struct Event
|
|||
float axeZ; // control the Z axis (-1 .. 1)
|
||||
short keyState; // state of the keyboard (KS_ *)
|
||||
float rTime; // relative time
|
||||
|
||||
Event();
|
||||
};
|
||||
|
||||
|
||||
|
@ -619,8 +621,6 @@ public:
|
|||
bool AddEvent(const Event &event);
|
||||
bool GetEvent(Event &event);
|
||||
|
||||
protected:
|
||||
|
||||
protected:
|
||||
CInstanceManager* m_iMan;
|
||||
|
||||
|
|
|
@ -17,7 +17,6 @@
|
|||
// iman.cpp
|
||||
|
||||
|
||||
#include <windows.h>
|
||||
#include <stdio.h>
|
||||
|
||||
#include "common/struct.h"
|
||||
|
|
|
@ -19,12 +19,12 @@
|
|||
#pragma once
|
||||
|
||||
|
||||
|
||||
|
||||
#include "old/d3dengine.h"
|
||||
#include "common/event.h"
|
||||
|
||||
|
||||
class CD3DEngine;
|
||||
|
||||
|
||||
|
||||
|
||||
// Possible types of the text resources.
|
||||
|
|
|
@ -19,8 +19,6 @@
|
|||
#pragma once
|
||||
|
||||
|
||||
#include <d3d.h>
|
||||
|
||||
#include <math/vector.h>
|
||||
|
||||
|
||||
|
|
|
@ -20,7 +20,6 @@
|
|||
#pragma once
|
||||
|
||||
#include "engine.h"
|
||||
#include "common/struct.h"
|
||||
#include "common/event.h"
|
||||
|
||||
|
||||
|
|
|
@ -19,10 +19,10 @@
|
|||
|
||||
#pragma once
|
||||
|
||||
#include "common/struct.h"
|
||||
#include "common/event.h"
|
||||
#include "graphics/common/color.h"
|
||||
#include "math/point.h"
|
||||
#include "math/vector.h"
|
||||
|
||||
|
||||
|
||||
|
|
|
@ -0,0 +1,14 @@
|
|||
#include "graphics/common/device.h"
|
||||
|
||||
//! Sets the default values
|
||||
Gfx::DeviceConfig::DeviceConfig()
|
||||
{
|
||||
width = 800;
|
||||
height = 600;
|
||||
bpp = 16;
|
||||
fullScreen = false;
|
||||
resizeable = false;
|
||||
hardwareAccel = true;
|
||||
doubleBuf = true;
|
||||
noFrame = false;
|
||||
}
|
|
@ -22,6 +22,28 @@
|
|||
|
||||
namespace Gfx {
|
||||
|
||||
struct DeviceConfig
|
||||
{
|
||||
//! Screen width
|
||||
int width;
|
||||
//! Screen height
|
||||
int height;
|
||||
//! Bits per pixel
|
||||
int bpp;
|
||||
//! Full screen
|
||||
bool fullScreen;
|
||||
//! Resizeable window
|
||||
bool resizeable;
|
||||
//! Hardware acceleration
|
||||
bool hardwareAccel;
|
||||
//! Double buffering
|
||||
bool doubleBuf;
|
||||
//! No window frame (also set with full screen)
|
||||
bool noFrame;
|
||||
|
||||
DeviceConfig();
|
||||
};
|
||||
|
||||
class CDevice
|
||||
{
|
||||
// TODO
|
||||
|
|
|
@ -19,5 +19,55 @@
|
|||
|
||||
#include "graphics/common/engine.h"
|
||||
|
||||
#include <GL/gl.h>
|
||||
#include <GL/glu.h>
|
||||
|
||||
|
||||
// TODO implementation
|
||||
|
||||
Gfx::CEngine::CEngine(CInstanceManager *iMan, CApplication *app)
|
||||
{
|
||||
// TODO
|
||||
}
|
||||
|
||||
Gfx::CEngine::~CEngine()
|
||||
{
|
||||
// TODO
|
||||
}
|
||||
|
||||
int Gfx::CEngine::Render()
|
||||
{
|
||||
/* Just a hello world for now */
|
||||
|
||||
glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
|
||||
glShadeModel(GL_SMOOTH);
|
||||
glDisable(GL_DEPTH_TEST);
|
||||
glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST);
|
||||
|
||||
|
||||
glMatrixMode(GL_PROJECTION);
|
||||
glLoadIdentity();
|
||||
gluOrtho2D(-10.0f, 10.0f, -10.0f, 10.0f);
|
||||
|
||||
glMatrixMode(GL_MODELVIEW);
|
||||
glLoadIdentity();
|
||||
|
||||
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
|
||||
|
||||
//glTranslatef(0.0f, 0.0f, -6.0f);
|
||||
|
||||
glBegin(GL_TRIANGLES);
|
||||
{
|
||||
glColor3f(1.0f, 0.0f, 0.0f);
|
||||
glVertex2f(-2.0f, -1.0f);
|
||||
glColor3f(0.0f, 1.0f, 0.0f);
|
||||
glVertex2f(2.0f, -1.0f);
|
||||
glColor3f(0.0f, 0.0f, 1.0f);
|
||||
glVertex2f(0.0f, 1.5f);
|
||||
}
|
||||
glEnd();
|
||||
|
||||
glFlush();
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
|
|
@ -20,11 +20,11 @@
|
|||
#pragma once
|
||||
|
||||
#include "common/misc.h"
|
||||
#include "common/struct.h"
|
||||
#include "object/object.h"
|
||||
#include "math/vector.h"
|
||||
|
||||
|
||||
class CInstanceManager;
|
||||
class CObject;
|
||||
class CSound;
|
||||
|
||||
|
||||
|
|
|
@ -20,7 +20,6 @@
|
|||
#pragma once
|
||||
|
||||
#include "engine.h"
|
||||
#include "common/struct.h"
|
||||
#include "common/event.h"
|
||||
#include "modfile.h"
|
||||
#include "vertex.h"
|
||||
|
|
|
@ -305,7 +305,7 @@ protected:
|
|||
void DrawParticuleWheel(int i);
|
||||
CObject* SearchObjectGun(Math::Vector old, Math::Vector pos, ParticuleType type, CObject *father);
|
||||
CObject* SearchObjectRay(Math::Vector pos, Math::Vector goal, ParticuleType type, CObject *father);
|
||||
void Play(Sound sound, Math::Vector pos, float amplitude);
|
||||
void Play(Snd::Sound sound, Math::Vector pos, float amplitude);
|
||||
bool TrackMove(int i, Math::Vector pos, float progress);
|
||||
void TrackDraw(int i, ParticuleType type);
|
||||
|
||||
|
|
|
@ -19,7 +19,6 @@
|
|||
|
||||
#pragma once
|
||||
|
||||
#include "common/struct.h"
|
||||
#include "common/event.h"
|
||||
#include "math/point.h"
|
||||
|
||||
|
|
|
@ -19,9 +19,11 @@
|
|||
|
||||
#pragma once
|
||||
|
||||
#include "graphics/common/engine.h"
|
||||
#include "object/object.h"
|
||||
#include "common/misc.h"
|
||||
#include "graphics/common/engine.h"
|
||||
//#include "object/object.h"
|
||||
// TEMPORARILY!
|
||||
enum ObjectType {};
|
||||
|
||||
|
||||
class CInstanceManager;
|
||||
|
@ -93,7 +95,7 @@ public:
|
|||
CPyro(CInstanceManager* iMan);
|
||||
~CPyro();
|
||||
|
||||
void DeleteObject(bool bAll=FALSE);
|
||||
void DeleteObject(bool bAll=false);
|
||||
bool Create(PyroType type, CObject* pObj, float force=1.0f);
|
||||
bool EventProcess(const Event &event);
|
||||
Error IsEnded();
|
||||
|
|
|
@ -62,7 +62,7 @@
|
|||
#include "ui/window.h"
|
||||
#include "ui/displaytext.h"
|
||||
#include "old/text.h"
|
||||
#include "sound/sound.h"
|
||||
#include "old/sound.h"
|
||||
#include "old/particule.h"
|
||||
#include "script/cmdtoken.h"
|
||||
|
||||
|
|
|
@ -85,7 +85,7 @@
|
|||
#include "ui/displaytext.h"
|
||||
#include "script/cmdtoken.h"
|
||||
#include "script/cbottoken.h"
|
||||
#include "sound/sound.h"
|
||||
#include "old/sound.h"
|
||||
#include "object/object.h"
|
||||
|
||||
|
||||
|
|
|
@ -21,7 +21,7 @@
|
|||
|
||||
#include "old/d3dengine.h"
|
||||
#include "old/camera.h"
|
||||
#include "sound/sound.h"
|
||||
#include "old/sound.h"
|
||||
|
||||
|
||||
class CInstanceManager;
|
||||
|
|
|
@ -69,7 +69,7 @@
|
|||
#include "ui/edit.h"
|
||||
#include "ui/displaytext.h"
|
||||
#include "old/text.h"
|
||||
#include "sound/sound.h"
|
||||
#include "old/sound.h"
|
||||
#include "script/cbottoken.h"
|
||||
#include "script/cmdtoken.h"
|
||||
#include "object/mainmovie.h"
|
||||
|
|
|
@ -35,7 +35,7 @@
|
|||
#include "old/camera.h"
|
||||
#include "object/auto/auto.h"
|
||||
#include "object/auto/autopara.h"
|
||||
#include "sound/sound.h"
|
||||
#include "old/sound.h"
|
||||
#include "old/blitz.h"
|
||||
|
||||
|
||||
|
|
|
@ -35,7 +35,7 @@
|
|||
#include "old/math3d.h"
|
||||
#include "old/joystick.h"
|
||||
#include "object/robotmain.h"
|
||||
#include "sound/sound.h"
|
||||
#include "old/sound.h"
|
||||
#include "old/d3dapp.h"
|
||||
|
||||
// fix for "MSH_MOUSEWHEEL undefined" error
|
||||
|
|
|
@ -44,7 +44,7 @@
|
|||
#include "old/cloud.h"
|
||||
#include "old/blitz.h"
|
||||
#include "old/planet.h"
|
||||
#include "sound/sound.h"
|
||||
#include "old/sound.h"
|
||||
|
||||
|
||||
|
||||
|
|
|
@ -38,7 +38,7 @@
|
|||
#include "object/auto/auto.h"
|
||||
#include "object/robotmain.h"
|
||||
#include "old/terrain.h"
|
||||
#include "sound/sound.h"
|
||||
#include "old/sound.h"
|
||||
#include "old/water.h"
|
||||
#include "old/particule.h"
|
||||
|
||||
|
|
|
@ -21,7 +21,7 @@
|
|||
|
||||
#include "math/point.h"
|
||||
#include "old/d3dengine.h"
|
||||
#include "sound/sound.h"
|
||||
#include "old/sound.h"
|
||||
|
||||
|
||||
class CInstanceManager;
|
||||
|
|
|
@ -39,7 +39,7 @@
|
|||
#include "object/motion/motion.h"
|
||||
#include "object/motion/motionhuman.h"
|
||||
#include "ui/displaytext.h"
|
||||
#include "sound/sound.h"
|
||||
#include "old/sound.h"
|
||||
#include "old/pyro.h"
|
||||
|
||||
|
||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,242 @@
|
|||
// * 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/.
|
||||
|
||||
// sound.h
|
||||
|
||||
#pragma once
|
||||
|
||||
|
||||
#include <dsound.h>
|
||||
|
||||
|
||||
const int MAXFILES = 200;
|
||||
const int MAXSOUND = 32;
|
||||
const int MAXVOLUME = 20;
|
||||
const int MAXOPER = 4;
|
||||
|
||||
class CInstanceManager;
|
||||
|
||||
|
||||
enum Sound
|
||||
{
|
||||
SOUND_CLICK = 0,
|
||||
SOUND_BOUM = 1,
|
||||
SOUND_EXPLO = 2,
|
||||
SOUND_FLYh = 3, // human
|
||||
SOUND_FLY = 4,
|
||||
SOUND_STEPs = 5, // smooth
|
||||
SOUND_MOTORw = 6, // wheel
|
||||
SOUND_MOTORt = 7, // tank
|
||||
SOUND_MOTORr = 8, // roller
|
||||
SOUND_ERROR = 9,
|
||||
SOUND_CONVERT = 10,
|
||||
SOUND_ENERGY = 11,
|
||||
SOUND_PLOUF = 12,
|
||||
SOUND_BLUP = 13,
|
||||
SOUND_WARNING = 14,
|
||||
SOUND_DERRICK = 15,
|
||||
SOUND_LABO = 16,
|
||||
SOUND_STATION = 17,
|
||||
SOUND_REPAIR = 18,
|
||||
SOUND_RESEARCH = 19,
|
||||
SOUND_INSECTs = 20, // spider
|
||||
SOUND_BURN = 21,
|
||||
SOUND_TZOING = 22,
|
||||
SOUND_GGG = 23,
|
||||
SOUND_MANIP = 24,
|
||||
SOUND_FIRE = 25, // shooting with fireball
|
||||
SOUND_HUMAN1 = 26, // breathing
|
||||
SOUND_STEPw = 27, // water
|
||||
SOUND_SWIM = 28,
|
||||
SOUND_RADAR = 29,
|
||||
SOUND_BUILD = 30,
|
||||
SOUND_ALARM = 31, // energy alarm
|
||||
SOUND_SLIDE = 32,
|
||||
SOUND_EXPLOi = 33, // insect
|
||||
SOUND_INSECTa = 34, // ant
|
||||
SOUND_INSECTb = 35, // bee
|
||||
SOUND_INSECTw = 36, // worm
|
||||
SOUND_INSECTm = 37, // mother
|
||||
SOUND_TREMBLE = 38,
|
||||
SOUND_PSHHH = 39,
|
||||
SOUND_NUCLEAR = 40,
|
||||
SOUND_INFO = 41,
|
||||
SOUND_OPEN = 42,
|
||||
SOUND_CLOSE = 43,
|
||||
SOUND_FACTORY = 44,
|
||||
SOUND_EGG = 45,
|
||||
SOUND_MOTORs = 46, // submarine
|
||||
SOUND_MOTORi = 47, // insect (legs)
|
||||
SOUND_SHIELD = 48,
|
||||
SOUND_FIREi = 49, // shooting with orgaball (insect)
|
||||
SOUND_GUNDEL = 50,
|
||||
SOUND_PSHHH2 = 51, // shield
|
||||
SOUND_MESSAGE = 52,
|
||||
SOUND_BOUMm = 53, // metal
|
||||
SOUND_BOUMv = 54, // plant
|
||||
SOUND_BOUMs = 55, // smooth
|
||||
SOUND_EXPLOl = 56, // little
|
||||
SOUND_EXPLOlp = 57, // little power
|
||||
SOUND_EXPLOp = 58, // power
|
||||
SOUND_STEPh = 59, // hard
|
||||
SOUND_STEPm = 60, // metal
|
||||
SOUND_POWERON = 61,
|
||||
SOUND_POWEROFF = 62,
|
||||
SOUND_AIE = 63,
|
||||
SOUND_WAYPOINT = 64,
|
||||
SOUND_RECOVER = 65,
|
||||
SOUND_DEADi = 66,
|
||||
SOUND_JOSTLE = 67,
|
||||
SOUND_GFLAT = 68,
|
||||
SOUND_DEADg = 69, // shooting death
|
||||
SOUND_DEADw = 70, // drowning
|
||||
SOUND_FLYf = 71, // reactor fail
|
||||
SOUND_ALARMt = 72, // temperature alarm
|
||||
SOUND_FINDING = 73, // finds a cache object
|
||||
SOUND_THUMP = 74,
|
||||
SOUND_TOUCH = 75,
|
||||
SOUND_BLITZ = 76,
|
||||
SOUND_MUSHROOM = 77,
|
||||
SOUND_FIREp = 78, // shooting with phazer
|
||||
SOUND_EXPLOg1 = 79, // impact gun 1
|
||||
SOUND_EXPLOg2 = 80, // impact gun 2
|
||||
SOUND_MOTORd = 81, // engine friction
|
||||
};
|
||||
|
||||
enum SoundNext
|
||||
{
|
||||
SOPER_CONTINUE = 1,
|
||||
SOPER_STOP = 2,
|
||||
SOPER_LOOP = 3,
|
||||
};
|
||||
|
||||
struct SoundOper
|
||||
{
|
||||
char bUsed;
|
||||
float finalAmplitude;
|
||||
float finalFrequency;
|
||||
float totalTime;
|
||||
float currentTime;
|
||||
SoundNext nextOper;
|
||||
};
|
||||
|
||||
struct SoundChannel
|
||||
{
|
||||
char bUsed; // buffer used?
|
||||
char bMute; // silence?
|
||||
Sound type; // SOUND_*
|
||||
int priority; // so great -> important
|
||||
Math::Vector pos; // position in space
|
||||
unsigned short uniqueStamp; // unique marker
|
||||
LPDIRECTSOUNDBUFFER soundBuffer;
|
||||
LPDIRECTSOUND3DBUFFER soundBuffer3D;
|
||||
float startAmplitude;
|
||||
float startFrequency;
|
||||
float changeFrequency;
|
||||
int initFrequency;
|
||||
float volume; // 2D: volume 1..0 depending on position
|
||||
float pan; // 2D: pan -1..+1 depending on position
|
||||
SoundOper oper[MAXOPER];
|
||||
};
|
||||
|
||||
|
||||
|
||||
class CSound
|
||||
{
|
||||
public:
|
||||
CSound(CInstanceManager* iMan);
|
||||
~CSound();
|
||||
|
||||
void SetDebugMode(bool bMode);
|
||||
bool Create(HWND hWnd, bool b3D);
|
||||
void CacheAll();
|
||||
|
||||
void SetState(bool bState);
|
||||
bool RetEnable();
|
||||
|
||||
void SetCDpath(char *path);
|
||||
void SetAudioTrack(bool bAudio);
|
||||
|
||||
void SetSound3D(bool bMode);
|
||||
bool RetSound3D();
|
||||
bool RetSound3DCap();
|
||||
|
||||
void SetAudioVolume(int volume);
|
||||
int RetAudioVolume();
|
||||
void SetMidiVolume(int volume);
|
||||
int RetMidiVolume();
|
||||
|
||||
void SetListener(Math::Vector eye, Math::Vector lookat);
|
||||
void FrameMove(float rTime);
|
||||
|
||||
int Play(Sound sound, float amplitude=1.0f, float frequency=1.0f, bool bLoop=false);
|
||||
int Play(Sound sound, Math::Vector pos, float amplitude=1.0f, float frequency=1.0f, bool bLoop=false);
|
||||
bool FlushEnvelope(int channel);
|
||||
bool AddEnvelope(int channel, float amplitude, float frequency, float time, SoundNext oper);
|
||||
bool Position(int channel, Math::Vector pos);
|
||||
bool Frequency(int channel, float frequency);
|
||||
bool Stop(int channel);
|
||||
bool StopAll();
|
||||
bool MuteAll(bool bMute);
|
||||
|
||||
bool PlayMusic(int rank, bool bRepeat);
|
||||
bool RestartMusic();
|
||||
void SuspendMusic();
|
||||
void StopMusic();
|
||||
bool IsPlayingMusic();
|
||||
void AdaptVolumeMusic();
|
||||
|
||||
protected:
|
||||
bool CheckChannel(int &channel);
|
||||
bool CreateSoundBuffer(int channel, DWORD size, DWORD freq, DWORD bitsPerSample, DWORD blkAlign, bool bStereo);
|
||||
bool ReadData(LPDIRECTSOUNDBUFFER lpDSB, Sound sound, DWORD size);
|
||||
bool CreateBuffer(int channel, Sound sound);
|
||||
void ComputeVolumePan2D(int channel, const Math::Vector &pos);
|
||||
bool ReadFile(Sound sound, char *metaname, char *filename);
|
||||
int RetPriority(Sound sound);
|
||||
bool SearchFreeBuffer(Sound sound, int &channel, bool &bAlreadyLoaded);
|
||||
void OperNext(int channel);
|
||||
bool PlayAudioTrack(int rank);
|
||||
|
||||
protected:
|
||||
CInstanceManager* m_iMan;
|
||||
|
||||
HWND m_hWnd;
|
||||
bool m_bEnable;
|
||||
bool m_bState;
|
||||
bool m_bAudioTrack;
|
||||
bool m_ctrl3D;
|
||||
bool m_bDebugMode;
|
||||
LPDIRECTSOUND m_lpDS;
|
||||
LPDIRECTSOUND3DLISTENER m_listener;
|
||||
SoundChannel m_channel[MAXSOUND];
|
||||
char* m_files[MAXFILES];
|
||||
UINT m_MidiDeviceID;
|
||||
int m_MIDIMusic;
|
||||
bool m_bRepeatMusic;
|
||||
int m_audioVolume;
|
||||
int m_midiVolume;
|
||||
int m_lastMidiVolume;
|
||||
Math::Vector m_eye;
|
||||
Math::Vector m_lookat;
|
||||
float m_lastTime;
|
||||
float m_playTime;
|
||||
int m_uniqueStamp;
|
||||
int m_maxSound;
|
||||
char m_CDpath[100];
|
||||
};
|
||||
|
||||
|
|
@ -34,7 +34,7 @@
|
|||
#include "old/particule.h"
|
||||
#include "old/terrain.h"
|
||||
#include "object/object.h"
|
||||
#include "sound/sound.h"
|
||||
#include "old/sound.h"
|
||||
#include "old/water.h"
|
||||
|
||||
|
||||
|
|
|
@ -42,7 +42,7 @@
|
|||
#include "object/brain.h"
|
||||
#include "object/motion/motion.h"
|
||||
#include "object/motion/motionhuman.h"
|
||||
#include "sound/sound.h"
|
||||
#include "old/sound.h"
|
||||
#include "object/task/task.h"
|
||||
#include "script/cmdtoken.h"
|
||||
#include "physics/physics.h"
|
||||
|
|
1659
src/sound/sound.cpp
1659
src/sound/sound.cpp
File diff suppressed because it is too large
Load Diff
|
@ -1,242 +1,165 @@
|
|||
// * 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/.
|
||||
|
||||
// sound.h
|
||||
|
||||
#pragma once
|
||||
|
||||
|
||||
#include <dsound.h>
|
||||
|
||||
|
||||
const int MAXFILES = 200;
|
||||
const int MAXSOUND = 32;
|
||||
const int MAXVOLUME = 20;
|
||||
const int MAXOPER = 4;
|
||||
|
||||
class CInstanceManager;
|
||||
|
||||
|
||||
enum Sound
|
||||
{
|
||||
SOUND_CLICK = 0,
|
||||
SOUND_BOUM = 1,
|
||||
SOUND_EXPLO = 2,
|
||||
SOUND_FLYh = 3, // human
|
||||
SOUND_FLY = 4,
|
||||
SOUND_STEPs = 5, // smooth
|
||||
SOUND_MOTORw = 6, // wheel
|
||||
SOUND_MOTORt = 7, // tank
|
||||
SOUND_MOTORr = 8, // roller
|
||||
SOUND_ERROR = 9,
|
||||
SOUND_CONVERT = 10,
|
||||
SOUND_ENERGY = 11,
|
||||
SOUND_PLOUF = 12,
|
||||
SOUND_BLUP = 13,
|
||||
SOUND_WARNING = 14,
|
||||
SOUND_DERRICK = 15,
|
||||
SOUND_LABO = 16,
|
||||
SOUND_STATION = 17,
|
||||
SOUND_REPAIR = 18,
|
||||
SOUND_RESEARCH = 19,
|
||||
SOUND_INSECTs = 20, // spider
|
||||
SOUND_BURN = 21,
|
||||
SOUND_TZOING = 22,
|
||||
SOUND_GGG = 23,
|
||||
SOUND_MANIP = 24,
|
||||
SOUND_FIRE = 25, // shooting with fireball
|
||||
SOUND_HUMAN1 = 26, // breathing
|
||||
SOUND_STEPw = 27, // water
|
||||
SOUND_SWIM = 28,
|
||||
SOUND_RADAR = 29,
|
||||
SOUND_BUILD = 30,
|
||||
SOUND_ALARM = 31, // energy alarm
|
||||
SOUND_SLIDE = 32,
|
||||
SOUND_EXPLOi = 33, // insect
|
||||
SOUND_INSECTa = 34, // ant
|
||||
SOUND_INSECTb = 35, // bee
|
||||
SOUND_INSECTw = 36, // worm
|
||||
SOUND_INSECTm = 37, // mother
|
||||
SOUND_TREMBLE = 38,
|
||||
SOUND_PSHHH = 39,
|
||||
SOUND_NUCLEAR = 40,
|
||||
SOUND_INFO = 41,
|
||||
SOUND_OPEN = 42,
|
||||
SOUND_CLOSE = 43,
|
||||
SOUND_FACTORY = 44,
|
||||
SOUND_EGG = 45,
|
||||
SOUND_MOTORs = 46, // submarine
|
||||
SOUND_MOTORi = 47, // insect (legs)
|
||||
SOUND_SHIELD = 48,
|
||||
SOUND_FIREi = 49, // shooting with orgaball (insect)
|
||||
SOUND_GUNDEL = 50,
|
||||
SOUND_PSHHH2 = 51, // shield
|
||||
SOUND_MESSAGE = 52,
|
||||
SOUND_BOUMm = 53, // metal
|
||||
SOUND_BOUMv = 54, // plant
|
||||
SOUND_BOUMs = 55, // smooth
|
||||
SOUND_EXPLOl = 56, // little
|
||||
SOUND_EXPLOlp = 57, // little power
|
||||
SOUND_EXPLOp = 58, // power
|
||||
SOUND_STEPh = 59, // hard
|
||||
SOUND_STEPm = 60, // metal
|
||||
SOUND_POWERON = 61,
|
||||
SOUND_POWEROFF = 62,
|
||||
SOUND_AIE = 63,
|
||||
SOUND_WAYPOINT = 64,
|
||||
SOUND_RECOVER = 65,
|
||||
SOUND_DEADi = 66,
|
||||
SOUND_JOSTLE = 67,
|
||||
SOUND_GFLAT = 68,
|
||||
SOUND_DEADg = 69, // shooting death
|
||||
SOUND_DEADw = 70, // drowning
|
||||
SOUND_FLYf = 71, // reactor fail
|
||||
SOUND_ALARMt = 72, // temperature alarm
|
||||
SOUND_FINDING = 73, // finds a cache object
|
||||
SOUND_THUMP = 74,
|
||||
SOUND_TOUCH = 75,
|
||||
SOUND_BLITZ = 76,
|
||||
SOUND_MUSHROOM = 77,
|
||||
SOUND_FIREp = 78, // shooting with phazer
|
||||
SOUND_EXPLOg1 = 79, // impact gun 1
|
||||
SOUND_EXPLOg2 = 80, // impact gun 2
|
||||
SOUND_MOTORd = 81, // engine friction
|
||||
};
|
||||
|
||||
enum SoundNext
|
||||
{
|
||||
SOPER_CONTINUE = 1,
|
||||
SOPER_STOP = 2,
|
||||
SOPER_LOOP = 3,
|
||||
};
|
||||
|
||||
struct SoundOper
|
||||
{
|
||||
char bUsed;
|
||||
float finalAmplitude;
|
||||
float finalFrequency;
|
||||
float totalTime;
|
||||
float currentTime;
|
||||
SoundNext nextOper;
|
||||
};
|
||||
|
||||
struct SoundChannel
|
||||
{
|
||||
char bUsed; // buffer used?
|
||||
char bMute; // silence?
|
||||
Sound type; // SOUND_*
|
||||
int priority; // so great -> important
|
||||
Math::Vector pos; // position in space
|
||||
unsigned short uniqueStamp; // unique marker
|
||||
LPDIRECTSOUNDBUFFER soundBuffer;
|
||||
LPDIRECTSOUND3DBUFFER soundBuffer3D;
|
||||
float startAmplitude;
|
||||
float startFrequency;
|
||||
float changeFrequency;
|
||||
int initFrequency;
|
||||
float volume; // 2D: volume 1..0 depending on position
|
||||
float pan; // 2D: pan -1..+1 depending on position
|
||||
SoundOper oper[MAXOPER];
|
||||
};
|
||||
|
||||
|
||||
|
||||
class CSound
|
||||
{
|
||||
public:
|
||||
CSound(CInstanceManager* iMan);
|
||||
~CSound();
|
||||
|
||||
void SetDebugMode(bool bMode);
|
||||
bool Create(HWND hWnd, bool b3D);
|
||||
void CacheAll();
|
||||
|
||||
void SetState(bool bState);
|
||||
bool RetEnable();
|
||||
|
||||
void SetCDpath(char *path);
|
||||
void SetAudioTrack(bool bAudio);
|
||||
|
||||
void SetSound3D(bool bMode);
|
||||
bool RetSound3D();
|
||||
bool RetSound3DCap();
|
||||
|
||||
void SetAudioVolume(int volume);
|
||||
int RetAudioVolume();
|
||||
void SetMidiVolume(int volume);
|
||||
int RetMidiVolume();
|
||||
|
||||
void SetListener(Math::Vector eye, Math::Vector lookat);
|
||||
void FrameMove(float rTime);
|
||||
|
||||
int Play(Sound sound, float amplitude=1.0f, float frequency=1.0f, bool bLoop=false);
|
||||
int Play(Sound sound, Math::Vector pos, float amplitude=1.0f, float frequency=1.0f, bool bLoop=false);
|
||||
bool FlushEnvelope(int channel);
|
||||
bool AddEnvelope(int channel, float amplitude, float frequency, float time, SoundNext oper);
|
||||
bool Position(int channel, Math::Vector pos);
|
||||
bool Frequency(int channel, float frequency);
|
||||
bool Stop(int channel);
|
||||
bool StopAll();
|
||||
bool MuteAll(bool bMute);
|
||||
|
||||
bool PlayMusic(int rank, bool bRepeat);
|
||||
bool RestartMusic();
|
||||
void SuspendMusic();
|
||||
void StopMusic();
|
||||
bool IsPlayingMusic();
|
||||
void AdaptVolumeMusic();
|
||||
|
||||
protected:
|
||||
bool CheckChannel(int &channel);
|
||||
bool CreateSoundBuffer(int channel, DWORD size, DWORD freq, DWORD bitsPerSample, DWORD blkAlign, bool bStereo);
|
||||
bool ReadData(LPDIRECTSOUNDBUFFER lpDSB, Sound sound, DWORD size);
|
||||
bool CreateBuffer(int channel, Sound sound);
|
||||
void ComputeVolumePan2D(int channel, const Math::Vector &pos);
|
||||
bool ReadFile(Sound sound, char *metaname, char *filename);
|
||||
int RetPriority(Sound sound);
|
||||
bool SearchFreeBuffer(Sound sound, int &channel, bool &bAlreadyLoaded);
|
||||
void OperNext(int channel);
|
||||
bool PlayAudioTrack(int rank);
|
||||
|
||||
protected:
|
||||
CInstanceManager* m_iMan;
|
||||
|
||||
HWND m_hWnd;
|
||||
bool m_bEnable;
|
||||
bool m_bState;
|
||||
bool m_bAudioTrack;
|
||||
bool m_ctrl3D;
|
||||
bool m_bDebugMode;
|
||||
LPDIRECTSOUND m_lpDS;
|
||||
LPDIRECTSOUND3DLISTENER m_listener;
|
||||
SoundChannel m_channel[MAXSOUND];
|
||||
char* m_files[MAXFILES];
|
||||
UINT m_MidiDeviceID;
|
||||
int m_MIDIMusic;
|
||||
bool m_bRepeatMusic;
|
||||
int m_audioVolume;
|
||||
int m_midiVolume;
|
||||
int m_lastMidiVolume;
|
||||
Math::Vector m_eye;
|
||||
Math::Vector m_lookat;
|
||||
float m_lastTime;
|
||||
float m_playTime;
|
||||
int m_uniqueStamp;
|
||||
int m_maxSound;
|
||||
char m_CDpath[100];
|
||||
};
|
||||
|
||||
|
||||
// * This file is part of the COLOBOT source code
|
||||
// * Copyright (C) 2001-2008, Daniel ROUX & EPSITEC SA, www.epsitec.ch
|
||||
// * Copyright (C) 2012, Polish Portal of Colobot (PPC)
|
||||
// *
|
||||
// * 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/.
|
||||
|
||||
// sound.h
|
||||
|
||||
#pragma once
|
||||
|
||||
|
||||
#include "math/vector.h"
|
||||
|
||||
|
||||
class CInstanceManager;
|
||||
|
||||
namespace Snd {
|
||||
|
||||
const int MAXFILES = 200;
|
||||
const int MAXSOUND = 32;
|
||||
const int MAXVOLUME = 20;
|
||||
const int MAXOPER = 4;
|
||||
|
||||
|
||||
enum Sound
|
||||
{
|
||||
SOUND_CLICK = 0,
|
||||
SOUND_BOUM = 1,
|
||||
SOUND_EXPLO = 2,
|
||||
SOUND_FLYh = 3, // human
|
||||
SOUND_FLY = 4,
|
||||
SOUND_STEPs = 5, // smooth
|
||||
SOUND_MOTORw = 6, // wheel
|
||||
SOUND_MOTORt = 7, // tank
|
||||
SOUND_MOTORr = 8, // roller
|
||||
SOUND_ERROR = 9,
|
||||
SOUND_CONVERT = 10,
|
||||
SOUND_ENERGY = 11,
|
||||
SOUND_PLOUF = 12,
|
||||
SOUND_BLUP = 13,
|
||||
SOUND_WARNING = 14,
|
||||
SOUND_DERRICK = 15,
|
||||
SOUND_LABO = 16,
|
||||
SOUND_STATION = 17,
|
||||
SOUND_REPAIR = 18,
|
||||
SOUND_RESEARCH = 19,
|
||||
SOUND_INSECTs = 20, // spider
|
||||
SOUND_BURN = 21,
|
||||
SOUND_TZOING = 22,
|
||||
SOUND_GGG = 23,
|
||||
SOUND_MANIP = 24,
|
||||
SOUND_FIRE = 25, // shooting with fireball
|
||||
SOUND_HUMAN1 = 26, // breathing
|
||||
SOUND_STEPw = 27, // water
|
||||
SOUND_SWIM = 28,
|
||||
SOUND_RADAR = 29,
|
||||
SOUND_BUILD = 30,
|
||||
SOUND_ALARM = 31, // energy alarm
|
||||
SOUND_SLIDE = 32,
|
||||
SOUND_EXPLOi = 33, // insect
|
||||
SOUND_INSECTa = 34, // ant
|
||||
SOUND_INSECTb = 35, // bee
|
||||
SOUND_INSECTw = 36, // worm
|
||||
SOUND_INSECTm = 37, // mother
|
||||
SOUND_TREMBLE = 38,
|
||||
SOUND_PSHHH = 39,
|
||||
SOUND_NUCLEAR = 40,
|
||||
SOUND_INFO = 41,
|
||||
SOUND_OPEN = 42,
|
||||
SOUND_CLOSE = 43,
|
||||
SOUND_FACTORY = 44,
|
||||
SOUND_EGG = 45,
|
||||
SOUND_MOTORs = 46, // submarine
|
||||
SOUND_MOTORi = 47, // insect (legs)
|
||||
SOUND_SHIELD = 48,
|
||||
SOUND_FIREi = 49, // shooting with orgaball (insect)
|
||||
SOUND_GUNDEL = 50,
|
||||
SOUND_PSHHH2 = 51, // shield
|
||||
SOUND_MESSAGE = 52,
|
||||
SOUND_BOUMm = 53, // metal
|
||||
SOUND_BOUMv = 54, // plant
|
||||
SOUND_BOUMs = 55, // smooth
|
||||
SOUND_EXPLOl = 56, // little
|
||||
SOUND_EXPLOlp = 57, // little power
|
||||
SOUND_EXPLOp = 58, // power
|
||||
SOUND_STEPh = 59, // hard
|
||||
SOUND_STEPm = 60, // metal
|
||||
SOUND_POWERON = 61,
|
||||
SOUND_POWEROFF = 62,
|
||||
SOUND_AIE = 63,
|
||||
SOUND_WAYPOINT = 64,
|
||||
SOUND_RECOVER = 65,
|
||||
SOUND_DEADi = 66,
|
||||
SOUND_JOSTLE = 67,
|
||||
SOUND_GFLAT = 68,
|
||||
SOUND_DEADg = 69, // shooting death
|
||||
SOUND_DEADw = 70, // drowning
|
||||
SOUND_FLYf = 71, // reactor fail
|
||||
SOUND_ALARMt = 72, // temperature alarm
|
||||
SOUND_FINDING = 73, // finds a cache object
|
||||
SOUND_THUMP = 74,
|
||||
SOUND_TOUCH = 75,
|
||||
SOUND_BLITZ = 76,
|
||||
SOUND_MUSHROOM = 77,
|
||||
SOUND_FIREp = 78, // shooting with phazer
|
||||
SOUND_EXPLOg1 = 79, // impact gun 1
|
||||
SOUND_EXPLOg2 = 80, // impact gun 2
|
||||
SOUND_MOTORd = 81, // engine friction
|
||||
};
|
||||
|
||||
enum SoundNext
|
||||
{
|
||||
SOPER_CONTINUE = 1,
|
||||
SOPER_STOP = 2,
|
||||
SOPER_LOOP = 3,
|
||||
};
|
||||
|
||||
struct SoundOper
|
||||
{
|
||||
char bUsed;
|
||||
float finalAmplitude;
|
||||
float finalFrequency;
|
||||
float totalTime;
|
||||
float currentTime;
|
||||
Snd::SoundNext nextOper;
|
||||
};
|
||||
|
||||
struct SoundChannel
|
||||
{
|
||||
char bUsed; // buffer used?
|
||||
char bMute; // silence?
|
||||
Snd::Sound type; // SOUND_*
|
||||
int priority; // so great -> important
|
||||
Math::Vector pos; // position in space
|
||||
unsigned short uniqueStamp; // unique marker
|
||||
// LPDIRECTSOUNDBUFFER soundBuffer;
|
||||
// LPDIRECTSOUND3DBUFFER soundBuffer3D;
|
||||
float startAmplitude;
|
||||
float startFrequency;
|
||||
float changeFrequency;
|
||||
int initFrequency;
|
||||
float volume; // 2D: volume 1..0 depending on position
|
||||
float pan; // 2D: pan -1..+1 depending on position
|
||||
Snd::SoundOper oper[MAXOPER];
|
||||
};
|
||||
|
||||
|
||||
|
||||
class CSound
|
||||
{
|
||||
// TODO
|
||||
};
|
||||
|
||||
}; // namespace Sound
|
||||
|
|
|
@ -31,7 +31,7 @@
|
|||
#include "common/misc.h"
|
||||
#include "common/iman.h"
|
||||
#include "old/text.h"
|
||||
#include "sound/sound.h"
|
||||
#include "old/sound.h"
|
||||
#include "ui/control.h"
|
||||
|
||||
|
||||
|
|
|
@ -36,7 +36,7 @@
|
|||
#include "ui/window.h"
|
||||
#include "ui/group.h"
|
||||
#include "old/text.h"
|
||||
#include "sound/sound.h"
|
||||
#include "old/sound.h"
|
||||
#include "ui/displaytext.h"
|
||||
|
||||
|
||||
|
|
|
@ -28,7 +28,7 @@
|
|||
#include "common/misc.h"
|
||||
#include "common/iman.h"
|
||||
#include "common/restext.h"
|
||||
#include "sound/sound.h"
|
||||
#include "old/sound.h"
|
||||
#include "old/text.h"
|
||||
#include "ui/key.h"
|
||||
|
||||
|
|
|
@ -52,7 +52,7 @@
|
|||
#include "ui/editvalue.h"
|
||||
#include "old/text.h"
|
||||
#include "old/camera.h"
|
||||
#include "sound/sound.h"
|
||||
#include "old/sound.h"
|
||||
#include "script/cmdtoken.h"
|
||||
#include "object/robotmain.h"
|
||||
#include "ui/maindialog.h"
|
||||
|
|
|
@ -38,7 +38,7 @@
|
|||
#include "object/robotmain.h"
|
||||
#include "object/object.h"
|
||||
#include "old/camera.h"
|
||||
#include "sound/sound.h"
|
||||
#include "old/sound.h"
|
||||
#include "script/script.h"
|
||||
#include "ui/interface.h"
|
||||
#include "ui/button.h"
|
||||
|
|
Loading…
Reference in New Issue