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)
|
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)
|
set(CMAKE_BUILD_TYPE debug)
|
||||||
|
|
||||||
# Currently compiles only with -fpermissive
|
# 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_RELEASE "-fpermissive -O2")
|
||||||
set(CMAKE_CXX_FLAGS_DEBUG "-fpermissive -w -g -O0")
|
set(CMAKE_CXX_FLAGS_DEBUG "-fpermissive -w -g -O0")
|
||||||
|
|
||||||
|
# Subdirectory with sources
|
||||||
add_subdirectory(src bin)
|
add_subdirectory(src bin)
|
||||||
|
|
|
@ -1,7 +1,9 @@
|
||||||
# CBot shared library
|
# CBot shared library is built separately
|
||||||
add_subdirectory(CBot)
|
add_subdirectory(CBot)
|
||||||
|
|
||||||
set(SOURCES
|
|
||||||
|
# Source files for old target (dependent on WinAPI & DirectX)
|
||||||
|
set(OLD_SOURCES
|
||||||
old/d3dapp.cpp
|
old/d3dapp.cpp
|
||||||
old/joystick.cpp
|
old/joystick.cpp
|
||||||
old/blitz.cpp
|
old/blitz.cpp
|
||||||
|
@ -23,29 +25,13 @@ old/d3dutil.cpp
|
||||||
old/d3dmath.cpp
|
old/d3dmath.cpp
|
||||||
old/math3d.cpp
|
old/math3d.cpp
|
||||||
old/modfile.cpp
|
old/modfile.cpp
|
||||||
app/app.cpp
|
old/sound.cpp
|
||||||
common/event.cpp
|
common/event.cpp
|
||||||
common/iman.cpp
|
common/iman.cpp
|
||||||
common/metafile.cpp
|
common/metafile.cpp
|
||||||
common/misc.cpp
|
common/misc.cpp
|
||||||
common/profile.cpp
|
common/profile.cpp
|
||||||
common/restext.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/auto.cpp
|
||||||
object/auto/autobase.cpp
|
object/auto/autobase.cpp
|
||||||
object/auto/autoconvert.cpp
|
object/auto/autoconvert.cpp
|
||||||
|
@ -110,7 +96,6 @@ 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
|
||||||
|
@ -139,25 +124,174 @@ ui/target.cpp
|
||||||
ui/window.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
|
# Change to DirectX SDK directory
|
||||||
set(DXSDK_DIR "c:/dxsdk")
|
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)
|
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
|
-ladvapi32 -lshell32 -lole32 -loleaut32 -luuid -lodbc32
|
||||||
-lodbccp32 -lwinmm
|
-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:
|
add_executable(colobot_old ${OLD_SOURCES})
|
||||||
# include_directories(/usr/include/wine/windows /usr/include/wine/msvcrt)
|
|
||||||
# set(LIBS -lwine)
|
|
||||||
|
|
||||||
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/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 "common/misc.h"
|
||||||
|
#include "graphics/common/device.h"
|
||||||
#include "graphics/common/engine.h"
|
#include "graphics/common/engine.h"
|
||||||
|
|
||||||
|
#include <string>
|
||||||
|
|
||||||
|
|
||||||
class CInstanceManager;
|
class CInstanceManager;
|
||||||
class CEvent;
|
class CEvent;
|
||||||
class CRobotMain;
|
class CRobotMain;
|
||||||
class CSound;
|
class CSound;
|
||||||
|
|
||||||
|
struct ApplicationPrivate;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \class CApplication Main application
|
||||||
|
*
|
||||||
|
* This class is responsible for creating and handling main application window,
|
||||||
|
* receiving events, etc.
|
||||||
|
*
|
||||||
|
* ...
|
||||||
|
*/
|
||||||
class CApplication
|
class CApplication
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
//! Constructor (can only be called once!)
|
||||||
CApplication();
|
CApplication();
|
||||||
|
//! Destructor
|
||||||
~CApplication();
|
~CApplication();
|
||||||
|
|
||||||
|
public:
|
||||||
|
//! Parses commandline arguments
|
||||||
|
Error ParseArguments(int argc, char *argv[]);
|
||||||
|
//! Initializes the application
|
||||||
|
bool Create();
|
||||||
|
//! Main event loop
|
||||||
|
int Run();
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
//LRESULT OnQuerySuspend( DWORD dwFlags );
|
//! Cleans up before exit
|
||||||
//LRESULT OnResumeSuspend( DWORD dwData );
|
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:
|
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);
|
void Pause(bool pause);
|
||||||
//Math::Point ConvPosToInterface(HWND hWnd, LPARAM lParam);
|
void StepSimulation(float rTime);
|
||||||
|
|
||||||
void SetMousePos(Math::Point pos);
|
void SetMousePos(Math::Point pos);
|
||||||
void StepSimul(float rTime);
|
|
||||||
char* RetCDpath();
|
|
||||||
|
|
||||||
void SetShowStat(bool show);
|
void SetShowStat(bool show);
|
||||||
bool RetShowStat();
|
bool RetShowStat();
|
||||||
|
@ -62,30 +81,21 @@ public:
|
||||||
bool RetDebugMode();
|
bool RetDebugMode();
|
||||||
bool RetSetupMode();
|
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 FlushPressKey();
|
||||||
void ResetKey();
|
void ResetKey();
|
||||||
void SetKey(int keyRank, int option, int key);
|
void SetKey(int keyRank, int option, int key);
|
||||||
int RetKey(int keyRank, int option);
|
int RetKey(int keyRank, int option);
|
||||||
|
|
||||||
void SetJoystick(bool bEnable);
|
void SetJoystick(bool enable);
|
||||||
bool RetJoystick();
|
bool RetJoystick();
|
||||||
|
|
||||||
void SetMouseType(Gfx::MouseType type);
|
void SetMouseType(Gfx::MouseType type);
|
||||||
void SetNiceMouse(bool bNice);
|
void SetNiceMouse(bool nice);
|
||||||
bool RetNiceMouse();
|
bool RetNiceMouse();
|
||||||
bool RetNiceMouseCap();
|
bool RetNiceMouseCap();
|
||||||
|
|
||||||
bool WriteScreenShot(char *filename, int width, int height);
|
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:
|
protected:
|
||||||
//HRESULT ConfirmDevice( DDCAPS* pddDriverCaps, D3DDEVICEDESC7* pd3dDeviceDesc );
|
//HRESULT ConfirmDevice( DDCAPS* pddDriverCaps, D3DDEVICEDESC7* pd3dDeviceDesc );
|
||||||
//HRESULT Initialize3DEnvironment();
|
//HRESULT Initialize3DEnvironment();
|
||||||
|
@ -102,55 +112,42 @@ protected:
|
||||||
void OutputText(long x, long y, char* str);
|
void OutputText(long x, long y, char* str);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
//! Private (SDL-dependent data)
|
||||||
|
ApplicationPrivate* m_private;
|
||||||
CInstanceManager* m_iMan;
|
CInstanceManager* m_iMan;
|
||||||
|
Gfx::DeviceConfig m_deviceConfig;
|
||||||
|
Gfx::CEngine* m_engine;
|
||||||
CEvent* m_event;
|
CEvent* m_event;
|
||||||
|
CRobotMain* m_robotMain;
|
||||||
|
CSound* m_sound;
|
||||||
|
|
||||||
//HINSTANCE m_instance;
|
//! Code to return at exit
|
||||||
//HWND m_hWnd;
|
int m_exitCode;
|
||||||
//D3DEnum_DeviceInfo* m_pDeviceInfo;
|
|
||||||
//LPDIRECTDRAW7 m_pDD;
|
|
||||||
//LPDIRECT3D7 m_pD3D;
|
|
||||||
//LPDIRECT3DDEVICE7 m_pD3DDevice;
|
|
||||||
//LPDIRECTDRAWSURFACE7 m_pddsRenderTarget;
|
|
||||||
//DDSURFACEDESC2 m_ddsdRenderTarget;
|
|
||||||
//LPDIRECTDRAWSURFACE7 m_pddsDepthBuffer;
|
|
||||||
|
|
||||||
//HANDLE m_thread;
|
|
||||||
//DWORD m_threadId;
|
|
||||||
|
|
||||||
char m_CDpath[100];
|
|
||||||
|
|
||||||
//CD3DFramework7* m_pFramework;
|
|
||||||
bool m_active;
|
bool m_active;
|
||||||
bool m_activateApp;
|
bool m_activateApp;
|
||||||
bool m_ready;
|
bool m_ready;
|
||||||
bool m_joystick;
|
bool m_joystick;
|
||||||
|
|
||||||
|
std::string m_windowTitle;
|
||||||
long m_vidMemTotal;
|
long m_vidMemTotal;
|
||||||
char* m_strWindowTitle;
|
bool m_appUseZBuffer;
|
||||||
bool m_bAppUseZBuffer;
|
bool m_appUseStereo;
|
||||||
bool m_bAppUseStereo;
|
bool m_showStats;
|
||||||
bool m_bShowStats;
|
bool m_debugMode;
|
||||||
bool m_bDebugMode;
|
bool m_audioState;
|
||||||
bool m_bAudioState;
|
bool m_audioTrack;
|
||||||
bool m_bAudioTrack;
|
bool m_niceMouse;
|
||||||
bool m_bNiceMouse;
|
bool m_setupMode;
|
||||||
bool m_bSetupMode;
|
|
||||||
//HRESULT (*m_fnConfirmDevice)(DDCAPS*, D3DDEVICEDESC7*);
|
|
||||||
|
|
||||||
public:
|
|
||||||
Gfx::CEngine* m_pD3DEngine;
|
|
||||||
CRobotMain* m_pRobotMain;
|
|
||||||
CSound* m_pSound;
|
|
||||||
|
|
||||||
int m_keyState;
|
int m_keyState;
|
||||||
Math::Vector m_axeKey;
|
Math::Vector m_axeKey;
|
||||||
Math::Vector m_axeJoy;
|
Math::Vector m_axeJoy;
|
||||||
bool m_joyButton[32];
|
bool m_joyButton[32];
|
||||||
Math::Point m_mousePos;
|
Math::Point m_mousePos;
|
||||||
long m_mshMouseWheel;
|
long m_mouseWheel;
|
||||||
|
|
||||||
float m_aTime;
|
float m_time;
|
||||||
long m_key[50][2];
|
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
|
// event.cpp
|
||||||
|
|
||||||
|
|
||||||
#include <windows.h>
|
|
||||||
#include <stdio.h>
|
|
||||||
|
|
||||||
#include "common/struct.h"
|
|
||||||
#include "common/iman.h"
|
#include "common/iman.h"
|
||||||
#include "common/event.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.
|
// Object's constructor.
|
||||||
|
|
||||||
|
@ -57,7 +64,7 @@ void CEvent::Flush()
|
||||||
|
|
||||||
void CEvent::MakeEvent(Event &event, EventMsg msg)
|
void CEvent::MakeEvent(Event &event, EventMsg msg)
|
||||||
{
|
{
|
||||||
ZeroMemory(&event, sizeof(Event));
|
memset(&event, 0, sizeof(Event));
|
||||||
event.event = msg;
|
event.event = msg;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -538,6 +538,8 @@ struct Event
|
||||||
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_ *)
|
||||||
float rTime; // relative time
|
float rTime; // relative time
|
||||||
|
|
||||||
|
Event();
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
@ -619,8 +621,6 @@ public:
|
||||||
bool AddEvent(const Event &event);
|
bool AddEvent(const Event &event);
|
||||||
bool GetEvent(Event &event);
|
bool GetEvent(Event &event);
|
||||||
|
|
||||||
protected:
|
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
CInstanceManager* m_iMan;
|
CInstanceManager* m_iMan;
|
||||||
|
|
||||||
|
|
|
@ -17,7 +17,6 @@
|
||||||
// iman.cpp
|
// iman.cpp
|
||||||
|
|
||||||
|
|
||||||
#include <windows.h>
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
|
||||||
#include "common/struct.h"
|
#include "common/struct.h"
|
||||||
|
|
|
@ -19,12 +19,12 @@
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#include "old/d3dengine.h"
|
|
||||||
#include "common/event.h"
|
#include "common/event.h"
|
||||||
|
|
||||||
|
|
||||||
|
class CD3DEngine;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// Possible types of the text resources.
|
// Possible types of the text resources.
|
||||||
|
|
|
@ -19,8 +19,6 @@
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
|
|
||||||
#include <d3d.h>
|
|
||||||
|
|
||||||
#include <math/vector.h>
|
#include <math/vector.h>
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -20,7 +20,6 @@
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include "engine.h"
|
#include "engine.h"
|
||||||
#include "common/struct.h"
|
|
||||||
#include "common/event.h"
|
#include "common/event.h"
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -19,10 +19,10 @@
|
||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include "common/struct.h"
|
|
||||||
#include "common/event.h"
|
#include "common/event.h"
|
||||||
#include "graphics/common/color.h"
|
#include "graphics/common/color.h"
|
||||||
#include "math/point.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 {
|
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
|
class CDevice
|
||||||
{
|
{
|
||||||
// TODO
|
// TODO
|
||||||
|
|
|
@ -19,5 +19,55 @@
|
||||||
|
|
||||||
#include "graphics/common/engine.h"
|
#include "graphics/common/engine.h"
|
||||||
|
|
||||||
|
#include <GL/gl.h>
|
||||||
|
#include <GL/glu.h>
|
||||||
|
|
||||||
|
|
||||||
// TODO implementation
|
// 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
|
#pragma once
|
||||||
|
|
||||||
#include "common/misc.h"
|
#include "common/misc.h"
|
||||||
#include "common/struct.h"
|
#include "math/vector.h"
|
||||||
#include "object/object.h"
|
|
||||||
|
|
||||||
|
|
||||||
class CInstanceManager;
|
class CInstanceManager;
|
||||||
|
class CObject;
|
||||||
class CSound;
|
class CSound;
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -20,7 +20,6 @@
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include "engine.h"
|
#include "engine.h"
|
||||||
#include "common/struct.h"
|
|
||||||
#include "common/event.h"
|
#include "common/event.h"
|
||||||
#include "modfile.h"
|
#include "modfile.h"
|
||||||
#include "vertex.h"
|
#include "vertex.h"
|
||||||
|
|
|
@ -305,7 +305,7 @@ protected:
|
||||||
void DrawParticuleWheel(int i);
|
void DrawParticuleWheel(int i);
|
||||||
CObject* SearchObjectGun(Math::Vector old, Math::Vector pos, ParticuleType type, CObject *father);
|
CObject* SearchObjectGun(Math::Vector old, Math::Vector pos, ParticuleType type, CObject *father);
|
||||||
CObject* SearchObjectRay(Math::Vector pos, Math::Vector goal, 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);
|
bool TrackMove(int i, Math::Vector pos, float progress);
|
||||||
void TrackDraw(int i, ParticuleType type);
|
void TrackDraw(int i, ParticuleType type);
|
||||||
|
|
||||||
|
|
|
@ -19,7 +19,6 @@
|
||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include "common/struct.h"
|
|
||||||
#include "common/event.h"
|
#include "common/event.h"
|
||||||
#include "math/point.h"
|
#include "math/point.h"
|
||||||
|
|
||||||
|
|
|
@ -19,9 +19,11 @@
|
||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include "graphics/common/engine.h"
|
|
||||||
#include "object/object.h"
|
|
||||||
#include "common/misc.h"
|
#include "common/misc.h"
|
||||||
|
#include "graphics/common/engine.h"
|
||||||
|
//#include "object/object.h"
|
||||||
|
// TEMPORARILY!
|
||||||
|
enum ObjectType {};
|
||||||
|
|
||||||
|
|
||||||
class CInstanceManager;
|
class CInstanceManager;
|
||||||
|
@ -93,7 +95,7 @@ public:
|
||||||
CPyro(CInstanceManager* iMan);
|
CPyro(CInstanceManager* iMan);
|
||||||
~CPyro();
|
~CPyro();
|
||||||
|
|
||||||
void DeleteObject(bool bAll=FALSE);
|
void DeleteObject(bool bAll=false);
|
||||||
bool Create(PyroType type, CObject* pObj, float force=1.0f);
|
bool Create(PyroType type, CObject* pObj, float force=1.0f);
|
||||||
bool EventProcess(const Event &event);
|
bool EventProcess(const Event &event);
|
||||||
Error IsEnded();
|
Error IsEnded();
|
||||||
|
|
|
@ -62,7 +62,7 @@
|
||||||
#include "ui/window.h"
|
#include "ui/window.h"
|
||||||
#include "ui/displaytext.h"
|
#include "ui/displaytext.h"
|
||||||
#include "old/text.h"
|
#include "old/text.h"
|
||||||
#include "sound/sound.h"
|
#include "old/sound.h"
|
||||||
#include "old/particule.h"
|
#include "old/particule.h"
|
||||||
#include "script/cmdtoken.h"
|
#include "script/cmdtoken.h"
|
||||||
|
|
||||||
|
|
|
@ -85,7 +85,7 @@
|
||||||
#include "ui/displaytext.h"
|
#include "ui/displaytext.h"
|
||||||
#include "script/cmdtoken.h"
|
#include "script/cmdtoken.h"
|
||||||
#include "script/cbottoken.h"
|
#include "script/cbottoken.h"
|
||||||
#include "sound/sound.h"
|
#include "old/sound.h"
|
||||||
#include "object/object.h"
|
#include "object/object.h"
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -21,7 +21,7 @@
|
||||||
|
|
||||||
#include "old/d3dengine.h"
|
#include "old/d3dengine.h"
|
||||||
#include "old/camera.h"
|
#include "old/camera.h"
|
||||||
#include "sound/sound.h"
|
#include "old/sound.h"
|
||||||
|
|
||||||
|
|
||||||
class CInstanceManager;
|
class CInstanceManager;
|
||||||
|
|
|
@ -69,7 +69,7 @@
|
||||||
#include "ui/edit.h"
|
#include "ui/edit.h"
|
||||||
#include "ui/displaytext.h"
|
#include "ui/displaytext.h"
|
||||||
#include "old/text.h"
|
#include "old/text.h"
|
||||||
#include "sound/sound.h"
|
#include "old/sound.h"
|
||||||
#include "script/cbottoken.h"
|
#include "script/cbottoken.h"
|
||||||
#include "script/cmdtoken.h"
|
#include "script/cmdtoken.h"
|
||||||
#include "object/mainmovie.h"
|
#include "object/mainmovie.h"
|
||||||
|
|
|
@ -35,7 +35,7 @@
|
||||||
#include "old/camera.h"
|
#include "old/camera.h"
|
||||||
#include "object/auto/auto.h"
|
#include "object/auto/auto.h"
|
||||||
#include "object/auto/autopara.h"
|
#include "object/auto/autopara.h"
|
||||||
#include "sound/sound.h"
|
#include "old/sound.h"
|
||||||
#include "old/blitz.h"
|
#include "old/blitz.h"
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -35,7 +35,7 @@
|
||||||
#include "old/math3d.h"
|
#include "old/math3d.h"
|
||||||
#include "old/joystick.h"
|
#include "old/joystick.h"
|
||||||
#include "object/robotmain.h"
|
#include "object/robotmain.h"
|
||||||
#include "sound/sound.h"
|
#include "old/sound.h"
|
||||||
#include "old/d3dapp.h"
|
#include "old/d3dapp.h"
|
||||||
|
|
||||||
// fix for "MSH_MOUSEWHEEL undefined" error
|
// fix for "MSH_MOUSEWHEEL undefined" error
|
||||||
|
|
|
@ -44,7 +44,7 @@
|
||||||
#include "old/cloud.h"
|
#include "old/cloud.h"
|
||||||
#include "old/blitz.h"
|
#include "old/blitz.h"
|
||||||
#include "old/planet.h"
|
#include "old/planet.h"
|
||||||
#include "sound/sound.h"
|
#include "old/sound.h"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -38,7 +38,7 @@
|
||||||
#include "object/auto/auto.h"
|
#include "object/auto/auto.h"
|
||||||
#include "object/robotmain.h"
|
#include "object/robotmain.h"
|
||||||
#include "old/terrain.h"
|
#include "old/terrain.h"
|
||||||
#include "sound/sound.h"
|
#include "old/sound.h"
|
||||||
#include "old/water.h"
|
#include "old/water.h"
|
||||||
#include "old/particule.h"
|
#include "old/particule.h"
|
||||||
|
|
||||||
|
|
|
@ -21,7 +21,7 @@
|
||||||
|
|
||||||
#include "math/point.h"
|
#include "math/point.h"
|
||||||
#include "old/d3dengine.h"
|
#include "old/d3dengine.h"
|
||||||
#include "sound/sound.h"
|
#include "old/sound.h"
|
||||||
|
|
||||||
|
|
||||||
class CInstanceManager;
|
class CInstanceManager;
|
||||||
|
|
|
@ -39,7 +39,7 @@
|
||||||
#include "object/motion/motion.h"
|
#include "object/motion/motion.h"
|
||||||
#include "object/motion/motionhuman.h"
|
#include "object/motion/motionhuman.h"
|
||||||
#include "ui/displaytext.h"
|
#include "ui/displaytext.h"
|
||||||
#include "sound/sound.h"
|
#include "old/sound.h"
|
||||||
#include "old/pyro.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/particule.h"
|
||||||
#include "old/terrain.h"
|
#include "old/terrain.h"
|
||||||
#include "object/object.h"
|
#include "object/object.h"
|
||||||
#include "sound/sound.h"
|
#include "old/sound.h"
|
||||||
#include "old/water.h"
|
#include "old/water.h"
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -42,7 +42,7 @@
|
||||||
#include "object/brain.h"
|
#include "object/brain.h"
|
||||||
#include "object/motion/motion.h"
|
#include "object/motion/motion.h"
|
||||||
#include "object/motion/motionhuman.h"
|
#include "object/motion/motionhuman.h"
|
||||||
#include "sound/sound.h"
|
#include "old/sound.h"
|
||||||
#include "object/task/task.h"
|
#include "object/task/task.h"
|
||||||
#include "script/cmdtoken.h"
|
#include "script/cmdtoken.h"
|
||||||
#include "physics/physics.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,5 +1,6 @@
|
||||||
// * This file is part of the COLOBOT source code
|
// * This file is part of the COLOBOT source code
|
||||||
// * Copyright (C) 2001-2008, Daniel ROUX & EPSITEC SA, www.epsitec.ch
|
// * 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
|
// * 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
|
// * it under the terms of the GNU General Public License as published by
|
||||||
|
@ -19,16 +20,18 @@
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
|
|
||||||
#include <dsound.h>
|
#include "math/vector.h"
|
||||||
|
|
||||||
|
|
||||||
|
class CInstanceManager;
|
||||||
|
|
||||||
|
namespace Snd {
|
||||||
|
|
||||||
const int MAXFILES = 200;
|
const int MAXFILES = 200;
|
||||||
const int MAXSOUND = 32;
|
const int MAXSOUND = 32;
|
||||||
const int MAXVOLUME = 20;
|
const int MAXVOLUME = 20;
|
||||||
const int MAXOPER = 4;
|
const int MAXOPER = 4;
|
||||||
|
|
||||||
class CInstanceManager;
|
|
||||||
|
|
||||||
|
|
||||||
enum Sound
|
enum Sound
|
||||||
{
|
{
|
||||||
|
@ -130,113 +133,33 @@ struct SoundOper
|
||||||
float finalFrequency;
|
float finalFrequency;
|
||||||
float totalTime;
|
float totalTime;
|
||||||
float currentTime;
|
float currentTime;
|
||||||
SoundNext nextOper;
|
Snd::SoundNext nextOper;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct SoundChannel
|
struct SoundChannel
|
||||||
{
|
{
|
||||||
char bUsed; // buffer used?
|
char bUsed; // buffer used?
|
||||||
char bMute; // silence?
|
char bMute; // silence?
|
||||||
Sound type; // SOUND_*
|
Snd::Sound type; // SOUND_*
|
||||||
int priority; // so great -> important
|
int priority; // so great -> important
|
||||||
Math::Vector pos; // position in space
|
Math::Vector pos; // position in space
|
||||||
unsigned short uniqueStamp; // unique marker
|
unsigned short uniqueStamp; // unique marker
|
||||||
LPDIRECTSOUNDBUFFER soundBuffer;
|
// LPDIRECTSOUNDBUFFER soundBuffer;
|
||||||
LPDIRECTSOUND3DBUFFER soundBuffer3D;
|
// LPDIRECTSOUND3DBUFFER soundBuffer3D;
|
||||||
float startAmplitude;
|
float startAmplitude;
|
||||||
float startFrequency;
|
float startFrequency;
|
||||||
float changeFrequency;
|
float changeFrequency;
|
||||||
int initFrequency;
|
int initFrequency;
|
||||||
float volume; // 2D: volume 1..0 depending on position
|
float volume; // 2D: volume 1..0 depending on position
|
||||||
float pan; // 2D: pan -1..+1 depending on position
|
float pan; // 2D: pan -1..+1 depending on position
|
||||||
SoundOper oper[MAXOPER];
|
Snd::SoundOper oper[MAXOPER];
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class CSound
|
class CSound
|
||||||
{
|
{
|
||||||
public:
|
// TODO
|
||||||
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];
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
}; // namespace Sound
|
||||||
|
|
|
@ -31,7 +31,7 @@
|
||||||
#include "common/misc.h"
|
#include "common/misc.h"
|
||||||
#include "common/iman.h"
|
#include "common/iman.h"
|
||||||
#include "old/text.h"
|
#include "old/text.h"
|
||||||
#include "sound/sound.h"
|
#include "old/sound.h"
|
||||||
#include "ui/control.h"
|
#include "ui/control.h"
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -36,7 +36,7 @@
|
||||||
#include "ui/window.h"
|
#include "ui/window.h"
|
||||||
#include "ui/group.h"
|
#include "ui/group.h"
|
||||||
#include "old/text.h"
|
#include "old/text.h"
|
||||||
#include "sound/sound.h"
|
#include "old/sound.h"
|
||||||
#include "ui/displaytext.h"
|
#include "ui/displaytext.h"
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -28,7 +28,7 @@
|
||||||
#include "common/misc.h"
|
#include "common/misc.h"
|
||||||
#include "common/iman.h"
|
#include "common/iman.h"
|
||||||
#include "common/restext.h"
|
#include "common/restext.h"
|
||||||
#include "sound/sound.h"
|
#include "old/sound.h"
|
||||||
#include "old/text.h"
|
#include "old/text.h"
|
||||||
#include "ui/key.h"
|
#include "ui/key.h"
|
||||||
|
|
||||||
|
|
|
@ -52,7 +52,7 @@
|
||||||
#include "ui/editvalue.h"
|
#include "ui/editvalue.h"
|
||||||
#include "old/text.h"
|
#include "old/text.h"
|
||||||
#include "old/camera.h"
|
#include "old/camera.h"
|
||||||
#include "sound/sound.h"
|
#include "old/sound.h"
|
||||||
#include "script/cmdtoken.h"
|
#include "script/cmdtoken.h"
|
||||||
#include "object/robotmain.h"
|
#include "object/robotmain.h"
|
||||||
#include "ui/maindialog.h"
|
#include "ui/maindialog.h"
|
||||||
|
|
|
@ -38,7 +38,7 @@
|
||||||
#include "object/robotmain.h"
|
#include "object/robotmain.h"
|
||||||
#include "object/object.h"
|
#include "object/object.h"
|
||||||
#include "old/camera.h"
|
#include "old/camera.h"
|
||||||
#include "sound/sound.h"
|
#include "old/sound.h"
|
||||||
#include "script/script.h"
|
#include "script/script.h"
|
||||||
#include "ui/interface.h"
|
#include "ui/interface.h"
|
||||||
#include "ui/button.h"
|
#include "ui/button.h"
|
||||||
|
|
Loading…
Reference in New Issue