commit
d9fee8b2ad
|
@ -24,3 +24,6 @@ Makefile
|
|||
# Ignore KDevelop files
|
||||
.kdev4
|
||||
*.kdev4
|
||||
|
||||
# Ignore gedit temp files
|
||||
*~
|
||||
|
|
|
@ -13,7 +13,7 @@ project(colobot C CXX)
|
|||
set(COLOBOT_VERSION_CODENAME "Gold")
|
||||
set(COLOBOT_VERSION_MAJOR 0)
|
||||
set(COLOBOT_VERSION_MINOR 1)
|
||||
set(COLOBOT_VERSION_REVISION 2)
|
||||
set(COLOBOT_VERSION_REVISION 3)
|
||||
|
||||
# Used on official releases
|
||||
set(COLOBOT_VERSION_RELEASE_CODENAME "-alpha")
|
||||
|
@ -21,15 +21,24 @@ set(COLOBOT_VERSION_RELEASE_CODENAME "-alpha")
|
|||
#set(COLOBOT_VERSION_UNRELEASED "+alpha")
|
||||
|
||||
# Append git characteristics to version
|
||||
if(DEFINED COLOBOT_VERSION_UNRELEASED AND EXISTS "${CMAKE_SOURCE_DIR}/.git")
|
||||
find_package(Git)
|
||||
execute_process(COMMAND ${GIT_EXECUTABLE} rev-parse --abbrev-ref HEAD
|
||||
OUTPUT_VARIABLE GIT_BRANCH
|
||||
OUTPUT_STRIP_TRAILING_WHITESPACE)
|
||||
execute_process(COMMAND ${GIT_EXECUTABLE} rev-parse --short HEAD
|
||||
OUTPUT_VARIABLE GIT_REVISION
|
||||
OUTPUT_STRIP_TRAILING_WHITESPACE)
|
||||
set(COLOBOT_VERSION_UNRELEASED "${COLOBOT_VERSION_UNRELEASED}-git-${GIT_BRANCH}~r${GIT_REVISION}")
|
||||
if(DEFINED COLOBOT_VERSION_UNRELEASED)
|
||||
if(EXISTS "${CMAKE_SOURCE_DIR}/.git")
|
||||
find_package(Git)
|
||||
execute_process(COMMAND ${GIT_EXECUTABLE} rev-parse --abbrev-ref HEAD
|
||||
WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}"
|
||||
OUTPUT_VARIABLE GIT_BRANCH
|
||||
OUTPUT_STRIP_TRAILING_WHITESPACE)
|
||||
execute_process(COMMAND ${GIT_EXECUTABLE} rev-parse --short HEAD
|
||||
WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}"
|
||||
OUTPUT_VARIABLE GIT_REVISION
|
||||
OUTPUT_STRIP_TRAILING_WHITESPACE)
|
||||
set(COLOBOT_VERSION_UNRELEASED "${COLOBOT_VERSION_UNRELEASED}-git-${GIT_BRANCH}~r${GIT_REVISION}")
|
||||
set(COLOBOT_VERSION_DISPLAY "git-${GIT_BRANCH}~r${GIT_REVISION}")
|
||||
else()
|
||||
set(COLOBOT_VERSION_DISPLAY "${COLOBOT_VERSION_CODENAME}-${COLOBOT_VERSION_UNRELEASED}")
|
||||
endif()
|
||||
else()
|
||||
set(COLOBOT_VERSION_DISPLAY "${COLOBOT_VERSION_MAJOR}.${COLOBOT_VERSION_MINOR}.${COLOBOT_VERSION_REVISION}${COLOBOT_VERSION_RELEASE_CODENAME}")
|
||||
endif()
|
||||
|
||||
set(COLOBOT_VERSION_FULL "${COLOBOT_VERSION_MAJOR}.${COLOBOT_VERSION_MINOR}.${COLOBOT_VERSION_REVISION}${COLOBOT_VERSION_UNRELEASED}${COLOBOT_VERSION_RELEASE_CODENAME}")
|
||||
|
@ -42,6 +51,7 @@ message(STATUS "Building Colobot \"${COLOBOT_VERSION_CODENAME}\" (${COLOBOT_VERS
|
|||
if("${CMAKE_SYSTEM_NAME}" MATCHES "Windows")
|
||||
message(STATUS "Build for Windows system")
|
||||
set(PLATFORM_WINDOWS 1)
|
||||
set(PLATFORM_GNU 0)
|
||||
set(PLATFORM_LINUX 0)
|
||||
set(PLATFORM_MACOSX 0)
|
||||
set(PLATFORM_OTHER 0)
|
||||
|
@ -52,15 +62,27 @@ elseif("${CMAKE_SYSTEM_NAME}" MATCHES "Linux")
|
|||
message(STATUS "Build for Linux system")
|
||||
set(PLATFORM_WINDOWS 0)
|
||||
set(PLATFORM_LINUX 1)
|
||||
set(PLATFORM_GNU 1)
|
||||
set(PLATFORM_MACOSX 0)
|
||||
set(PLATFORM_OTHER 0)
|
||||
|
||||
# Platform-dependent implementation of system.h
|
||||
set(SYSTEM_CPP_MODULE "system_linux.cpp")
|
||||
elseif("${CMAKE_SYSTEM_NAME}" MATCHES "kFreeBSD" OR "${CMAKE_SYSTEM_NAME}" STREQUAL "GNU")
|
||||
message(STATUS "Build for kFreeBSD system")
|
||||
set(PLATFORM_WINDOWS 0)
|
||||
set(PLATFORM_LINUX 0)
|
||||
set(PLATFORM_GNU 1)
|
||||
set(PLATFORM_MACOSX 0)
|
||||
set(PLATFORM_OTHER 0)
|
||||
|
||||
# Platform-dependent implementation of system.h
|
||||
set(SYSTEM_CPP_MODULE "system_other.cpp")
|
||||
elseif("${CMAKE_SYSTEM_NAME}" MATCHES "Darwin")
|
||||
message(STATUS "Build for Mac OSX system")
|
||||
set(PLATFORM_WINDOWS 0)
|
||||
set(PLATFORM_LINUX 0)
|
||||
set(PLATFORM_GNU 0)
|
||||
set(PLATFORM_MACOSX 1)
|
||||
set(PLATFORM_OTHER 0)
|
||||
|
||||
|
@ -72,6 +94,7 @@ else()
|
|||
message(STATUS "Build for other system")
|
||||
set(PLATFORM_WINDOWS 0)
|
||||
set(PLATFORM_LINUX 0)
|
||||
set(PLATFORM_GNU 0)
|
||||
set(PLATFORM_MACOSX 0)
|
||||
set(PLATFORM_OTHER 1)
|
||||
|
||||
|
@ -123,6 +146,9 @@ set(COLOBOT_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wold-style-cast ${CXX11_FLAGS}
|
|||
set(COLOBOT_CXX_FLAGS_RELEASE "-O2")
|
||||
set(COLOBOT_CXX_FLAGS_DEBUG "-g -O0")
|
||||
|
||||
# Flags for gtest
|
||||
set(COLOBOT_GTEST_CXX_FLAGS "-pthread")
|
||||
|
||||
|
||||
# Asserts can be enabled/disabled regardless of build type
|
||||
option(ASSERTS "Enable assert()s" ON)
|
||||
|
@ -226,7 +252,7 @@ include("${colobot_SOURCE_DIR}/cmake/msys.cmake")
|
|||
##
|
||||
# Clipboard support needs X11 libraries
|
||||
##
|
||||
if(PLATFORM_LINUX OR PLATFORM_MACOSX)
|
||||
if(PLATFORM_GNU OR PLATFORM_MACOSX)
|
||||
find_package(X11 REQUIRED)
|
||||
if(PLATFORM_MACOSX)
|
||||
# Add the includes for X11
|
||||
|
|
13
INSTALL.md
13
INSTALL.md
|
@ -117,12 +117,23 @@ You will need:
|
|||
* OpenAL (OpenAL-Soft) >= 1.13
|
||||
* po4a >= 0.45 (to generate translated data files)
|
||||
|
||||
On Ubuntu (and probably any other Debian-based system), you can use the following command to install all required packages:
|
||||
```
|
||||
$ apt-get install build-essential cmake libsdl1.2debian libsdl1.2-dev libsdl-image1.2 libsdl-image1.2-dev libsdl-ttf2.0-0 libsdl-ttf2.0-dev libsdl-mixer1.2 libsdl-mixer1.2-dev libsndfile1-dev libvorbis-dev libogg-dev libpng12-dev libglew-dev libopenal-dev libboost-dev libboost-system-dev libboost-filesystem-dev libboost-regex-dev git
|
||||
```
|
||||
|
||||
Make sure you install the packages along with header files (often distributed in separate *-dev packages). If you miss any requirements,
|
||||
CMake should warn you.
|
||||
|
||||
To compile colobot, run your favorite shell and change the directory to where you downloaded colobot source files:
|
||||
To compile colobot, run your favorite shell and download colobot source files:
|
||||
```
|
||||
$ git clone https://github.com/colobot/colobot.git /path/to/colobot/sources
|
||||
$ cd /path/to/colobot/sources
|
||||
$ git submodule update --init
|
||||
```
|
||||
If you want to compile development branch, change the first command to:
|
||||
```
|
||||
$ git clone -b dev https://github.com/colobot/colobot.git /path/to/colobot/sources
|
||||
```
|
||||
It is recommended that you create a build directory:
|
||||
```
|
||||
|
|
|
@ -6,7 +6,7 @@ This is official repository for the open-source Colobot project developed by Pol
|
|||
|
||||
The source code contained here was released by Epsitec -- the original creator of the game -- on open source (GPLv3) license. The code was given and the rights granted specifically to PPC community in March 2012. Since then, we have been developing the game further.
|
||||
|
||||
More information for developers (in English) can be found on the [developer wiki](http://colobot.info/w/Dev:Main_Page) or (in Polish) [our forum](http://colobot.info/forum/). However, the freshest source of information is our IRC channels (see below).
|
||||
More information for developers (in English) can be found on the [developer wiki](http://colobot.info/wiki/Dev:Main_Page) or (in Polish) [our forum](http://colobot.info/forum/). However, the freshest source of information is our IRC channels (see below).
|
||||
|
||||
This repository contains only the source code of the project. The game requires also data files which are now provided as git submodule and are hosted in [separate repository](https://github.com/colobot/colobot-data).
|
||||
|
||||
|
@ -54,7 +54,7 @@ To jest oficjalne repozytorium z kodem projektu open-source Colobot rozwijanego
|
|||
|
||||
Kod źródłowy zawarty tutaj został wydany przez Epsitec -- oryginalnego twórcę gry -- na otwartej licencji (GPLv3). Kod został wydany i prawa nadane specjalnie dla społeczności PPC w marcu 2012. Od tamtej pory, zajmowaliśmy się dalszym rozwojem gry.
|
||||
|
||||
Więcej informacji dla developerów projektu (po angielsku) można znaleźć na [wiki dla developerów](htt://colobot.info/w/Dev:Main_Page) lub (po polsku) na [naszym forum](http://colobot.info/forum/). Jednak źródłem najświeższych informacji są nasze kanały IRC (patrz niżej).
|
||||
Więcej informacji dla developerów projektu (po angielsku) można znaleźć na [wiki dla developerów](htt://colobot.info/wiki/Dev:Main_Page) lub (po polsku) na [naszym forum](http://colobot.info/forum/). Jednak źródłem najświeższych informacji są nasze kanały IRC (patrz niżej).
|
||||
|
||||
To repozytorium zawiera jedynie kod źródłowy projektu. Gra wymaga jeszcze plików danych, które są teraz udostępniane jako submoduł gita i hostowane w [osobnym repozytorium]((https://github.com/colobot/colobot-data).
|
||||
|
||||
|
|
2
data
2
data
|
@ -1 +1 @@
|
|||
Subproject commit 456ab4d4806ffe9aad93b7046f1b8074501f28f5
|
||||
Subproject commit beff41878d617640c21035c66ea9ddb2e82e6587
|
|
@ -4,7 +4,7 @@ set(COLOBOT_ICON_FILE colobot.svg)
|
|||
|
||||
# Render SVG icon in various sizes
|
||||
find_program(RSVG_CONVERT rsvg-convert)
|
||||
if(RSVG_CONVERT AND (PLATFORM_LINUX OR PLATFORM_MACOSX))
|
||||
if(RSVG_CONVERT AND (PLATFORM_GNU OR PLATFORM_MACOSX))
|
||||
add_custom_target(png-icons ALL)
|
||||
foreach(PNGSIZE 512 256 128 48 32 16)
|
||||
add_custom_command(
|
||||
|
@ -15,7 +15,7 @@ if(RSVG_CONVERT AND (PLATFORM_LINUX OR PLATFORM_MACOSX))
|
|||
add_custom_target(png-icon-${PNGSIZE} ALL DEPENDS ${PNGSIZE}/colobot.png)
|
||||
add_dependencies(png-icons png-icon-${PNGSIZE})
|
||||
|
||||
if(PLATFORM_LINUX)
|
||||
if(PLATFORM_GNU)
|
||||
install(
|
||||
FILES ${CMAKE_CURRENT_BINARY_DIR}/${PNGSIZE}/colobot.png
|
||||
DESTINATION ${CMAKE_INSTALL_PREFIX}/share/icons/hicolor/${PNGSIZE}x${PNGSIZE}/apps/
|
||||
|
@ -37,7 +37,7 @@ if(RSVG_CONVERT AND (PLATFORM_LINUX OR PLATFORM_MACOSX))
|
|||
|
||||
endif()
|
||||
|
||||
if(PLATFORM_LINUX)
|
||||
if(PLATFORM_GNU)
|
||||
# Install Desktop Entry file
|
||||
set(COLOBOT_DESKTOP_FILE colobot.desktop)
|
||||
add_custom_command(
|
||||
|
@ -112,7 +112,7 @@ if(PLATFORM_LINUX)
|
|||
endforeach()
|
||||
endif()
|
||||
endif()
|
||||
endif(PLATFORM_LINUX)
|
||||
endif(PLATFORM_GNU)
|
||||
|
||||
if(PLATFORM_MACOSX)
|
||||
configure_file(Info.plist.cmake ${CMAKE_CURRENT_BINARY_DIR}/Info.plist)
|
||||
|
|
Binary file not shown.
Before Width: | Height: | Size: 345 KiB After Width: | Height: | Size: 361 KiB |
|
@ -8,232 +8,394 @@
|
|||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:xlink="http://www.w3.org/1999/xlink"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
width="32"
|
||||
height="32"
|
||||
id="svg2"
|
||||
version="1.1"
|
||||
width="48"
|
||||
height="48"
|
||||
id="colobot-logo"
|
||||
style="enable-background:new">
|
||||
<title
|
||||
id="title3020">Colobot icon</title>
|
||||
inkscape:version="0.48.4 r9939"
|
||||
sodipodi:docname="colobot_gold_icon.svg">
|
||||
<defs
|
||||
id="defs4">
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
id="linearGradient3992">
|
||||
<stop
|
||||
style="stop-color:#f5c700;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop3994" />
|
||||
<stop
|
||||
style="stop-color:#000000;stop-opacity:1"
|
||||
offset="1"
|
||||
id="stop3996" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
id="linearGradient3984">
|
||||
<stop
|
||||
style="stop-color:#f5c700;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop3986" />
|
||||
<stop
|
||||
style="stop-color:#000000;stop-opacity:1"
|
||||
offset="1"
|
||||
id="stop3988" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
id="linearGradient3971">
|
||||
<stop
|
||||
style="stop-color:#f5c700;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop3973" />
|
||||
<stop
|
||||
style="stop-color:#000000;stop-opacity:1"
|
||||
offset="1"
|
||||
id="stop3975" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
id="linearGradient3963">
|
||||
<stop
|
||||
style="stop-color:#000000;stop-opacity:1"
|
||||
offset="0"
|
||||
id="stop3965" />
|
||||
<stop
|
||||
style="stop-color:#7f6400;stop-opacity:0;"
|
||||
offset="1"
|
||||
id="stop3967" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
id="linearGradient3945">
|
||||
<stop
|
||||
style="stop-color:#f5c700;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop3947" />
|
||||
<stop
|
||||
style="stop-color:#000000;stop-opacity:1"
|
||||
offset="1"
|
||||
id="stop3949" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
id="linearGradient3929">
|
||||
<stop
|
||||
style="stop-color:#1a1500;stop-opacity:1"
|
||||
offset="0"
|
||||
id="stop3931" />
|
||||
<stop
|
||||
style="stop-color:#d7ae00;stop-opacity:1"
|
||||
offset="1"
|
||||
id="stop3933" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient3900"
|
||||
inkscape:collect="always">
|
||||
<stop
|
||||
id="stop3902"
|
||||
offset="0"
|
||||
style="stop-color:#ffd332;stop-opacity:1" />
|
||||
<stop
|
||||
id="stop3904"
|
||||
offset="1"
|
||||
style="stop-color:#000000;stop-opacity:1" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
id="linearGradient3875">
|
||||
<stop
|
||||
style="stop-color:#ffd438;stop-opacity:1"
|
||||
offset="0"
|
||||
id="stop3877" />
|
||||
<stop
|
||||
style="stop-color:#000000;stop-opacity:1"
|
||||
offset="1"
|
||||
id="stop3879" />
|
||||
</linearGradient>
|
||||
<radialGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient3900"
|
||||
id="radialGradient3881"
|
||||
cx="17.855946"
|
||||
cy="25.094042"
|
||||
fx="17.855946"
|
||||
fy="25.094042"
|
||||
r="0.99545348"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(2.3589521,0,0,2.3589521,-24.265377,-34.101604)" />
|
||||
<radialGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient3875"
|
||||
id="radialGradient3891"
|
||||
cx="17.855946"
|
||||
cy="25.094042"
|
||||
fx="17.855946"
|
||||
fy="25.094042"
|
||||
r="0.99545348"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(2.4704161,0,0,2.4704161,-26.255671,-36.898686)" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient3929"
|
||||
id="linearGradient3939"
|
||||
x1="3.3806913"
|
||||
y1="1040.2177"
|
||||
x2="24.976213"
|
||||
y2="1037.3557"
|
||||
gradientUnits="userSpaceOnUse" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient3929"
|
||||
id="linearGradient3943"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
x1="3.3806913"
|
||||
y1="1040.2177"
|
||||
x2="24.976213"
|
||||
y2="1037.3557"
|
||||
gradientTransform="matrix(1,0,0,-1,3.746111e-8,2073.851)" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient3945"
|
||||
id="linearGradient3951"
|
||||
x1="21.963614"
|
||||
y1="1036.9344"
|
||||
x2="27.312754"
|
||||
y2="1039.2969"
|
||||
gradientUnits="userSpaceOnUse" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient3963"
|
||||
id="linearGradient3969"
|
||||
x1="6.533155"
|
||||
y1="11.615763"
|
||||
x2="6.4043641"
|
||||
y2="17.009403"
|
||||
gradientUnits="userSpaceOnUse" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient3971"
|
||||
id="linearGradient3977"
|
||||
x1="-616.87164"
|
||||
y1="820.93103"
|
||||
x2="-625.89124"
|
||||
y2="820.48627"
|
||||
gradientUnits="userSpaceOnUse" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient3984"
|
||||
id="linearGradient3990"
|
||||
x1="5.9375"
|
||||
y1="13.84375"
|
||||
x2="6.0625"
|
||||
y2="19.5625"
|
||||
gradientUnits="userSpaceOnUse" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient3992"
|
||||
id="linearGradient3998"
|
||||
x1="10.5"
|
||||
y1="22.125"
|
||||
x2="7.1875"
|
||||
y2="29.4375"
|
||||
gradientUnits="userSpaceOnUse" />
|
||||
<filter
|
||||
inkscape:collect="always"
|
||||
id="filter4138"
|
||||
x="-0.1131677"
|
||||
width="1.2263354"
|
||||
y="-0.096803329"
|
||||
height="1.1936067">
|
||||
<feGaussianBlur
|
||||
inkscape:collect="always"
|
||||
stdDeviation="1.1726717"
|
||||
id="feGaussianBlur4140" />
|
||||
</filter>
|
||||
</defs>
|
||||
<sodipodi:namedview
|
||||
id="base"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="1"
|
||||
inkscape:cx="12"
|
||||
inkscape:cy="17.760377"
|
||||
inkscape:document-units="px"
|
||||
inkscape:current-layer="layer1"
|
||||
showgrid="false"
|
||||
inkscape:window-width="1280"
|
||||
inkscape:window-height="977"
|
||||
inkscape:window-x="-4"
|
||||
inkscape:window-y="-4"
|
||||
inkscape:window-maximized="1" />
|
||||
<metadata
|
||||
id="metadata3061">
|
||||
id="metadata7">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title>Colobot icon</dc:title>
|
||||
<dc:date>2012-12-27</dc:date>
|
||||
<dc:rights>
|
||||
<cc:Agent>
|
||||
<dc:title></dc:title>
|
||||
</cc:Agent>
|
||||
</dc:rights>
|
||||
<dc:creator>
|
||||
<cc:Agent>
|
||||
<dc:title>Polish Portal of Colobot</dc:title>
|
||||
</cc:Agent>
|
||||
</dc:creator>
|
||||
<cc:license
|
||||
rdf:resource="http://www.gnu.org/licenses/gpl-3.0-standalone.html" />
|
||||
<dc:description>Three spheres symbolizing planets.</dc:description>
|
||||
<dc:contributor>
|
||||
<cc:Agent>
|
||||
<dc:title>Didier Raboud <odyx@debian.org></dc:title>
|
||||
</cc:Agent>
|
||||
</dc:contributor>
|
||||
<dc:title></dc:title>
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<defs
|
||||
id="defs3059">
|
||||
<linearGradient
|
||||
id="linearGradient4108">
|
||||
<stop
|
||||
id="stop4110"
|
||||
style="stop-color:#008000;stop-opacity:1"
|
||||
offset="0" />
|
||||
<stop
|
||||
id="stop4112"
|
||||
style="stop-color:#000000;stop-opacity:1"
|
||||
offset="1" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient4096">
|
||||
<stop
|
||||
id="stop4098"
|
||||
style="stop-color:#00ff00;stop-opacity:1"
|
||||
offset="0" />
|
||||
<stop
|
||||
id="stop4100"
|
||||
style="stop-color:#00ff00;stop-opacity:0"
|
||||
offset="1" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient4108-5">
|
||||
<stop
|
||||
id="stop4110-2"
|
||||
style="stop-color:#000080;stop-opacity:1"
|
||||
offset="0" />
|
||||
<stop
|
||||
id="stop4112-8"
|
||||
style="stop-color:#000000;stop-opacity:1"
|
||||
offset="1" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient4096-0">
|
||||
<stop
|
||||
id="stop4098-3"
|
||||
style="stop-color:#0000ff;stop-opacity:1"
|
||||
offset="0" />
|
||||
<stop
|
||||
id="stop4100-0"
|
||||
style="stop-color:#0000ff;stop-opacity:0"
|
||||
offset="1" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient4108-5-2">
|
||||
<stop
|
||||
id="stop4110-2-3"
|
||||
style="stop-color:#500000;stop-opacity:1"
|
||||
offset="0" />
|
||||
<stop
|
||||
id="stop4112-8-6"
|
||||
style="stop-color:#000000;stop-opacity:1"
|
||||
offset="1" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient4096-0-3">
|
||||
<stop
|
||||
id="stop4098-3-7"
|
||||
style="stop-color:#ff0000;stop-opacity:1"
|
||||
offset="0" />
|
||||
<stop
|
||||
id="stop4100-0-3"
|
||||
style="stop-color:#ff0000;stop-opacity:0"
|
||||
offset="1" />
|
||||
</linearGradient>
|
||||
<radialGradient
|
||||
cx="54.8265"
|
||||
cy="57.607162"
|
||||
r="56.05489"
|
||||
fx="54.8265"
|
||||
fy="57.607162"
|
||||
id="radialGradient4416"
|
||||
xlink:href="#linearGradient4108-5-2"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(0.02726606,1.3911392,-1.8797791,0.03684323,176.62558,-41.562143)" />
|
||||
<radialGradient
|
||||
cx="63.5"
|
||||
cy="37.5"
|
||||
r="32"
|
||||
fx="63.5"
|
||||
fy="37.5"
|
||||
id="radialGradient4418"
|
||||
xlink:href="#linearGradient4096-0-3"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(1,0,0,0.796875,6.7936132,3.6927801)" />
|
||||
<radialGradient
|
||||
cx="54.8265"
|
||||
cy="57.607162"
|
||||
r="56.05489"
|
||||
fx="54.8265"
|
||||
fy="57.607162"
|
||||
id="radialGradient4420"
|
||||
xlink:href="#linearGradient4108"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(0.02726606,1.3911392,-1.8797791,0.03684323,176.62558,-41.562143)" />
|
||||
<radialGradient
|
||||
cx="63.5"
|
||||
cy="37.5"
|
||||
r="32"
|
||||
fx="63.5"
|
||||
fy="37.5"
|
||||
id="radialGradient4422"
|
||||
xlink:href="#linearGradient4096"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(1,0,0,0.796875,6.7936132,3.6927801)" />
|
||||
<radialGradient
|
||||
cx="54.8265"
|
||||
cy="57.607162"
|
||||
r="56.05489"
|
||||
fx="54.8265"
|
||||
fy="57.607162"
|
||||
id="radialGradient4424"
|
||||
xlink:href="#linearGradient4108-5"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(0.02726606,1.3911392,-1.8797791,0.03684323,176.62558,-41.562143)" />
|
||||
<radialGradient
|
||||
cx="63.5"
|
||||
cy="37.5"
|
||||
r="32"
|
||||
fx="63.5"
|
||||
fy="37.5"
|
||||
id="radialGradient4426"
|
||||
xlink:href="#linearGradient4096-0"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(1,0,0,0.796875,6.7936132,3.6927801)" />
|
||||
</defs>
|
||||
<path
|
||||
d="m 35.001373,17.978157 a 17.137194,11.839104 0 1 1 -34.27438587,0 17.137194,11.839104 0 1 1 34.27438587,0 z"
|
||||
id="path3068"
|
||||
style="opacity:0;color:#000000;fill:#800000;fill-opacity:1;fill-rule:nonzero;stroke:#ff0000;stroke-width:1.45397186;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:11.63177575, 11.63177575;stroke-dashoffset:11.63177575;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
|
||||
<g
|
||||
transform="matrix(1.4527314,0,0,1.4552231,61.790796,7.2674667)"
|
||||
inkscape:label="Layer 1"
|
||||
inkscape:groupmode="layer"
|
||||
id="layer1"
|
||||
style="display:inline">
|
||||
transform="translate(0,-1020.3622)">
|
||||
<g
|
||||
transform="translate(-64.376292,0)"
|
||||
id="g4403">
|
||||
<g
|
||||
transform="matrix(0.1151419,-0.11259991,0.11259991,0.1151419,78.136911,8.9624182)"
|
||||
id="g4122-3-7"
|
||||
style="stroke-width:6.52155399;stroke-miterlimit:4;stroke-dasharray:none;display:inline">
|
||||
<g
|
||||
transform="translate(-232.5787,-246.03551)"
|
||||
id="g4259-8">
|
||||
<path
|
||||
d="m 128.20539,62.567638 c 0,29.922729 -24.25716,54.179892 -54.179886,54.179892 -29.922729,0 -54.179893,-24.257163 -54.179893,-54.179892 0,-29.922729 24.257164,-54.1798929 54.179893,-54.1798929 29.922726,0 54.179886,24.2571639 54.179886,54.1798929 z"
|
||||
id="path1873-0-2"
|
||||
style="fill:url(#radialGradient4416);fill-opacity:1;fill-rule:nonzero;stroke:#808000;stroke-width:4.65700197;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" />
|
||||
<path
|
||||
d="m 102.29361,33.575593 c 0,14.083261 -14.326885,25.5 -31.999997,25.5 -17.673112,0 -32,-11.416739 -32,-25.5 0,-14.083261 14.326888,-25.4999999 32,-25.4999999 17.673112,0 31.999997,11.4167389 31.999997,25.4999999 z"
|
||||
id="path2814-0-8"
|
||||
style="fill:url(#radialGradient4418);fill-opacity:1;fill-rule:nonzero;stroke:none" />
|
||||
</g>
|
||||
</g>
|
||||
<g
|
||||
transform="matrix(0.1151419,-0.11259991,0.11259991,0.1151419,15.374404,17.677401)"
|
||||
id="g4122"
|
||||
style="stroke-width:6.52155399;stroke-miterlimit:4;stroke-dasharray:none">
|
||||
<path
|
||||
d="m 128.20539,62.567638 c 0,29.922729 -24.25716,54.179892 -54.179886,54.179892 -29.922729,0 -54.179893,-24.257163 -54.179893,-54.179892 0,-29.922729 24.257164,-54.1798929 54.179893,-54.1798929 29.922726,0 54.179886,24.2571639 54.179886,54.1798929 z"
|
||||
id="path1873"
|
||||
style="fill:url(#radialGradient4420);fill-opacity:1;fill-rule:nonzero;stroke:#808000;stroke-width:4.65700197;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" />
|
||||
<path
|
||||
d="m 102.29361,33.575593 c 0,14.083261 -14.326885,25.5 -31.999997,25.5 -17.673112,0 -32,-11.416739 -32,-25.5 0,-14.083261 14.326888,-25.4999999 32,-25.4999999 17.673112,0 31.999997,11.4167389 31.999997,25.4999999 z"
|
||||
id="path2814"
|
||||
style="fill:url(#radialGradient4422);fill-opacity:1;fill-rule:nonzero;stroke:none" />
|
||||
</g>
|
||||
<g
|
||||
transform="matrix(0.1151419,-0.11259991,0.11259991,0.1151419,57.006572,14.417637)"
|
||||
id="g4122-3"
|
||||
style="stroke-width:6.52155399;stroke-miterlimit:4;stroke-dasharray:none;display:inline">
|
||||
<g
|
||||
transform="translate(-136.63091,-98.230764)"
|
||||
id="g4259">
|
||||
<path
|
||||
d="m 128.20539,62.567638 c 0,29.922729 -24.25716,54.179892 -54.179886,54.179892 -29.922729,0 -54.179893,-24.257163 -54.179893,-54.179892 0,-29.922729 24.257164,-54.1798929 54.179893,-54.1798929 29.922726,0 54.179886,24.2571639 54.179886,54.1798929 z"
|
||||
id="path1873-0"
|
||||
style="fill:url(#radialGradient4424);fill-opacity:1;fill-rule:nonzero;stroke:#808000;stroke-width:4.65700197;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" />
|
||||
<path
|
||||
d="m 102.29361,33.575593 c 0,14.083261 -14.326885,25.5 -31.999997,25.5 -17.673112,0 -32,-11.416739 -32,-25.5 0,-14.083261 14.326888,-25.4999999 32,-25.4999999 17.673112,0 31.999997,11.4167389 31.999997,25.4999999 z"
|
||||
id="path2814-0"
|
||||
style="fill:url(#radialGradient4426);fill-opacity:1;fill-rule:nonzero;stroke:none" />
|
||||
</g>
|
||||
</g>
|
||||
id="g4088"
|
||||
style="fill:#000000;fill-opacity:1;stroke:none;filter:url(#filter4138)">
|
||||
<path
|
||||
style="fill:#000000;fill-opacity:1;stroke:none"
|
||||
d="M 8.3125 15.125 L 4.3125 15.125 L 4.3125 20.125 L 11.71875 24.03125 L 10.75 19.1875 L 8.3125 17.9375 L 8.3125 15.125 z "
|
||||
id="path4090"
|
||||
transform="translate(0,1020.3622)" />
|
||||
<path
|
||||
style="fill:#000000;fill-opacity:1;stroke:none"
|
||||
d="M 3.9375 15.125 L 4.0625 15.125 L 4.3125 15.125 L 8.3125 15.125 L 10.0625 15.125 L 11.5 11.9375 L 4.0625 11.9375 L 3.9375 11.9375 C 3.1182867 12.0035 2.46875 12.69505 2.46875 13.53125 C 2.46875 14.36735 3.1182867 15.0592 3.9375 15.125 z M 4.25 12.46875 C 4.8128073 12.46875 5.28125 12.9372 5.28125 13.5 C 5.28125 14.0628 4.8128073 14.5 4.25 14.5 C 3.6871927 14.5 3.25 14.0628 3.25 13.5 C 3.25 12.9372 3.6871927 12.46875 4.25 12.46875 z "
|
||||
id="path4092"
|
||||
transform="translate(0,1020.3622)" />
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
style="fill:#000000;fill-opacity:1;stroke:none"
|
||||
d="m 21.222081,1029.5776 0,3.0313 0,0.2187 c 0.05354,0.5299 0.305986,1.0093 0.6875,1.3438 l -1.34375,3.4062 c 0,0 -0.678869,0.2275 -0.8125,0.5313 -0.133631,0.304 -2.5625,5.6875 -2.5625,5.6875 l 3,1.3125 c 0,0 2.236477,-5.6023 2.34375,-6.0313 0.107269,-0.4291 -0.21875,-0.9687 -0.21875,-0.9687 l 1.34375,-3.4688 c 0.855075,-0.1805 1.502987,-0.9233 1.59375,-1.8125 0.007,-0.069 0.03125,-0.148 0.03125,-0.2187 0,-0.1408 -0.0041,-0.2736 -0.03125,-0.4063 l 0,-2.625 -4.03125,0 z m 2.0625,1.7188 c 0.704607,0 1.25,0.5766 1.25,1.2812 0,0.7046 -0.545393,1.25 -1.25,1.25 -0.704607,0 -1.28125,-0.5454 -1.28125,-1.25 0,-0.7046 0.576643,-1.2812 1.28125,-1.2812 z"
|
||||
id="path4094" />
|
||||
<path
|
||||
style="fill:#000000;fill-opacity:1;stroke:none;stroke-opacity:1"
|
||||
d="m 16.099107,1038.143 -6.7434222,0 c 0.5910647,7.0352 6.2969722,12.6107 13.4868442,12.6107 1.164025,0 2.196222,-0.3756 3.276465,-0.6478 l 1.219149,-7.8483 c -1.221328,1.0535 -2.756012,1.7525 -4.495614,1.7525 -3.456847,0 -6.192613,-2.5667 -6.743422,-5.8671 z"
|
||||
id="path4096"
|
||||
inkscape:connector-curvature="0" />
|
||||
<rect
|
||||
style="fill:#000000;fill-opacity:1;stroke:none"
|
||||
id="rect4098"
|
||||
width="7.6608934"
|
||||
height="3.4132693"
|
||||
x="-618.29755"
|
||||
y="819.28662"
|
||||
transform="matrix(0.79194971,-0.61058633,0.61058633,0.79194971,0,0)" />
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
id="path4100"
|
||||
d="m 16.099107,1035.708 -6.7434222,0 c 0.5910652,-7.0352 6.2969722,-12.6107 13.4868442,-12.6107 1.164025,0 2.196222,0.3756 3.276465,0.6478 l 1.219149,7.8483 c -1.221328,-1.0535 -2.756012,-1.7525 -4.495614,-1.7525 -3.456847,0 -6.192613,2.5667 -6.743422,5.8671 z"
|
||||
style="fill:#000000;fill-opacity:1;stroke:none;stroke-opacity:1" />
|
||||
<path
|
||||
sodipodi:type="arc"
|
||||
style="fill:#000000;fill-opacity:1;stroke:none"
|
||||
id="path4102"
|
||||
sodipodi:cx="17.855946"
|
||||
sodipodi:cy="25.094042"
|
||||
sodipodi:rx="0.99545348"
|
||||
sodipodi:ry="0.99545348"
|
||||
d="m 18.851399,25.094042 c 0,0.549774 -0.44568,0.995453 -0.995453,0.995453 -0.549774,0 -0.995454,-0.445679 -0.995454,-0.995453 0,-0.549774 0.44568,-0.995454 0.995454,-0.995454 0.549773,0 0.995453,0.44568 0.995453,0.995454 z"
|
||||
transform="matrix(1.5745242,0,0,1.5745242,-9.9475945,1006.505)" />
|
||||
<path
|
||||
transform="matrix(2.375,0,0,2.375,-28.844818,972.79257)"
|
||||
d="m 18.851399,25.094042 c 0,0.549774 -0.44568,0.995453 -0.995453,0.995453 -0.549774,0 -0.995454,-0.445679 -0.995454,-0.995453 0,-0.549774 0.44568,-0.995454 0.995454,-0.995454 0.549773,0 0.995453,0.44568 0.995453,0.995454 z"
|
||||
sodipodi:ry="0.99545348"
|
||||
sodipodi:rx="0.99545348"
|
||||
sodipodi:cy="25.094042"
|
||||
sodipodi:cx="17.855946"
|
||||
id="path4104"
|
||||
style="fill:#000000;fill-opacity:1;stroke:none"
|
||||
sodipodi:type="arc" />
|
||||
<path
|
||||
sodipodi:type="arc"
|
||||
style="fill:#000000;fill-opacity:1;stroke:none"
|
||||
id="path4106"
|
||||
sodipodi:cx="17.855946"
|
||||
sodipodi:cy="25.094042"
|
||||
sodipodi:rx="0.99545348"
|
||||
sodipodi:ry="0.99545348"
|
||||
d="m 18.851399,25.094042 c 0,0.549774 -0.44568,0.995453 -0.995453,0.995453 -0.549774,0 -0.995454,-0.445679 -0.995454,-0.995453 0,-0.549774 0.44568,-0.995454 0.995454,-0.995454 0.549773,0 0.995453,0.44568 0.995453,0.995454 z"
|
||||
transform="matrix(1.7120874,0,0,1.7120874,-17.007887,989.42773)" />
|
||||
<rect
|
||||
style="fill:#000000;fill-opacity:1;stroke:none"
|
||||
id="rect4108"
|
||||
width="3.9995728"
|
||||
height="4.5299025"
|
||||
x="4.3089318"
|
||||
y="15.095729"
|
||||
transform="translate(0,1020.3622)" />
|
||||
</g>
|
||||
<g
|
||||
id="g4000">
|
||||
<path
|
||||
transform="translate(0,1020.3622)"
|
||||
id="path3982"
|
||||
d="M 8.3125 15.125 L 4.3125 15.125 L 4.3125 20.125 L 11.71875 24.03125 L 10.75 19.1875 L 8.3125 17.9375 L 8.3125 15.125 z "
|
||||
style="fill:url(#linearGradient3998);fill-opacity:1;stroke:none" />
|
||||
<path
|
||||
transform="translate(0,1020.3622)"
|
||||
id="path3838"
|
||||
d="M 3.9375 15.125 L 4.0625 15.125 L 4.3125 15.125 L 8.3125 15.125 L 10.0625 15.125 L 11.5 11.9375 L 4.0625 11.9375 L 3.9375 11.9375 C 3.1182867 12.0035 2.46875 12.69505 2.46875 13.53125 C 2.46875 14.36735 3.1182867 15.0592 3.9375 15.125 z M 4.25 12.46875 C 4.8128073 12.46875 5.28125 12.9372 5.28125 13.5 C 5.28125 14.0628 4.8128073 14.5 4.25 14.5 C 3.6871927 14.5 3.25 14.0628 3.25 13.5 C 3.25 12.9372 3.6871927 12.46875 4.25 12.46875 z "
|
||||
style="fill:url(#linearGradient3990);fill-opacity:1;stroke:none" />
|
||||
<path
|
||||
id="path3846"
|
||||
d="m 21.222081,1029.5776 0,3.0313 0,0.2187 c 0.05354,0.5299 0.305986,1.0093 0.6875,1.3438 l -1.34375,3.4062 c 0,0 -0.678869,0.2275 -0.8125,0.5313 -0.133631,0.304 -2.5625,5.6875 -2.5625,5.6875 l 3,1.3125 c 0,0 2.236477,-5.6023 2.34375,-6.0313 0.107269,-0.4291 -0.21875,-0.9687 -0.21875,-0.9687 l 1.34375,-3.4688 c 0.855075,-0.1805 1.502987,-0.9233 1.59375,-1.8125 0.007,-0.069 0.03125,-0.148 0.03125,-0.2187 0,-0.1408 -0.0041,-0.2736 -0.03125,-0.4063 l 0,-2.625 -4.03125,0 z m 2.0625,1.7188 c 0.704607,0 1.25,0.5766 1.25,1.2812 0,0.7046 -0.545393,1.25 -1.25,1.25 -0.704607,0 -1.28125,-0.5454 -1.28125,-1.25 0,-0.7046 0.576643,-1.2812 1.28125,-1.2812 z"
|
||||
style="fill:url(#linearGradient3951);fill-opacity:1;stroke:none"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
id="path3836"
|
||||
d="m 16.099107,1038.143 -6.7434222,0 c 0.5910647,7.0352 6.2969722,12.6107 13.4868442,12.6107 1.164025,0 2.196222,-0.3756 3.276465,-0.6478 l 1.219149,-7.8483 c -1.221328,1.0535 -2.756012,1.7525 -4.495614,1.7525 -3.456847,0 -6.192613,-2.5667 -6.743422,-5.8671 z"
|
||||
style="fill:#f5c700;fill-opacity:1;stroke:url(#linearGradient3939);stroke-opacity:1" />
|
||||
<rect
|
||||
transform="matrix(0.79194971,-0.61058633,0.61058633,0.79194971,0,0)"
|
||||
y="819.28662"
|
||||
x="-618.29755"
|
||||
height="3.4132693"
|
||||
width="7.6608934"
|
||||
id="rect3852"
|
||||
style="fill:url(#linearGradient3977);fill-opacity:1;stroke:none" />
|
||||
<path
|
||||
style="fill:#f5c700;fill-opacity:1;stroke:url(#linearGradient3943);stroke-opacity:1"
|
||||
d="m 16.099107,1035.708 -6.7434222,0 c 0.5910652,-7.0352 6.2969722,-12.6107 13.4868442,-12.6107 1.164025,0 2.196222,0.3756 3.276465,0.6478 l 1.219149,7.8483 c -1.221328,-1.0535 -2.756012,-1.7525 -4.495614,-1.7525 -3.456847,0 -6.192613,2.5667 -6.743422,5.8671 z"
|
||||
id="path3941"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
transform="matrix(1.5745242,0,0,1.5745242,-9.9475945,1006.505)"
|
||||
d="m 18.851399,25.094042 c 0,0.549774 -0.44568,0.995453 -0.995453,0.995453 -0.549774,0 -0.995454,-0.445679 -0.995454,-0.995453 0,-0.549774 0.44568,-0.995454 0.995454,-0.995454 0.549773,0 0.995453,0.44568 0.995453,0.995454 z"
|
||||
sodipodi:ry="0.99545348"
|
||||
sodipodi:rx="0.99545348"
|
||||
sodipodi:cy="25.094042"
|
||||
sodipodi:cx="17.855946"
|
||||
id="path3860"
|
||||
style="fill:url(#radialGradient3881);fill-opacity:1;stroke:none"
|
||||
sodipodi:type="arc" />
|
||||
<path
|
||||
sodipodi:type="arc"
|
||||
style="fill:url(#radialGradient3891);fill-opacity:1;stroke:none"
|
||||
id="path3862"
|
||||
sodipodi:cx="17.855946"
|
||||
sodipodi:cy="25.094042"
|
||||
sodipodi:rx="0.99545348"
|
||||
sodipodi:ry="0.99545348"
|
||||
d="m 18.851399,25.094042 c 0,0.549774 -0.44568,0.995453 -0.995453,0.995453 -0.549774,0 -0.995454,-0.445679 -0.995454,-0.995453 0,-0.549774 0.44568,-0.995454 0.995454,-0.995454 0.549773,0 0.995453,0.44568 0.995453,0.995454 z"
|
||||
transform="matrix(2.375,0,0,2.375,-28.844818,972.79257)" />
|
||||
<path
|
||||
transform="matrix(1.7120874,0,0,1.7120874,-17.007887,989.42773)"
|
||||
d="m 18.851399,25.094042 c 0,0.549774 -0.44568,0.995453 -0.995453,0.995453 -0.549774,0 -0.995454,-0.445679 -0.995454,-0.995453 0,-0.549774 0.44568,-0.995454 0.995454,-0.995454 0.549773,0 0.995453,0.44568 0.995453,0.995454 z"
|
||||
sodipodi:ry="0.99545348"
|
||||
sodipodi:rx="0.99545348"
|
||||
sodipodi:cy="25.094042"
|
||||
sodipodi:cx="17.855946"
|
||||
id="path3883"
|
||||
style="fill:#f5c700;fill-opacity:1;stroke:none"
|
||||
sodipodi:type="arc" />
|
||||
<rect
|
||||
transform="translate(0,1020.3622)"
|
||||
y="15.095729"
|
||||
x="4.3089318"
|
||||
height="4.5299025"
|
||||
width="3.9995728"
|
||||
id="rect3961"
|
||||
style="fill:url(#linearGradient3969);fill-opacity:1;stroke:none" />
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
||||
|
|
Before Width: | Height: | Size: 9.4 KiB After Width: | Height: | Size: 16 KiB |
|
@ -7,8 +7,6 @@ add_definitions(-DLIB_COMPILE=1)
|
|||
|
||||
if(PLATFORM_WINDOWS)
|
||||
set(CLIPBOARD_SRC src/clipboardWin32.c)
|
||||
elseif(PLATFORM_LINUX)
|
||||
set(CLIPBOARD_SRC src/clipboardX11.c)
|
||||
else()
|
||||
set(CLIPBOARD_SRC src/clipboardX11.c)
|
||||
endif()
|
||||
|
|
|
@ -53,6 +53,9 @@ msgstr ""
|
|||
msgid "COLOBOT"
|
||||
msgstr ""
|
||||
|
||||
msgid "COLOBOT: Gold Edition"
|
||||
msgstr ""
|
||||
|
||||
msgid "Programming exercises"
|
||||
msgstr ""
|
||||
|
||||
|
@ -68,9 +71,6 @@ msgstr ""
|
|||
msgid "User levels"
|
||||
msgstr ""
|
||||
|
||||
msgid "Prototypes"
|
||||
msgstr ""
|
||||
|
||||
msgid "Options"
|
||||
msgstr ""
|
||||
|
||||
|
@ -110,9 +110,6 @@ msgstr ""
|
|||
msgid " Missions on this level:"
|
||||
msgstr ""
|
||||
|
||||
msgid " Prototypes on this planet:"
|
||||
msgstr ""
|
||||
|
||||
msgid " Free game on this chapter:"
|
||||
msgstr ""
|
||||
|
||||
|
@ -276,10 +273,7 @@ msgstr ""
|
|||
msgid "User\\User levels"
|
||||
msgstr ""
|
||||
|
||||
msgid "Proto\\Prototypes under development"
|
||||
msgstr ""
|
||||
|
||||
msgid "New player\\Choose player's name"
|
||||
msgid "Change player\\Change player"
|
||||
msgstr ""
|
||||
|
||||
msgid "Options\\Preferences"
|
||||
|
|
24
po/de.po
24
po/de.po
|
@ -39,9 +39,6 @@ msgstr " Liste der Missionen des Planeten:"
|
|||
msgid " Planets:"
|
||||
msgstr " Liste der Planeten:"
|
||||
|
||||
msgid " Prototypes on this planet:"
|
||||
msgstr " Liste der Prototypen des Planeten:"
|
||||
|
||||
msgid " Resolution:"
|
||||
msgstr " Auflösung:"
|
||||
|
||||
|
@ -88,15 +85,12 @@ msgstr "3D-Geräusche\\Orten der Geräusche im Raum"
|
|||
msgid "<< Back \\Back to the previous screen"
|
||||
msgstr "<< Zurück \\Zurück zum Hauptmenü"
|
||||
|
||||
#, fuzzy
|
||||
msgid "<<< Sorry; mission failed >>>"
|
||||
msgstr "<<< Mission gescheitert >>>"
|
||||
|
||||
#, fuzzy
|
||||
msgid "<<< Well done; mission accomplished >>>"
|
||||
msgstr "<<< Bravo, Mission vollendet >>>"
|
||||
|
||||
#, fuzzy
|
||||
msgid "A label must be followed by \"for\"; \"while\"; \"do\" or \"switch\""
|
||||
msgstr ""
|
||||
"Ein Label kann nur vor den Anweisungen \"for\", \"while\", \"do\" oder "
|
||||
|
@ -314,6 +308,9 @@ msgstr "Knopf %1"
|
|||
msgid "COLOBOT"
|
||||
msgstr "COLOBOT"
|
||||
|
||||
msgid "COLOBOT: Gold Edition"
|
||||
msgstr "COLOBOT: Gold Edition"
|
||||
|
||||
msgid "Calling an unknown function"
|
||||
msgstr "Die aufgerufene Funktion existiert nicht"
|
||||
|
||||
|
@ -338,7 +335,6 @@ msgstr "Kamera links"
|
|||
msgid "Camera to right"
|
||||
msgstr "Kamera rechts"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Can not create this; there are too many objects"
|
||||
msgstr "Kein neues Objekt kann erstellt werden (zu viele vorhanden)"
|
||||
|
||||
|
@ -363,6 +359,9 @@ msgstr "Challenges\\Herausforderungen"
|
|||
msgid "Change camera\\Switches between onboard camera and following camera"
|
||||
msgstr "Andere Kamera\\Sichtpunkt einstellen"
|
||||
|
||||
msgid "Change player\\Change player"
|
||||
msgstr "Anderer Spieler\\Spielername ändern"
|
||||
|
||||
msgid "Checkpoint"
|
||||
msgstr "Checkpoint"
|
||||
|
||||
|
@ -699,7 +698,6 @@ msgstr "Falscher Batterietyp"
|
|||
msgid "Incorrect index type"
|
||||
msgstr "Falscher Typ für einen Index"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Infected by a virus; temporarily out of order"
|
||||
msgstr "Von Virus infiziert, zeitweise außer Betrieb"
|
||||
|
||||
|
@ -847,9 +845,6 @@ msgstr "Neu ..."
|
|||
msgid "New bot available"
|
||||
msgstr "Neuer Roboter verfügbar"
|
||||
|
||||
msgid "New player\\Choose player's name"
|
||||
msgstr "Anderer Spieler\\Spielername ändern"
|
||||
|
||||
msgid "Next"
|
||||
msgstr "Nächster"
|
||||
|
||||
|
@ -1114,12 +1109,6 @@ msgstr "Hilfe CBOT-Sprache\\Hilfe über die Programmiersprache CBOT"
|
|||
msgid "Programs dispatched by Houston"
|
||||
msgstr "Von Houston übermittelte Programme"
|
||||
|
||||
msgid "Proto\\Prototypes under development"
|
||||
msgstr "Proto\\In Entwicklung befindliche Prototypen"
|
||||
|
||||
msgid "Prototypes"
|
||||
msgstr "Prototypen"
|
||||
|
||||
msgid "Public required"
|
||||
msgstr "Hier muss das Wort \"public\" stehen"
|
||||
|
||||
|
@ -2053,4 +2042,3 @@ msgstr "www.epsitec.com"
|
|||
|
||||
#~ msgid "Zoom"
|
||||
#~ msgstr "Zoom"
|
||||
|
||||
|
|
19
po/fr.po
19
po/fr.po
|
@ -44,9 +44,6 @@ msgstr " Liste des missions du chapitre :"
|
|||
msgid " Planets:"
|
||||
msgstr " Liste des planètes :"
|
||||
|
||||
msgid " Prototypes on this planet:"
|
||||
msgstr " Liste des prototypes du chapitre :"
|
||||
|
||||
msgid " Resolution:"
|
||||
msgstr " Résolutions :"
|
||||
|
||||
|
@ -315,6 +312,9 @@ msgstr "Bouton %1"
|
|||
msgid "COLOBOT"
|
||||
msgstr "COLOBOT"
|
||||
|
||||
msgid "COLOBOT: Gold Edition"
|
||||
msgstr "COLOBOT: Gold Edition"
|
||||
|
||||
msgid "Calling an unknown function"
|
||||
msgstr "Appel d'une fonction inexistante"
|
||||
|
||||
|
@ -363,6 +363,9 @@ msgstr "Défis\\Défis de programmation"
|
|||
msgid "Change camera\\Switches between onboard camera and following camera"
|
||||
msgstr "Changement de caméra\\Autre de point de vue"
|
||||
|
||||
msgid "Change player\\Change player"
|
||||
msgstr "Autre joueur\\Choix du nom du joueur"
|
||||
|
||||
msgid "Checkpoint"
|
||||
msgstr "Indicateur"
|
||||
|
||||
|
@ -848,9 +851,6 @@ msgstr "Nouveau ..."
|
|||
msgid "New bot available"
|
||||
msgstr "Nouveau robot disponible"
|
||||
|
||||
msgid "New player\\Choose player's name"
|
||||
msgstr "Autre joueur\\Choix du nom du joueur"
|
||||
|
||||
msgid "Next"
|
||||
msgstr "Suivant"
|
||||
|
||||
|
@ -1115,12 +1115,6 @@ msgstr "Instructions programmation\\Explication sur la programmation"
|
|||
msgid "Programs dispatched by Houston"
|
||||
msgstr "Programmes envoyés par Houston"
|
||||
|
||||
msgid "Proto\\Prototypes under development"
|
||||
msgstr "Proto\\Prototypes en cours d'élaboration"
|
||||
|
||||
msgid "Prototypes"
|
||||
msgstr "Prototypes"
|
||||
|
||||
msgid "Public required"
|
||||
msgstr "Public requis"
|
||||
|
||||
|
@ -2055,4 +2049,3 @@ msgstr "www.epsitec.com"
|
|||
|
||||
#~ msgid "Zoom"
|
||||
#~ msgstr "Zoom"
|
||||
|
||||
|
|
26
po/pl.po
26
po/pl.po
|
@ -26,7 +26,7 @@ msgid " Exercises in the chapter:"
|
|||
msgstr " Ćwiczenia w tym rozdziale:"
|
||||
|
||||
msgid " Free game on this chapter:"
|
||||
msgstr " Prototypy na tej planecie:"
|
||||
msgstr " Swobodna gra na tej planecie:"
|
||||
|
||||
msgid " Free game on this planet:"
|
||||
msgstr " Swobodna gra na tej planecie:"
|
||||
|
@ -40,9 +40,6 @@ msgstr " Misje na tej planecie:"
|
|||
msgid " Planets:"
|
||||
msgstr " Planety:"
|
||||
|
||||
msgid " Prototypes on this planet:"
|
||||
msgstr " Prototypy na tej planecie:"
|
||||
|
||||
msgid " Resolution:"
|
||||
msgstr " Rozdzielczość:"
|
||||
|
||||
|
@ -89,15 +86,12 @@ msgstr "Dźwięk 3D\\Przestrzenne pozycjonowanie dźwięków"
|
|||
msgid "<< Back \\Back to the previous screen"
|
||||
msgstr "<< Wstecz \\Wraca do poprzedniego ekranu"
|
||||
|
||||
#, fuzzy
|
||||
msgid "<<< Sorry; mission failed >>>"
|
||||
msgstr "<<< Niestety, misja nie powiodła się >>>"
|
||||
|
||||
#, fuzzy
|
||||
msgid "<<< Well done; mission accomplished >>>"
|
||||
msgstr "<<< Dobra robota, misja wypełniona >>>"
|
||||
|
||||
#, fuzzy
|
||||
msgid "A label must be followed by \"for\"; \"while\"; \"do\" or \"switch\""
|
||||
msgstr "Po etykiecie musi wystąpić \"for\", \"while\", \"do\" lub \"switch\""
|
||||
|
||||
|
@ -316,6 +310,9 @@ msgstr "Przycisk %1"
|
|||
msgid "COLOBOT"
|
||||
msgstr "COLOBOT"
|
||||
|
||||
msgid "COLOBOT: Gold Edition"
|
||||
msgstr "COLOBOT: Gold Edition"
|
||||
|
||||
msgid "Calling an unknown function"
|
||||
msgstr "Odwołanie do nieznanej funkcji"
|
||||
|
||||
|
@ -340,7 +337,6 @@ msgstr "Camera to left"
|
|||
msgid "Camera to right"
|
||||
msgstr "Camera to right"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Can not create this; there are too many objects"
|
||||
msgstr "Nie można tego utworzyć, za dużo obiektów"
|
||||
|
||||
|
@ -365,6 +361,9 @@ msgstr "Wyzwania\\Wyzwania programistyczne"
|
|||
msgid "Change camera\\Switches between onboard camera and following camera"
|
||||
msgstr "Zmień kamerę\\Przełącza pomiędzy kamerą pokładową i śledzącą"
|
||||
|
||||
msgid "Change player\\Change player"
|
||||
msgstr "Zmień gracza\\Zmień gracza"
|
||||
|
||||
msgid "Checkpoint"
|
||||
msgstr "Punkt kontrolny"
|
||||
|
||||
|
@ -702,7 +701,6 @@ msgstr "Nieodpowiedni rodzaj ogniw"
|
|||
msgid "Incorrect index type"
|
||||
msgstr "Nieprawidłowy typ indeksu"
|
||||
|
||||
#, fuzzy
|
||||
msgid "Infected by a virus; temporarily out of order"
|
||||
msgstr "Zainfekowane wirusem, chwilowo niesprawne"
|
||||
|
||||
|
@ -852,9 +850,6 @@ msgstr "Nowy ..."
|
|||
msgid "New bot available"
|
||||
msgstr "Dostępny nowy robot"
|
||||
|
||||
msgid "New player\\Choose player's name"
|
||||
msgstr "Nowy gracz\\Wybierz imię gracza"
|
||||
|
||||
msgid "Next"
|
||||
msgstr "Następny"
|
||||
|
||||
|
@ -1121,12 +1116,6 @@ msgstr "Podręcznik programowania\\Dostarcza szczegółową pomoc w programowani
|
|||
msgid "Programs dispatched by Houston"
|
||||
msgstr "Program dostarczony z Houston"
|
||||
|
||||
msgid "Proto\\Prototypes under development"
|
||||
msgstr "Prototypy\\Prototypy w trakcie rozwijania"
|
||||
|
||||
msgid "Prototypes"
|
||||
msgstr "Prototypy"
|
||||
|
||||
msgid "Public required"
|
||||
msgstr "Wymagany publiczny"
|
||||
|
||||
|
@ -2063,4 +2052,3 @@ msgstr "www.epsitec.com"
|
|||
|
||||
#~ msgid "Zoom"
|
||||
#~ msgstr "Powiększenie"
|
||||
|
||||
|
|
18
po/ru.po
18
po/ru.po
|
@ -49,9 +49,6 @@ msgstr "Миссии на этой планете:"
|
|||
msgid " Planets:"
|
||||
msgstr " Планеты:"
|
||||
|
||||
msgid " Prototypes on this planet:"
|
||||
msgstr "Прототипы на этой планете:"
|
||||
|
||||
msgid " Resolution:"
|
||||
msgstr " Разрешение:"
|
||||
|
||||
|
@ -318,6 +315,9 @@ msgstr "Кнопка %1"
|
|||
msgid "COLOBOT"
|
||||
msgstr "КОЛОБОТ"
|
||||
|
||||
msgid "COLOBOT: Gold Edition"
|
||||
msgstr ""
|
||||
|
||||
msgid "Calling an unknown function"
|
||||
msgstr "Вызов неизвестной функции"
|
||||
|
||||
|
@ -366,6 +366,9 @@ msgstr "Задания\\Практика программирования"
|
|||
msgid "Change camera\\Switches between onboard camera and following camera"
|
||||
msgstr "Изменить вид\\Переключение между бортовой камерой и следящей камерой"
|
||||
|
||||
msgid "Change player\\Change player"
|
||||
msgstr "Новый игрок\\Выберите имя для игрока"
|
||||
|
||||
msgid "Checkpoint"
|
||||
msgstr "Контрольная точка"
|
||||
|
||||
|
@ -849,9 +852,6 @@ msgstr "Новый ..."
|
|||
msgid "New bot available"
|
||||
msgstr "Доступен новый бот"
|
||||
|
||||
msgid "New player\\Choose player's name"
|
||||
msgstr "Новый игрок\\Выберите имя для игрока"
|
||||
|
||||
msgid "Next"
|
||||
msgstr "Следующий"
|
||||
|
||||
|
@ -1119,12 +1119,6 @@ msgstr ""
|
|||
msgid "Programs dispatched by Houston"
|
||||
msgstr "Программы переданные с Хьюстона"
|
||||
|
||||
msgid "Proto\\Prototypes under development"
|
||||
msgstr "Прототипы\\Прототипы в стадии разработки"
|
||||
|
||||
msgid "Prototypes"
|
||||
msgstr "Прототипы"
|
||||
|
||||
msgid "Public required"
|
||||
msgstr "Требуется общественное"
|
||||
|
||||
|
|
|
@ -28,6 +28,8 @@ if(MXE) # MXE requires special treatment
|
|||
elseif(PLATFORM_WINDOWS)
|
||||
# because it isn't included in standard linking libraries
|
||||
set(PLATFORM_LIBS "-lintl")
|
||||
elseif(PLATFORM_GNU)
|
||||
set(PLATFORM_LIBS "-lX11")
|
||||
elseif(PLATFORM_LINUX)
|
||||
# for clock_gettime
|
||||
set(PLATFORM_LIBS "-lrt -lX11")
|
||||
|
@ -59,7 +61,9 @@ endif()
|
|||
# Source files
|
||||
set(SOURCES
|
||||
app/app.cpp
|
||||
app/gamedata.cpp
|
||||
app/main.cpp
|
||||
app/pausemanager.cpp
|
||||
app/system.cpp
|
||||
app/${SYSTEM_CPP_MODULE}
|
||||
app/system_other.cpp
|
||||
|
|
184
src/app/app.cpp
184
src/app/app.cpp
|
@ -19,6 +19,7 @@
|
|||
|
||||
#include "app/app.h"
|
||||
|
||||
#include "app/gamedata.h"
|
||||
#include "app/system.h"
|
||||
|
||||
#include "common/logger.h"
|
||||
|
@ -100,6 +101,7 @@ CApplication::CApplication()
|
|||
m_objMan = new CObjectManager();
|
||||
m_eventQueue = new CEventQueue();
|
||||
m_profile = new CProfile();
|
||||
m_gameData = new CGameData();
|
||||
|
||||
m_engine = nullptr;
|
||||
m_device = nullptr;
|
||||
|
@ -112,7 +114,7 @@ CApplication::CApplication()
|
|||
m_debugModes = 0;
|
||||
m_customDataPath = false;
|
||||
|
||||
m_windowTitle = "COLOBOT";
|
||||
m_windowTitle = "COLOBOT GOLD";
|
||||
|
||||
m_simulationSuspended = false;
|
||||
|
||||
|
@ -149,29 +151,17 @@ CApplication::CApplication()
|
|||
|
||||
m_dataPath = GetSystemUtils()->GetDataPath();
|
||||
m_langPath = GetSystemUtils()->GetLangPath();
|
||||
m_texPackPath = "";
|
||||
|
||||
m_runSceneName = "";
|
||||
m_runSceneRank = 0;
|
||||
|
||||
m_sceneTest = false;
|
||||
|
||||
m_language = LANGUAGE_ENV;
|
||||
|
||||
m_lowCPU = true;
|
||||
|
||||
m_protoMode = false;
|
||||
|
||||
for (int i = 0; i < DIR_MAX; ++i)
|
||||
m_standardDataDirs[i] = nullptr;
|
||||
|
||||
m_standardDataDirs[DIR_AI] = "ai";
|
||||
m_standardDataDirs[DIR_FONT] = "fonts";
|
||||
m_standardDataDirs[DIR_HELP] = "help";
|
||||
m_standardDataDirs[DIR_ICON] = "icons";
|
||||
m_standardDataDirs[DIR_LEVEL] = "levels";
|
||||
m_standardDataDirs[DIR_MODEL] = "models";
|
||||
m_standardDataDirs[DIR_MUSIC] = "music";
|
||||
m_standardDataDirs[DIR_SOUND] = "sounds";
|
||||
m_standardDataDirs[DIR_TEXTURE] = "textures";
|
||||
}
|
||||
|
||||
CApplication::~CApplication()
|
||||
|
@ -190,6 +180,9 @@ CApplication::~CApplication()
|
|||
|
||||
delete m_iMan;
|
||||
m_iMan = nullptr;
|
||||
|
||||
delete m_gameData;
|
||||
m_gameData = nullptr;
|
||||
|
||||
GetSystemUtils()->DestroyTimeStamp(m_baseTimeStamp);
|
||||
GetSystemUtils()->DestroyTimeStamp(m_curTimeStamp);
|
||||
|
@ -210,12 +203,6 @@ CEventQueue* CApplication::GetEventQueue()
|
|||
CSoundInterface* CApplication::GetSound()
|
||||
{
|
||||
return m_sound;
|
||||
|
||||
for (int i = 0; i < PCNT_MAX; ++i)
|
||||
{
|
||||
GetSystemUtils()->DestroyTimeStamp(m_performanceCounters[i][0]);
|
||||
GetSystemUtils()->DestroyTimeStamp(m_performanceCounters[i][1]);
|
||||
}
|
||||
}
|
||||
|
||||
ParseArgsStatus CApplication::ParseArguments(int argc, char *argv[])
|
||||
|
@ -225,13 +212,13 @@ ParseArgsStatus CApplication::ParseArguments(int argc, char *argv[])
|
|||
OPT_HELP = 1,
|
||||
OPT_DEBUG,
|
||||
OPT_RUNSCENE,
|
||||
OPT_SCENETEST,
|
||||
OPT_LOGLEVEL,
|
||||
OPT_LANGUAGE,
|
||||
OPT_DATADIR,
|
||||
OPT_MOD,
|
||||
OPT_LANGDIR,
|
||||
OPT_TEXPACK,
|
||||
OPT_VBO,
|
||||
OPT_PROTO
|
||||
OPT_VBO
|
||||
};
|
||||
|
||||
option options[] =
|
||||
|
@ -239,13 +226,13 @@ ParseArgsStatus CApplication::ParseArguments(int argc, char *argv[])
|
|||
{ "help", no_argument, nullptr, OPT_HELP },
|
||||
{ "debug", required_argument, nullptr, OPT_DEBUG },
|
||||
{ "runscene", required_argument, nullptr, OPT_RUNSCENE },
|
||||
{ "scenetest", no_argument, nullptr, OPT_SCENETEST },
|
||||
{ "loglevel", required_argument, nullptr, OPT_LOGLEVEL },
|
||||
{ "language", required_argument, nullptr, OPT_LANGUAGE },
|
||||
{ "datadir", required_argument, nullptr, OPT_DATADIR },
|
||||
{ "mod", required_argument, nullptr, OPT_MOD },
|
||||
{ "langdir", required_argument, nullptr, OPT_LANGDIR },
|
||||
{ "texpack", required_argument, nullptr, OPT_TEXPACK },
|
||||
{ "vbo", required_argument, nullptr, OPT_VBO },
|
||||
{ "proto", no_argument, nullptr, OPT_PROTO },
|
||||
{ nullptr, 0, nullptr, 0}
|
||||
};
|
||||
|
||||
|
@ -279,13 +266,13 @@ ParseArgsStatus CApplication::ParseArguments(int argc, char *argv[])
|
|||
GetLogger()->Message(" -help this help\n");
|
||||
GetLogger()->Message(" -debug modes enable debug modes (more info printed in logs; see code for reference of modes)\n");
|
||||
GetLogger()->Message(" -runscene sceneNNN run given scene on start\n");
|
||||
GetLogger()->Message(" -scenetest win every mission right after it's loaded\n");
|
||||
GetLogger()->Message(" -loglevel level set log level to level (one of: trace, debug, info, warn, error, none)\n");
|
||||
GetLogger()->Message(" -language lang set language (one of: en, de, fr, pl, ru)\n");
|
||||
GetLogger()->Message(" -datadir path set custom data directory path\n");
|
||||
GetLogger()->Message(" -mod path run mod\n");
|
||||
GetLogger()->Message(" -langdir path set custom language directory path\n");
|
||||
GetLogger()->Message(" -texpack path set path to custom texture pack\n");
|
||||
GetLogger()->Message(" -vbo mode set OpenGL VBO mode (one of: auto, enable, disable)\n");
|
||||
GetLogger()->Message(" -proto show prototype levels\n");
|
||||
return PARSE_ARGS_HELP;
|
||||
}
|
||||
case OPT_DEBUG:
|
||||
|
@ -316,6 +303,11 @@ ParseArgsStatus CApplication::ParseArguments(int argc, char *argv[])
|
|||
GetLogger()->Info("Running scene '%s%d' on start\n", m_runSceneName.c_str(), m_runSceneRank);
|
||||
break;
|
||||
}
|
||||
case OPT_SCENETEST:
|
||||
{
|
||||
m_sceneTest = true;
|
||||
break;
|
||||
}
|
||||
case OPT_LOGLEVEL:
|
||||
{
|
||||
LogLevel logLevel;
|
||||
|
@ -346,19 +338,19 @@ ParseArgsStatus CApplication::ParseArguments(int argc, char *argv[])
|
|||
{
|
||||
m_dataPath = optarg;
|
||||
m_customDataPath = true;
|
||||
GetLogger()->Info("Using custom datadir or running mod: '%s'\n", m_dataPath.c_str());
|
||||
GetLogger()->Info("Using datadir: '%s'\n", optarg);
|
||||
break;
|
||||
}
|
||||
case OPT_MOD:
|
||||
{
|
||||
m_gameData->AddMod(std::string(optarg));
|
||||
GetLogger()->Info("Running mod from path: '%s'\n", optarg);
|
||||
break;
|
||||
}
|
||||
case OPT_LANGDIR:
|
||||
{
|
||||
m_langPath = optarg;
|
||||
GetLogger()->Info("Using custom language dir: '%s'\n", m_langPath.c_str());
|
||||
break;
|
||||
}
|
||||
case OPT_TEXPACK:
|
||||
{
|
||||
m_texPackPath = optarg;
|
||||
GetLogger()->Info("Using texturepack: '%s'\n", m_texPackPath.c_str());
|
||||
GetLogger()->Info("Using language dir: '%s'\n", m_langPath.c_str());
|
||||
break;
|
||||
}
|
||||
case OPT_VBO:
|
||||
|
@ -379,11 +371,6 @@ ParseArgsStatus CApplication::ParseArguments(int argc, char *argv[])
|
|||
|
||||
break;
|
||||
}
|
||||
case OPT_PROTO:
|
||||
{
|
||||
m_protoMode = true;
|
||||
break;
|
||||
}
|
||||
default:
|
||||
assert(false); // should never get here
|
||||
}
|
||||
|
@ -420,11 +407,19 @@ bool CApplication::Create()
|
|||
m_exitCode = 1;
|
||||
return false;
|
||||
}
|
||||
|
||||
m_gameData->SetDataDir(std::string(m_dataPath));
|
||||
m_gameData->Init();
|
||||
|
||||
#if !defined(PLATFORM_MACOSX)
|
||||
// On Mac OSX, the bundle can potentially change place, it doesn't make sense to cache it to the configuration file
|
||||
GetProfile().SetLocalProfileString("Resources", "Data", m_dataPath);
|
||||
#endif
|
||||
if (GetProfile().GetLocalProfileString("Language", "Lang", path)) {
|
||||
Language language;
|
||||
if (ParseLanguage(path, language)) {
|
||||
m_language = language;
|
||||
GetLogger()->Info("Setting language '%s' from ini file\n", path.c_str());
|
||||
} else {
|
||||
GetLogger()->Error("Invalid language '%s' in ini file\n", path.c_str());
|
||||
}
|
||||
}
|
||||
|
||||
SetLanguage(m_language);
|
||||
|
||||
|
@ -436,36 +431,9 @@ bool CApplication::Create()
|
|||
m_sound = new CSoundInterface();
|
||||
#endif
|
||||
|
||||
m_sound->Create(true);
|
||||
|
||||
#if !defined(PLATFORM_MACOSX)
|
||||
// On Mac OSX, the bundle can potentially change place, it doesn't make sense to cache it to the configuration file
|
||||
|
||||
// Cache sound files
|
||||
if (defaultValues)
|
||||
{
|
||||
GetProfile().SetLocalProfileString("Resources", "Sound", GetDataSubdirPath(DIR_SOUND));
|
||||
GetProfile().SetLocalProfileString("Resources", "Music", GetDataSubdirPath(DIR_MUSIC));
|
||||
}
|
||||
#endif
|
||||
|
||||
if (!m_customDataPath && GetProfile().GetLocalProfileString("Resources", "Sound", path))
|
||||
{
|
||||
m_sound->CacheAll(path);
|
||||
}
|
||||
else
|
||||
{
|
||||
m_sound->CacheAll(GetDataSubdirPath(DIR_SOUND));
|
||||
}
|
||||
|
||||
if (!m_customDataPath && GetProfile().GetLocalProfileString("Resources", "Music", path))
|
||||
{
|
||||
m_sound->AddMusicFiles(path);
|
||||
}
|
||||
else
|
||||
{
|
||||
m_sound->AddMusicFiles(GetDataSubdirPath(DIR_MUSIC));
|
||||
}
|
||||
m_sound->Create();
|
||||
m_sound->CacheAll();
|
||||
m_sound->AddMusicFiles();
|
||||
|
||||
GetLogger()->Info("CApplication created successfully\n");
|
||||
|
||||
|
@ -962,15 +930,15 @@ int CApplication::Run()
|
|||
{
|
||||
LogEvent(event);
|
||||
|
||||
StartPerformanceCounter(PCNT_UPDATE_ENGINE);
|
||||
m_engine->FrameUpdate();
|
||||
StopPerformanceCounter(PCNT_UPDATE_ENGINE);
|
||||
|
||||
m_sound->FrameMove(m_relTime);
|
||||
|
||||
StartPerformanceCounter(PCNT_UPDATE_GAME);
|
||||
m_robotMain->ProcessEvent(event);
|
||||
StopPerformanceCounter(PCNT_UPDATE_GAME);
|
||||
|
||||
StartPerformanceCounter(PCNT_UPDATE_ENGINE);
|
||||
m_engine->FrameUpdate();
|
||||
StopPerformanceCounter(PCNT_UPDATE_ENGINE);
|
||||
}
|
||||
|
||||
StopPerformanceCounter(PCNT_UPDATE_ALL);
|
||||
|
@ -1608,59 +1576,6 @@ bool CApplication::GetJoystickEnabled() const
|
|||
return m_joystickEnabled;
|
||||
}
|
||||
|
||||
std::string CApplication::GetDataDirPath() const
|
||||
{
|
||||
return m_dataPath;
|
||||
}
|
||||
|
||||
std::string CApplication::GetDataSubdirPath(DataDir stdDir) const
|
||||
{
|
||||
int index = static_cast<int>(stdDir);
|
||||
assert(index >= 0 && index < DIR_MAX);
|
||||
std::stringstream str;
|
||||
str << m_dataPath;
|
||||
str << "/";
|
||||
str << m_standardDataDirs[index];
|
||||
return str.str();
|
||||
}
|
||||
|
||||
std::string CApplication::GetDataFilePath(DataDir stdDir, const std::string& subpath) const
|
||||
{
|
||||
int index = static_cast<int>(stdDir);
|
||||
assert(index >= 0 && index < DIR_MAX);
|
||||
std::stringstream str;
|
||||
str << m_dataPath;
|
||||
str << "/";
|
||||
str << m_standardDataDirs[index];
|
||||
if (stdDir == DIR_HELP)
|
||||
{
|
||||
str << "/";
|
||||
str << GetLanguageChar();
|
||||
}
|
||||
str << "/";
|
||||
str << subpath;
|
||||
return str.str();
|
||||
}
|
||||
|
||||
std::string CApplication::GetTexPackFilePath(const std::string& textureName) const
|
||||
{
|
||||
std::stringstream str;
|
||||
|
||||
if (! m_texPackPath.empty())
|
||||
{
|
||||
str << m_texPackPath;
|
||||
str << "/";
|
||||
str << textureName;
|
||||
if (! boost::filesystem::exists(str.str()))
|
||||
{
|
||||
GetLogger()->Trace("Texture '%s' not in texpack\n", textureName.c_str());
|
||||
str.str("");
|
||||
}
|
||||
}
|
||||
|
||||
return str.str();
|
||||
}
|
||||
|
||||
Language CApplication::GetLanguage() const
|
||||
{
|
||||
return m_language;
|
||||
|
@ -1868,8 +1783,7 @@ void CApplication::UpdatePerformanceCountersData()
|
|||
}
|
||||
}
|
||||
|
||||
bool CApplication::GetProtoMode() const
|
||||
bool CApplication::GetSceneTestMode()
|
||||
{
|
||||
return m_protoMode;
|
||||
return m_sceneTest;
|
||||
}
|
||||
|
||||
|
|
|
@ -42,6 +42,7 @@ class CInstanceManager;
|
|||
class CEventQueue;
|
||||
class CRobotMain;
|
||||
class CSoundInterface;
|
||||
class CGameData;
|
||||
|
||||
namespace Gfx {
|
||||
class CModelManager;
|
||||
|
@ -328,18 +329,6 @@ public:
|
|||
static bool ParseDebugModes(const std::string& str, int& debugModes);
|
||||
//@}
|
||||
|
||||
//! Returns the full path to data directory
|
||||
std::string GetDataDirPath() const;
|
||||
|
||||
//! Returns the full path to a standard dir in data directory
|
||||
std::string GetDataSubdirPath(DataDir stdDir) const;
|
||||
|
||||
//! Returns the full path to a file in data directory given standard dir and subpath
|
||||
std::string GetDataFilePath(DataDir stdDir, const std::string &subpath) const;
|
||||
|
||||
//! Returns the full path to a file in texture pack directory
|
||||
std::string GetTexPackFilePath(const std::string& textureName) const;
|
||||
|
||||
//! Management of language
|
||||
//@{
|
||||
Language GetLanguage() const;
|
||||
|
@ -360,8 +349,8 @@ public:
|
|||
void StopPerformanceCounter(PerformanceCounter counter);
|
||||
float GetPerformanceCounterData(PerformanceCounter counter) const;
|
||||
//@}
|
||||
|
||||
bool GetProtoMode() const;
|
||||
|
||||
bool GetSceneTestMode();
|
||||
|
||||
protected:
|
||||
//! Creates the window's SDL_Surface
|
||||
|
@ -413,6 +402,8 @@ protected:
|
|||
CRobotMain* m_robotMain;
|
||||
//! Profile (INI) reader/writer
|
||||
CProfile* m_profile;
|
||||
//! Game data
|
||||
CGameData* m_gameData;
|
||||
|
||||
//! Code to return at exit
|
||||
int m_exitCode;
|
||||
|
@ -485,17 +476,15 @@ protected:
|
|||
|
||||
//! Path to directory with language files
|
||||
std::string m_langPath;
|
||||
|
||||
//! Path to directory with user texture pack
|
||||
std::string m_texPackPath;
|
||||
|
||||
|
||||
//@{
|
||||
//! Scene to run on startup
|
||||
std::string m_runSceneName;
|
||||
int m_runSceneRank;
|
||||
//@}
|
||||
|
||||
const char* m_standardDataDirs[DIR_MAX];
|
||||
|
||||
//! Scene test mode
|
||||
bool m_sceneTest;
|
||||
|
||||
//! Application language
|
||||
Language m_language;
|
||||
|
|
|
@ -0,0 +1,136 @@
|
|||
// * This file is part of the COLOBOT source code
|
||||
// * Copyright (C) 2014, 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/.
|
||||
|
||||
#include "app/gamedata.h"
|
||||
|
||||
|
||||
#include "app/app.h"
|
||||
|
||||
#include <boost/filesystem.hpp>
|
||||
|
||||
template<> CGameData* CSingleton<CGameData>::m_instance = nullptr;
|
||||
|
||||
CGameData::CGameData()
|
||||
{
|
||||
m_dataDirSet = false;
|
||||
|
||||
for (int i = 0; i < DIR_MAX; ++i)
|
||||
m_standardDataDirs[i] = nullptr;
|
||||
|
||||
m_standardDataDirs[DIR_AI] = "ai";
|
||||
m_standardDataDirs[DIR_FONT] = "fonts";
|
||||
m_standardDataDirs[DIR_HELP] = "help";
|
||||
m_standardDataDirs[DIR_ICON] = "icons";
|
||||
m_standardDataDirs[DIR_LEVEL] = "levels";
|
||||
m_standardDataDirs[DIR_MODEL] = "models";
|
||||
m_standardDataDirs[DIR_MUSIC] = "music";
|
||||
m_standardDataDirs[DIR_SOUND] = "sounds";
|
||||
m_standardDataDirs[DIR_TEXTURE] = "textures";
|
||||
}
|
||||
|
||||
CGameData::~CGameData()
|
||||
{
|
||||
}
|
||||
|
||||
void CGameData::SetDataDir(std::string path)
|
||||
{
|
||||
assert(!m_dataDirSet);
|
||||
m_dataDirSet = true;
|
||||
|
||||
m_dataDirs.insert(m_dataDirs.begin(), path);
|
||||
}
|
||||
|
||||
void CGameData::AddMod(std::string path)
|
||||
{
|
||||
m_dataDirs.push_back(path);
|
||||
}
|
||||
|
||||
void CGameData::Init()
|
||||
{
|
||||
std::string out = "Using datadirs: ";
|
||||
bool first = true;
|
||||
for(std::vector<std::string>::reverse_iterator rit = m_dataDirs.rbegin(); rit != m_dataDirs.rend(); ++rit) {
|
||||
if(!first) out += ", ";
|
||||
first = false;
|
||||
out += *rit;
|
||||
}
|
||||
out += "\n";
|
||||
CLogger::GetInstancePointer()->Info(out.c_str());
|
||||
}
|
||||
|
||||
std::string CGameData::GetFilePath(DataDir dir, const std::string& subpath)
|
||||
{
|
||||
int index = static_cast<int>(dir);
|
||||
assert(index >= 0 && index < DIR_MAX);
|
||||
|
||||
for(std::vector<std::string>::reverse_iterator rit = m_dataDirs.rbegin(); rit != m_dataDirs.rend(); ++rit) {
|
||||
std::stringstream str;
|
||||
|
||||
if ( subpath.find("save") == std::string::npos ){ // if its NOT a path to a savefile screenshot
|
||||
str << *rit;
|
||||
str << "/";
|
||||
str << m_standardDataDirs[index];
|
||||
|
||||
if (dir == DIR_HELP)
|
||||
{
|
||||
str << "/";
|
||||
str << CApplication::GetInstancePointer()->GetLanguageChar();
|
||||
}
|
||||
str << "/";
|
||||
}
|
||||
|
||||
str << subpath;
|
||||
|
||||
boost::filesystem::path path(str.str());
|
||||
if(boost::filesystem::exists(path))
|
||||
{
|
||||
return str.str();
|
||||
}
|
||||
}
|
||||
|
||||
if(m_dataDirs.size() > 0) {
|
||||
std::stringstream str;
|
||||
if ( subpath.find("save") == std::string::npos ){ // if its NOT a path to a savefile screenshot
|
||||
str << m_dataDirs[0];
|
||||
str << "/";
|
||||
str << m_standardDataDirs[index];
|
||||
|
||||
if (dir == DIR_HELP)
|
||||
{
|
||||
str << "/";
|
||||
str << CApplication::GetInstancePointer()->GetLanguageChar();
|
||||
}
|
||||
str << "/";
|
||||
}
|
||||
str << subpath;
|
||||
return str.str();
|
||||
}
|
||||
|
||||
return subpath;
|
||||
}
|
||||
|
||||
std::string CGameData::GetDataPath(const std::string &subpath)
|
||||
{
|
||||
for(std::vector<std::string>::reverse_iterator rit = m_dataDirs.rbegin(); rit != m_dataDirs.rend(); ++rit) {
|
||||
std::string path = *rit + "/" + subpath;
|
||||
boost::filesystem::path boostPath(path);
|
||||
if(boost::filesystem::exists(boostPath))
|
||||
{
|
||||
return path;
|
||||
}
|
||||
}
|
||||
return m_dataDirs[0] + "/" + subpath;
|
||||
}
|
|
@ -0,0 +1,66 @@
|
|||
// * This file is part of the COLOBOT source code
|
||||
// * Copyright (C) 2014, 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/.
|
||||
|
||||
/**
|
||||
* \file app/gamedata.h
|
||||
* \brief Game data
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "common/singleton.h"
|
||||
|
||||
#include <string>
|
||||
#include <vector>
|
||||
|
||||
/**
|
||||
* \enum DataDir
|
||||
* \brief Directories in data directory
|
||||
*/
|
||||
enum DataDir
|
||||
{
|
||||
DIR_AI, //! < ai scripts
|
||||
DIR_FONT, //! < fonts
|
||||
DIR_HELP, //! < help files
|
||||
DIR_ICON, //! < icons & images
|
||||
DIR_LEVEL, //! < levels
|
||||
DIR_MODEL, //! < models
|
||||
DIR_MUSIC, //! < music
|
||||
DIR_SOUND, //! < sounds
|
||||
DIR_TEXTURE, //! < textures
|
||||
|
||||
DIR_MAX //! < number of dirs
|
||||
};
|
||||
|
||||
class CGameData : public CSingleton<CGameData>
|
||||
{
|
||||
public:
|
||||
CGameData();
|
||||
~CGameData();
|
||||
|
||||
void Init();
|
||||
void SetDataDir(std::string path);
|
||||
void AddMod(std::string path);
|
||||
|
||||
std::string GetFilePath(DataDir dir, const std::string &subpath);
|
||||
std::string GetDataPath(const std::string &subpath);
|
||||
|
||||
private:
|
||||
bool m_dataDirSet;
|
||||
std::vector<std::string> m_dataDirs;
|
||||
const char* m_standardDataDirs[DIR_MAX];
|
||||
};
|
||||
|
|
@ -0,0 +1,94 @@
|
|||
// * 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/.
|
||||
|
||||
#include "app/app.h"
|
||||
#include "app/pausemanager.h"
|
||||
|
||||
#include "common/logger.h"
|
||||
|
||||
#include "object/robotmain.h"
|
||||
|
||||
|
||||
template<> CPauseManager* CSingleton<CPauseManager>::m_instance = nullptr;
|
||||
|
||||
|
||||
CPauseManager::CPauseManager()
|
||||
{
|
||||
m_sound = CApplication::GetInstancePointer()->GetSound();
|
||||
|
||||
m_pause = PAUSE_NONE;
|
||||
}
|
||||
|
||||
CPauseManager::~CPauseManager()
|
||||
{
|
||||
m_sound = nullptr;
|
||||
}
|
||||
|
||||
void CPauseManager::SetPause(PauseType pause)
|
||||
{
|
||||
if(pause != PAUSE_NONE) {
|
||||
if(m_pause != pause) {
|
||||
CLogger::GetInstancePointer()->Info("Game paused - %s\n", GetPauseName(pause).c_str());
|
||||
CRobotMain::GetInstancePointer()->StartPauseMusic(pause);
|
||||
}
|
||||
|
||||
m_pause = pause;
|
||||
} else
|
||||
ClearPause();
|
||||
}
|
||||
|
||||
void CPauseManager::ClearPause()
|
||||
{
|
||||
if(m_pause != PAUSE_NONE) {
|
||||
CLogger::GetInstancePointer()->Info("Game resumed\n");
|
||||
m_sound->StopPauseMusic();
|
||||
}
|
||||
|
||||
m_pause = PAUSE_NONE;
|
||||
}
|
||||
|
||||
bool CPauseManager::GetPause()
|
||||
{
|
||||
return m_pause != PAUSE_NONE;
|
||||
}
|
||||
|
||||
bool CPauseManager::GetPause(PauseType pause)
|
||||
{
|
||||
return m_pause == pause;
|
||||
}
|
||||
|
||||
PauseType CPauseManager::GetPauseType()
|
||||
{
|
||||
return m_pause;
|
||||
}
|
||||
|
||||
std::string CPauseManager::GetPauseName(PauseType pause)
|
||||
{
|
||||
switch(pause)
|
||||
{
|
||||
case PAUSE_NONE: return "None";
|
||||
case PAUSE_USER: return "User";
|
||||
case PAUSE_SATCOM: return "SatCom";
|
||||
case PAUSE_SATCOMMOVIE: return "SatCom opening animation";
|
||||
case PAUSE_DIALOG: return "Dialog";
|
||||
case PAUSE_EDITOR: return "CBot editor";
|
||||
case PAUSE_VISIT: return "Visit";
|
||||
case PAUSE_CHEAT: return "Cheat console";
|
||||
case PAUSE_PHOTO: return "Photo mode";
|
||||
default: assert(false); // Should never happen
|
||||
}
|
||||
}
|
|
@ -0,0 +1,62 @@
|
|||
// * 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/.
|
||||
|
||||
/**
|
||||
* \file app/pausemanager.h
|
||||
* \brief Management of pause modes
|
||||
*/
|
||||
#pragma once
|
||||
|
||||
#include "common/singleton.h"
|
||||
#include "sound/sound.h"
|
||||
|
||||
#include <string>
|
||||
|
||||
|
||||
enum PauseType {
|
||||
PAUSE_NONE = 0,
|
||||
PAUSE_USER,
|
||||
PAUSE_SATCOM,
|
||||
PAUSE_SATCOMMOVIE,
|
||||
PAUSE_DIALOG,
|
||||
PAUSE_EDITOR,
|
||||
PAUSE_VISIT,
|
||||
PAUSE_CHEAT,
|
||||
PAUSE_PHOTO
|
||||
};
|
||||
|
||||
class CPauseManager : public CSingleton<CPauseManager>
|
||||
{
|
||||
public:
|
||||
CPauseManager();
|
||||
~CPauseManager();
|
||||
|
||||
void SetPause(PauseType pause);
|
||||
void ClearPause();
|
||||
bool GetPause();
|
||||
bool GetPause(PauseType pause);
|
||||
PauseType GetPauseType();
|
||||
|
||||
private:
|
||||
std::string GetPauseName(PauseType pause);
|
||||
|
||||
private:
|
||||
CSoundInterface* m_sound;
|
||||
|
||||
PauseType m_pause;
|
||||
};
|
||||
|
|
@ -3,6 +3,7 @@
|
|||
// Macros set by CMake
|
||||
#cmakedefine PLATFORM_WINDOWS @PLATFORM_WINDOWS@
|
||||
#cmakedefine PLATFORM_LINUX @PLATFORM_LINUX@
|
||||
#cmakedefine PLATFORM_GNU @PLATFORM_GNU@
|
||||
#cmakedefine PLATFORM_MACOSX @PLATFORM_MACOSX@
|
||||
#cmakedefine PLATFORM_OTHER @PLATFORM_OTHER@
|
||||
|
||||
|
@ -26,6 +27,7 @@
|
|||
#define COLOBOT_VERSION "@COLOBOT_VERSION_FULL@"
|
||||
#define COLOBOT_CODENAME "@COLOBOT_VERSION_CODENAME@"
|
||||
#define COLOBOT_FULLNAME "Colobot @COLOBOT_VERSION_CODENAME@"
|
||||
#define COLOBOT_VERSION_DISPLAY "@COLOBOT_VERSION_DISPLAY@"
|
||||
|
||||
#define COLOBOT_DEFAULT_DATADIR "@COLOBOT_INSTALL_DATA_DIR@"
|
||||
#define COLOBOT_I18N_DIR "@COLOBOT_INSTALL_I18N_DIR@"
|
||||
|
|
|
@ -161,7 +161,6 @@ void InitializeEventTypeTexts()
|
|||
EVENT_TYPE_TEXT[EVENT_INTERFACE_DEFI] = "EVENT_INTERFACE_DEFI";
|
||||
EVENT_TYPE_TEXT[EVENT_INTERFACE_MISSION] = "EVENT_INTERFACE_MISSION";
|
||||
EVENT_TYPE_TEXT[EVENT_INTERFACE_FREE] = "EVENT_INTERFACE_FREE";
|
||||
EVENT_TYPE_TEXT[EVENT_INTERFACE_PROTO] = "EVENT_INTERFACE_PROTO";
|
||||
EVENT_TYPE_TEXT[EVENT_INTERFACE_NAME] = "EVENT_INTERFACE_NAME";
|
||||
EVENT_TYPE_TEXT[EVENT_INTERFACE_SETUP] = "EVENT_INTERFACE_SETUP";
|
||||
EVENT_TYPE_TEXT[EVENT_INTERFACE_QUIT] = "EVENT_INTERFACE_QUIT";
|
||||
|
|
|
@ -184,7 +184,6 @@ enum EventType
|
|||
EVENT_INTERFACE_DEFI = 401,
|
||||
EVENT_INTERFACE_MISSION = 402,
|
||||
EVENT_INTERFACE_FREE = 403,
|
||||
EVENT_INTERFACE_PROTO = 404,
|
||||
EVENT_INTERFACE_NAME = 405,
|
||||
EVENT_INTERFACE_SETUP = 406,
|
||||
EVENT_INTERFACE_QUIT = 407,
|
||||
|
|
|
@ -28,137 +28,138 @@
|
|||
*/
|
||||
enum Error
|
||||
{
|
||||
ERR_OK = 0, //! < ok
|
||||
ERR_GENERIC = 1, //! < any error
|
||||
ERR_CONTINUE = 2, //! < continues
|
||||
ERR_STOP = 3, //! < stops
|
||||
ERR_CMD = 4, //! < unknown command
|
||||
ERR_MANIP_VEH = 100, //! < inappropriate vehicle
|
||||
ERR_MANIP_FLY = 101, //! < impossible in flight
|
||||
ERR_MANIP_BUSY = 102, //! < taking: hands already occupied
|
||||
ERR_MANIP_NIL = 103, //! < taking: nothing has to take
|
||||
ERR_MANIP_MOTOR = 105, //! < busy: impossible to move
|
||||
ERR_MANIP_OCC = 106, //! < busy: location already occupied
|
||||
ERR_MANIP_FRIEND = 107, //! < no other vehicle
|
||||
ERR_MANIP_RADIO = 108, //! < impossible because radioactive
|
||||
ERR_MANIP_WATER = 109, //! < not possible under water
|
||||
ERR_MANIP_EMPTY = 110, //! < nothing to deposit
|
||||
ERR_BUILD_FLY = 120, //! < not possible in flight
|
||||
ERR_BUILD_WATER = 121, //! < not possible under water
|
||||
ERR_BUILD_ENERGY = 122, //! < not enough energy
|
||||
ERR_BUILD_METALAWAY = 123, //! < lack of metal (too far)
|
||||
ERR_BUILD_METALNEAR = 124, //! < lack of metal (too close)
|
||||
ERR_BUILD_METALINEX = 125, //! < lack of metal
|
||||
ERR_BUILD_FLAT = 126, //! < not enough flat ground
|
||||
ERR_BUILD_FLATLIT = 127, //! < not enough flat ground space
|
||||
ERR_BUILD_BUSY = 128, //! < location occupied
|
||||
ERR_BUILD_BASE = 129, //! < too close to the rocket
|
||||
ERR_BUILD_NARROW = 130, //! < buildings too close
|
||||
ERR_BUILD_MOTOR = 131, //! < built: not possible in movement
|
||||
ERR_BUILD_DISABLED = 132, //! < built: can not produce this object in this mission
|
||||
ERR_BUILD_RESEARCH = 133, //! < built: can not produce not researched object
|
||||
ERR_SEARCH_FLY = 140, //! < not possible in flight
|
||||
ERR_SEARCH_VEH = 141, //! < inappropriate vehicle
|
||||
ERR_SEARCH_MOTOR = 142, //! < impossible in movement
|
||||
ERR_TERRA_VEH = 150, //! < inappropriate vehicle
|
||||
ERR_TERRA_ENERGY = 151, //! < not enough energy
|
||||
ERR_TERRA_FLOOR = 152, //! < inappropriate ground
|
||||
ERR_TERRA_BUILDING = 153, //! < building too close
|
||||
ERR_TERRA_OBJECT = 154, //! < object too close
|
||||
ERR_FIRE_VEH = 160, //! < inappropriate vehicle
|
||||
ERR_FIRE_ENERGY = 161, //! < not enough energy
|
||||
ERR_FIRE_FLY = 162, //! < not possible in flight
|
||||
ERR_RECOVER_VEH = 170, //! < inappropriate vehicle
|
||||
ERR_RECOVER_ENERGY = 171, //! < not enough energy
|
||||
ERR_RECOVER_NULL = 172, //! < lack of ruin
|
||||
ERR_CONVERT_EMPTY = 180, //! < no stone was transformed
|
||||
ERR_SHIELD_VEH = 190, //! < inappropriate vehicle
|
||||
ERR_SHIELD_ENERGY = 191, //! < not enough energy
|
||||
ERR_MOVE_IMPOSSIBLE = 200, //! < move impossible
|
||||
ERR_FIND_IMPOSSIBLE = 201, //! < find impossible
|
||||
ERR_GOTO_IMPOSSIBLE = 210, //! < goto impossible
|
||||
ERR_GOTO_ITER = 211, //! < goto too complicated
|
||||
ERR_GOTO_BUSY = 212, //! < goto destination occupied
|
||||
ERR_DERRICK_NULL = 300, //! < no ore underground
|
||||
ERR_STATION_NULL = 301, //! < no energy underground
|
||||
ERR_TOWER_POWER = 310, //! < no battery
|
||||
ERR_TOWER_ENERGY = 311, //! < more energy
|
||||
ERR_RESEARCH_POWER = 320, //! < no battery
|
||||
ERR_RESEARCH_ENERGY = 321, //! < more energy
|
||||
ERR_RESEARCH_TYPE = 322, //! < the wrong type of battery
|
||||
ERR_RESEARCH_ALREADY = 323, //! < research already done
|
||||
ERR_ENERGY_NULL = 330, //! < no energy underground
|
||||
ERR_ENERGY_LOW = 331, //! < not enough energy
|
||||
ERR_ENERGY_EMPTY = 332, //! < lack of metal
|
||||
ERR_ENERGY_BAD = 333, //! < transforms only the metal
|
||||
ERR_BASE_DLOCK = 340, //! < doors locked
|
||||
ERR_BASE_DHUMAN = 341, //! < you must be on spaceship
|
||||
ERR_LABO_NULL = 350, //! < nothing to analyze
|
||||
ERR_LABO_BAD = 351, //! < analyzes only organic ball
|
||||
ERR_LABO_ALREADY = 352, //! < analysis already made
|
||||
ERR_NUCLEAR_NULL = 360, //! < no energy underground
|
||||
ERR_NUCLEAR_LOW = 361, //! < not enough energy
|
||||
ERR_NUCLEAR_EMPTY = 362, //! < lack of uranium
|
||||
ERR_NUCLEAR_BAD = 363, //! < transforms only uranium
|
||||
ERR_FACTORY_NULL = 370, //! < no metal
|
||||
ERR_FACTORY_NEAR = 371, //! < vehicle too close
|
||||
ERR_RESET_NEAR = 380, //! < vehicle too close
|
||||
ERR_INFO_NULL = 390, //! < no information terminal
|
||||
ERR_VEH_VIRUS = 400, //! < vehicle infected by a virus
|
||||
ERR_BAT_VIRUS = 401, //! < building infected by a virus
|
||||
ERR_DESTROY_NOTFOUND = 410, //! < not found anything to destroy
|
||||
ERR_WRONG_OBJ = 420, //! < inappropriate vehicle
|
||||
ERR_VEH_POWER = 500, //! < no battery
|
||||
ERR_VEH_ENERGY = 501, //! < more energy
|
||||
ERR_FLAG_FLY = 510, //! < impossible in flight
|
||||
ERR_FLAG_WATER = 511, //! < impossible during swimming
|
||||
ERR_FLAG_MOTOR = 512, //! < impossible in movement
|
||||
ERR_FLAG_BUSY = 513, //! < taking: already creating flag
|
||||
ERR_FLAG_CREATE = 514, //! < too many flags
|
||||
ERR_FLAG_PROXY = 515, //! < too close
|
||||
ERR_FLAG_DELETE = 516, //! < nothing to remove
|
||||
ERR_MISSION_NOTERM = 600, //! < Mission not completed
|
||||
ERR_DELETEMOBILE = 700, //! < vehicle destroyed
|
||||
ERR_DELETEBUILDING = 701, //! < building destroyed
|
||||
ERR_TOOMANY = 702, //! < too many objects
|
||||
ERR_OBLIGATORYTOKEN = 800, //! < compulsory instruction missing
|
||||
ERR_PROHIBITEDTOKEN = 801, //! < instruction prohibited
|
||||
ERR_OK = 0, //! < ok
|
||||
ERR_GENERIC = 1, //! < any error
|
||||
ERR_CONTINUE = 2, //! < continues
|
||||
ERR_STOP = 3, //! < stops
|
||||
ERR_CMD = 4, //! < unknown command
|
||||
ERR_MANIP_VEH = 100, //! < inappropriate vehicle
|
||||
ERR_MANIP_FLY = 101, //! < impossible in flight
|
||||
ERR_MANIP_BUSY = 102, //! < taking: hands already occupied
|
||||
ERR_MANIP_NIL = 103, //! < taking: nothing has to take
|
||||
ERR_MANIP_MOTOR = 105, //! < busy: impossible to move
|
||||
ERR_MANIP_OCC = 106, //! < busy: location already occupied
|
||||
ERR_MANIP_FRIEND = 107, //! < no other vehicle
|
||||
ERR_MANIP_RADIO = 108, //! < impossible because radioactive
|
||||
ERR_MANIP_WATER = 109, //! < not possible under water
|
||||
ERR_MANIP_EMPTY = 110, //! < nothing to deposit
|
||||
ERR_BUILD_FLY = 120, //! < not possible in flight
|
||||
ERR_BUILD_WATER = 121, //! < not possible under water
|
||||
ERR_BUILD_ENERGY = 122, //! < not enough energy
|
||||
ERR_BUILD_METALAWAY = 123, //! < lack of metal (too far)
|
||||
ERR_BUILD_METALNEAR = 124, //! < lack of metal (too close)
|
||||
ERR_BUILD_METALINEX = 125, //! < lack of metal
|
||||
ERR_BUILD_FLAT = 126, //! < not enough flat ground
|
||||
ERR_BUILD_FLATLIT = 127, //! < not enough flat ground space
|
||||
ERR_BUILD_BUSY = 128, //! < location occupied
|
||||
ERR_BUILD_BASE = 129, //! < too close to the rocket
|
||||
ERR_BUILD_NARROW = 130, //! < buildings too close
|
||||
ERR_BUILD_MOTOR = 131, //! < built: not possible in movement
|
||||
ERR_BUILD_DISABLED = 132, //! < built: can not produce this object in this mission
|
||||
ERR_BUILD_RESEARCH = 133, //! < built: can not produce not researched object
|
||||
ERR_SEARCH_FLY = 140, //! < not possible in flight
|
||||
ERR_SEARCH_VEH = 141, //! < inappropriate vehicle
|
||||
ERR_SEARCH_MOTOR = 142, //! < impossible in movement
|
||||
ERR_TERRA_VEH = 150, //! < inappropriate vehicle
|
||||
ERR_TERRA_ENERGY = 151, //! < not enough energy
|
||||
ERR_TERRA_FLOOR = 152, //! < inappropriate ground
|
||||
ERR_TERRA_BUILDING = 153, //! < building too close
|
||||
ERR_TERRA_OBJECT = 154, //! < object too close
|
||||
ERR_FIRE_VEH = 160, //! < inappropriate vehicle
|
||||
ERR_FIRE_ENERGY = 161, //! < not enough energy
|
||||
ERR_FIRE_FLY = 162, //! < not possible in flight
|
||||
ERR_RECOVER_VEH = 170, //! < inappropriate vehicle
|
||||
ERR_RECOVER_ENERGY = 171, //! < not enough energy
|
||||
ERR_RECOVER_NULL = 172, //! < lack of ruin
|
||||
ERR_CONVERT_EMPTY = 180, //! < no stone was transformed
|
||||
ERR_SHIELD_VEH = 190, //! < inappropriate vehicle
|
||||
ERR_SHIELD_ENERGY = 191, //! < not enough energy
|
||||
ERR_MOVE_IMPOSSIBLE = 200, //! < move impossible
|
||||
ERR_FIND_IMPOSSIBLE = 201, //! < find impossible
|
||||
ERR_GOTO_IMPOSSIBLE = 210, //! < goto impossible
|
||||
ERR_GOTO_ITER = 211, //! < goto too complicated
|
||||
ERR_GOTO_BUSY = 212, //! < goto destination occupied
|
||||
ERR_DERRICK_NULL = 300, //! < no ore underground
|
||||
ERR_STATION_NULL = 301, //! < no energy underground
|
||||
ERR_TOWER_POWER = 310, //! < no battery
|
||||
ERR_TOWER_ENERGY = 311, //! < more energy
|
||||
ERR_RESEARCH_POWER = 320, //! < no battery
|
||||
ERR_RESEARCH_ENERGY = 321, //! < more energy
|
||||
ERR_RESEARCH_TYPE = 322, //! < the wrong type of battery
|
||||
ERR_RESEARCH_ALREADY = 323, //! < research already done
|
||||
ERR_ENERGY_NULL = 330, //! < no energy underground
|
||||
ERR_ENERGY_LOW = 331, //! < not enough energy
|
||||
ERR_ENERGY_EMPTY = 332, //! < lack of metal
|
||||
ERR_ENERGY_BAD = 333, //! < transforms only the metal
|
||||
ERR_BASE_DLOCK = 340, //! < doors locked
|
||||
ERR_BASE_DHUMAN = 341, //! < you must be on spaceship
|
||||
ERR_LABO_NULL = 350, //! < nothing to analyze
|
||||
ERR_LABO_BAD = 351, //! < analyzes only organic ball
|
||||
ERR_LABO_ALREADY = 352, //! < analysis already made
|
||||
ERR_NUCLEAR_NULL = 360, //! < no energy underground
|
||||
ERR_NUCLEAR_LOW = 361, //! < not enough energy
|
||||
ERR_NUCLEAR_EMPTY = 362, //! < lack of uranium
|
||||
ERR_NUCLEAR_BAD = 363, //! < transforms only uranium
|
||||
ERR_FACTORY_NULL = 370, //! < no metal
|
||||
ERR_FACTORY_NEAR = 371, //! < vehicle too close
|
||||
ERR_RESET_NEAR = 380, //! < vehicle too close
|
||||
ERR_INFO_NULL = 390, //! < no information terminal
|
||||
ERR_VEH_VIRUS = 400, //! < vehicle infected by a virus
|
||||
ERR_BAT_VIRUS = 401, //! < building infected by a virus
|
||||
ERR_DESTROY_NOTFOUND = 410, //! < not found anything to destroy
|
||||
ERR_WRONG_OBJ = 420, //! < inappropriate vehicle
|
||||
ERR_VEH_POWER = 500, //! < no battery
|
||||
ERR_VEH_ENERGY = 501, //! < more energy
|
||||
ERR_FLAG_FLY = 510, //! < impossible in flight
|
||||
ERR_FLAG_WATER = 511, //! < impossible during swimming
|
||||
ERR_FLAG_MOTOR = 512, //! < impossible in movement
|
||||
ERR_FLAG_BUSY = 513, //! < taking: already creating flag
|
||||
ERR_FLAG_CREATE = 514, //! < too many flags
|
||||
ERR_FLAG_PROXY = 515, //! < too close
|
||||
ERR_FLAG_DELETE = 516, //! < nothing to remove
|
||||
ERR_MISSION_NOTERM = 600, //! < Mission not completed
|
||||
ERR_DELETEMOBILE = 700, //! < vehicle destroyed
|
||||
ERR_DELETEBUILDING = 701, //! < building destroyed
|
||||
ERR_TOOMANY = 702, //! < too many objects
|
||||
ERR_OBLIGATORYTOKEN = 800, //! < compulsory instruction missing
|
||||
ERR_PROHIBITEDTOKEN = 801, //! < instruction prohibited
|
||||
ERR_AIM_IMPOSSIBLE = 900, //! < cannot aim at specified angle(s)
|
||||
|
||||
INFO_FIRST = 10000, //! < first information
|
||||
INFO_BUILD = 10001, //! < construction builded
|
||||
INFO_CONVERT = 10002, //! < metal available
|
||||
INFO_RESEARCH = 10003, //! < search ended
|
||||
INFO_FACTORY = 10004, //! < vehicle manufactured
|
||||
INFO_LABO = 10005, //! < analysis ended
|
||||
INFO_ENERGY = 10006, //! < battery available
|
||||
INFO_NUCLEAR = 10007, //! < nuclear battery available
|
||||
INFO_FINDING = 10008, //! < nuclear battery available
|
||||
INFO_MARKPOWER = 10020, //! < location for station found
|
||||
INFO_MARKURANIUM = 10021, //! < location for derrick found
|
||||
INFO_MARKSTONE = 10022, //! < location for derrick found
|
||||
INFO_MARKKEYa = 10023, //! < location for derrick found
|
||||
INFO_MARKKEYb = 10024, //! < location for derrick found
|
||||
INFO_MARKKEYc = 10025, //! < location for derrick found
|
||||
INFO_MARKKEYd = 10026, //! < location for derrick found
|
||||
INFO_RESEARCHTANK = 10030, //! < research ended
|
||||
INFO_RESEARCHFLY = 10031, //! < research ended
|
||||
INFO_RESEARCHTHUMP = 10032, //! < research ended
|
||||
INFO_RESEARCHCANON = 10033, //! < research ended
|
||||
INFO_RESEARCHTOWER = 10034, //! < research ended
|
||||
INFO_RESEARCHPHAZER = 10035, //! < research ended
|
||||
INFO_RESEARCHSHIELD = 10036, //! < research ended
|
||||
INFO_RESEARCHATOMIC = 10037, //! < research ended
|
||||
INFO_WIN = 10040, //! < win
|
||||
INFO_LOST = 10041, //! < lost
|
||||
INFO_LOSTq = 10042, //! < lost immediately
|
||||
INFO_WRITEOK = 10043, //! < record done
|
||||
INFO_DELETEPATH = 10050, //! < way mark deleted
|
||||
INFO_DELETEMOTHER = 10100, //! < insect killed
|
||||
INFO_DELETEANT = 10101, //! < insect killed
|
||||
INFO_DELETEBEE = 10102, //! < insect killed
|
||||
INFO_DELETEWORM = 10103, //! < insect killed
|
||||
INFO_DELETESPIDER = 10104, //! < insect killed
|
||||
INFO_BEGINSATCOM = 10105, //! < use your SatCom
|
||||
INFO_FIRST = 10000, //! < first information
|
||||
INFO_BUILD = 10001, //! < construction builded
|
||||
INFO_CONVERT = 10002, //! < metal available
|
||||
INFO_RESEARCH = 10003, //! < search ended
|
||||
INFO_FACTORY = 10004, //! < vehicle manufactured
|
||||
INFO_LABO = 10005, //! < analysis ended
|
||||
INFO_ENERGY = 10006, //! < battery available
|
||||
INFO_NUCLEAR = 10007, //! < nuclear battery available
|
||||
INFO_FINDING = 10008, //! < nuclear battery available
|
||||
INFO_MARKPOWER = 10020, //! < location for station found
|
||||
INFO_MARKURANIUM = 10021, //! < location for derrick found
|
||||
INFO_MARKSTONE = 10022, //! < location for derrick found
|
||||
INFO_MARKKEYa = 10023, //! < location for derrick found
|
||||
INFO_MARKKEYb = 10024, //! < location for derrick found
|
||||
INFO_MARKKEYc = 10025, //! < location for derrick found
|
||||
INFO_MARKKEYd = 10026, //! < location for derrick found
|
||||
INFO_RESEARCHTANK = 10030, //! < research ended
|
||||
INFO_RESEARCHFLY = 10031, //! < research ended
|
||||
INFO_RESEARCHTHUMP = 10032, //! < research ended
|
||||
INFO_RESEARCHCANON = 10033, //! < research ended
|
||||
INFO_RESEARCHTOWER = 10034, //! < research ended
|
||||
INFO_RESEARCHPHAZER = 10035, //! < research ended
|
||||
INFO_RESEARCHSHIELD = 10036, //! < research ended
|
||||
INFO_RESEARCHATOMIC = 10037, //! < research ended
|
||||
INFO_WIN = 10040, //! < win
|
||||
INFO_LOST = 10041, //! < lost
|
||||
INFO_LOSTq = 10042, //! < lost immediately
|
||||
INFO_WRITEOK = 10043, //! < record done
|
||||
INFO_DELETEPATH = 10050, //! < way mark deleted
|
||||
INFO_DELETEMOTHER = 10100, //! < insect killed
|
||||
INFO_DELETEANT = 10101, //! < insect killed
|
||||
INFO_DELETEBEE = 10102, //! < insect killed
|
||||
INFO_DELETEWORM = 10103, //! < insect killed
|
||||
INFO_DELETESPIDER = 10104, //! < insect killed
|
||||
INFO_BEGINSATCOM = 10105, //! < use your SatCom
|
||||
|
||||
ERR_MAX //! < number of values
|
||||
};
|
||||
|
@ -177,25 +178,6 @@ enum Language
|
|||
LANGUAGE_RUSSIAN = 4
|
||||
};
|
||||
|
||||
/**
|
||||
* \enum DataDir
|
||||
* \brief Directories in data directory
|
||||
*/
|
||||
enum DataDir
|
||||
{
|
||||
DIR_AI, //! < ai scripts
|
||||
DIR_FONT, //! < fonts
|
||||
DIR_HELP, //! < help files
|
||||
DIR_ICON, //! < icons & images
|
||||
DIR_LEVEL, //! < levels
|
||||
DIR_MODEL, //! < models
|
||||
DIR_MUSIC, //! < music
|
||||
DIR_SOUND, //! < sounds
|
||||
DIR_TEXTURE, //! < textures
|
||||
|
||||
DIR_MAX //! < number of dirs
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* \enum BuildType
|
||||
|
|
|
@ -418,3 +418,44 @@ bool CImage::SavePNG(const std::string& fileName)
|
|||
return true;
|
||||
}
|
||||
|
||||
void CImage::SetDataPixels(void *pixels){
|
||||
|
||||
Uint8* srcPixels = static_cast<Uint8*> (pixels);
|
||||
Uint8* resultPixels = static_cast<Uint8*> (m_data->surface->pixels);
|
||||
|
||||
Uint32 pitch = m_data->surface->pitch;
|
||||
|
||||
for(int line = 0; line < m_data->surface->h; ++line) {
|
||||
Uint32 pos = line * pitch;
|
||||
memcpy(&resultPixels[pos], &srcPixels[pos], pitch);
|
||||
}
|
||||
}
|
||||
|
||||
void CImage::flipVertically(){
|
||||
|
||||
SDL_Surface* result = SDL_CreateRGBSurface( m_data->surface->flags,
|
||||
m_data->surface->w,
|
||||
m_data->surface->h,
|
||||
m_data->surface->format->BytesPerPixel * 8,
|
||||
m_data->surface->format->Rmask,
|
||||
m_data->surface->format->Gmask,
|
||||
m_data->surface->format->Bmask,
|
||||
m_data->surface->format->Amask);
|
||||
|
||||
assert(result != nullptr);
|
||||
|
||||
Uint8* srcPixels = static_cast<Uint8*> (m_data->surface->pixels);
|
||||
Uint8* resultPixels = static_cast<Uint8*> (result->pixels);
|
||||
|
||||
Uint32 pitch = m_data->surface->pitch;
|
||||
Uint32 pxLength = pitch*m_data->surface->h;
|
||||
|
||||
for(int line = 0; line < m_data->surface->h; ++line) {
|
||||
Uint32 pos = line * pitch;
|
||||
memcpy(&resultPixels[pos], &srcPixels[(pxLength-pos)-pitch], pitch);
|
||||
}
|
||||
|
||||
SDL_FreeSurface(m_data->surface);
|
||||
|
||||
m_data->surface = result;
|
||||
}
|
|
@ -109,6 +109,12 @@ public:
|
|||
//! Returns the last error
|
||||
std::string GetError();
|
||||
|
||||
//! Flips the image vertically
|
||||
void flipVertically();
|
||||
|
||||
//! sets/replaces the pixels from the surface
|
||||
void SetDataPixels(void *pixels);
|
||||
|
||||
private:
|
||||
//! Blit to new RGBA surface with given size
|
||||
void BlitToNewRGBASurface(int width, int height);
|
||||
|
|
|
@ -26,7 +26,11 @@ template<> CLogger* CSingleton<CLogger>::m_instance = nullptr;
|
|||
CLogger::CLogger()
|
||||
{
|
||||
m_file = NULL;
|
||||
#if DEV_BUILD
|
||||
m_logLevel = LOG_DEBUG;
|
||||
#else
|
||||
m_logLevel = LOG_INFO;
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -192,18 +192,6 @@ void TimeToAscii(time_t time, char *buffer)
|
|||
year = when.tm_year+1900;
|
||||
if ( year < 2000 ) year -= 1900;
|
||||
else year -= 2000;
|
||||
/* TODO
|
||||
#if _FRENCH
|
||||
sprintf(buffer, "%.2d.%.2d.%.2d %.2d:%.2d",
|
||||
when.tm_mday, when.tm_mon+1, year,
|
||||
when.tm_hour, when.tm_min);
|
||||
#endif
|
||||
#if _GERMAN | _WG
|
||||
sprintf(buffer, "%.2d.%.2d.%.2d %.2d:%.2d",
|
||||
when.tm_mday, when.tm_mon+1, year,
|
||||
when.tm_hour, when.tm_min);
|
||||
#endif
|
||||
#if _ENGLISH*/
|
||||
char format[10];
|
||||
int hour;
|
||||
|
||||
|
@ -222,12 +210,23 @@ void TimeToAscii(time_t time, char *buffer)
|
|||
sprintf(buffer, "%.2d.%.2d.%.2d %.2d:%.2d %s",
|
||||
when.tm_mon+1, when.tm_mday, year,
|
||||
hour, when.tm_min, format);
|
||||
/*#endif
|
||||
#if _POLISH
|
||||
sprintf(buffer, "%.2d.%.2d.%.2d %.2d:%.2d",
|
||||
when.tm_mday, when.tm_mon+1, year,
|
||||
}
|
||||
|
||||
// Converting time to string.
|
||||
|
||||
void TimeToAsciiClean(time_t time, char *buffer)
|
||||
{
|
||||
struct tm when;
|
||||
int year;
|
||||
|
||||
when = *localtime(&time);
|
||||
year = when.tm_year+1900;
|
||||
if ( year < 2000 ) year -= 1900;
|
||||
else year -= 2000;
|
||||
|
||||
sprintf(buffer, "%.2d%.2d%.2d%.2d%.2d",
|
||||
year, when.tm_mon+1, when.tm_mday,
|
||||
when.tm_hour, when.tm_min);
|
||||
#endif*/
|
||||
}
|
||||
|
||||
// Copy a list of numbered files into the temporary folder.
|
||||
|
|
|
@ -28,6 +28,7 @@ extern char GetToUpper(char letter);
|
|||
extern char GetToLower(char letter);
|
||||
|
||||
extern void TimeToAscii(time_t time, char *buffer);
|
||||
extern void TimeToAsciiClean(time_t time, char *buffer);
|
||||
|
||||
extern bool CopyFileListToTemp(char* filename, int* list, int total);
|
||||
extern void AddExt(char* filename, const char* ext);
|
||||
|
|
|
@ -91,7 +91,7 @@ bool CProfile::SetLocalProfileString(std::string section, std::string key, std::
|
|||
}
|
||||
catch (std::exception & e)
|
||||
{
|
||||
GetLogger()->Error("Error on parsing profile: %s\n", e.what());
|
||||
GetLogger()->Info("Error on parsing profile: %s\n", e.what());
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
|
@ -106,7 +106,7 @@ bool CProfile::GetLocalProfileString(std::string section, std::string key, std::
|
|||
}
|
||||
catch (std::exception & e)
|
||||
{
|
||||
GetLogger()->Error("Error on parsing profile: %s\n", e.what());
|
||||
GetLogger()->Info("Error on parsing profile: %s\n", e.what());
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
|
@ -122,7 +122,7 @@ bool CProfile::SetLocalProfileInt(std::string section, std::string key, int valu
|
|||
}
|
||||
catch (std::exception & e)
|
||||
{
|
||||
GetLogger()->Error("Error on parsing profile: %s\n", e.what());
|
||||
GetLogger()->Info("Error on parsing profile: %s\n", e.what());
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
|
@ -137,7 +137,7 @@ bool CProfile::GetLocalProfileInt(std::string section, std::string key, int &val
|
|||
}
|
||||
catch (std::exception & e)
|
||||
{
|
||||
GetLogger()->Error("Error on parsing profile: %s\n", e.what());
|
||||
GetLogger()->Info("Error on parsing profile: %s\n", e.what());
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
|
@ -153,7 +153,7 @@ bool CProfile::SetLocalProfileFloat(std::string section, std::string key, float
|
|||
}
|
||||
catch (std::exception & e)
|
||||
{
|
||||
GetLogger()->Error("Error on parsing profile: %s\n", e.what());
|
||||
GetLogger()->Info("Error on parsing profile: %s\n", e.what());
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
|
@ -168,7 +168,7 @@ bool CProfile::GetLocalProfileFloat(std::string section, std::string key, float
|
|||
}
|
||||
catch (std::exception & e)
|
||||
{
|
||||
GetLogger()->Error("Error on parsing profile: %s\n", e.what());
|
||||
GetLogger()->Info("Error on parsing profile: %s\n", e.what());
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
|
@ -178,7 +178,7 @@ bool CProfile::GetLocalProfileFloat(std::string section, std::string key, float
|
|||
std::vector< std::string > CProfile::GetLocalProfileSection(std::string section, std::string key)
|
||||
{
|
||||
std::vector< std::string > ret_list;
|
||||
boost::regex re(key + "[0-9]*"); //we want to match all key followed my any number
|
||||
boost::regex re(key + "[0-9]*"); //we want to match all key followed by any number
|
||||
|
||||
try
|
||||
{
|
||||
|
@ -192,7 +192,7 @@ std::vector< std::string > CProfile::GetLocalProfileSection(std::string section,
|
|||
}
|
||||
catch (std::exception & e)
|
||||
{
|
||||
GetLogger()->Error("Error on parsing profile: %s\n", e.what());
|
||||
GetLogger()->Info("Error on parsing profile: %s\n", e.what());
|
||||
}
|
||||
|
||||
return ret_list;
|
||||
|
|
|
@ -56,14 +56,13 @@ void InitializeRestext()
|
|||
stringsText[RT_KEY_OR] = " or ";
|
||||
|
||||
stringsText[RT_TITLE_BASE] = "COLOBOT";
|
||||
stringsText[RT_TITLE_INIT] = "COLOBOT";
|
||||
stringsText[RT_TITLE_INIT] = "COLOBOT: Gold Edition";
|
||||
stringsText[RT_TITLE_TRAINER] = "Programming exercises";
|
||||
stringsText[RT_TITLE_DEFI] = "Challenges";
|
||||
stringsText[RT_TITLE_MISSION] = "Missions";
|
||||
stringsText[RT_TITLE_FREE] = "Free game";
|
||||
stringsText[RT_TITLE_TEEN] = "Free game";
|
||||
stringsText[RT_TITLE_USER] = "User levels";
|
||||
stringsText[RT_TITLE_PROTO] = "Prototypes";
|
||||
stringsText[RT_TITLE_SETUP] = "Options";
|
||||
stringsText[RT_TITLE_NAME] = "Player's name";
|
||||
stringsText[RT_TITLE_PERSO] = "Customize your appearance";
|
||||
|
@ -75,14 +74,12 @@ void InitializeRestext()
|
|||
stringsText[RT_PLAY_CHAPm] = " Planets:";
|
||||
stringsText[RT_PLAY_CHAPf] = " Planets:";
|
||||
stringsText[RT_PLAY_CHAPu] = " User levels:";
|
||||
stringsText[RT_PLAY_CHAPp] = " Planets:";
|
||||
stringsText[RT_PLAY_CHAPte] = " Chapters:";
|
||||
stringsText[RT_PLAY_LISTt] = " Exercises in the chapter:";
|
||||
stringsText[RT_PLAY_LISTd] = " Challenges in the chapter:";
|
||||
stringsText[RT_PLAY_LISTm] = " Missions on this planet:";
|
||||
stringsText[RT_PLAY_LISTf] = " Free game on this planet:";
|
||||
stringsText[RT_PLAY_LISTu] = " Missions on this level:";
|
||||
stringsText[RT_PLAY_LISTp] = " Prototypes on this planet:";
|
||||
stringsText[RT_PLAY_LISTk] = " Free game on this chapter:";
|
||||
stringsText[RT_PLAY_RESUME] = " Summary:";
|
||||
|
||||
|
@ -155,8 +152,7 @@ void InitializeRestext()
|
|||
stringsEvent[EVENT_INTERFACE_FREE] = "Free game\\Free game without a specific goal";
|
||||
stringsEvent[EVENT_INTERFACE_TEEN] = "Free game\\Free game without a specific goal";
|
||||
stringsEvent[EVENT_INTERFACE_USER] = "User\\User levels";
|
||||
stringsEvent[EVENT_INTERFACE_PROTO] = "Proto\\Prototypes under development";
|
||||
stringsEvent[EVENT_INTERFACE_NAME] = "New player\\Choose player's name";
|
||||
stringsEvent[EVENT_INTERFACE_NAME] = "Change player\\Change player";
|
||||
stringsEvent[EVENT_INTERFACE_SETUP] = "Options\\Preferences";
|
||||
stringsEvent[EVENT_INTERFACE_AGAIN] = "Restart\\Restart the mission from the beginning";
|
||||
stringsEvent[EVENT_INTERFACE_WRITE] = "Save\\Save the current mission ";
|
||||
|
@ -776,9 +772,7 @@ static KeyDesc keyTable[22] =
|
|||
|
||||
bool SearchKey(const char *cmd, InputSlot &key)
|
||||
{
|
||||
int i;
|
||||
|
||||
for ( i=0 ; i<22 ; i++ )
|
||||
for (int i = 0; i < 22 ;i++)
|
||||
{
|
||||
if ( strstr(cmd, keyTable[i].name) == cmd )
|
||||
{
|
||||
|
@ -791,14 +785,11 @@ bool SearchKey(const char *cmd, InputSlot &key)
|
|||
|
||||
// Replaces the commands "\key name;" in a text.
|
||||
|
||||
static void PutKeyName(char* dst, const char* src)
|
||||
static void PutKeyName(std::string& dst, const char* src)
|
||||
{
|
||||
InputSlot key;
|
||||
char name[50];
|
||||
int s, d, n;
|
||||
unsigned int res;
|
||||
dst.clear();
|
||||
|
||||
s = d = 0;
|
||||
int s = 0;
|
||||
while ( src[s] != 0 )
|
||||
{
|
||||
if ( src[s+0] == '\\' &&
|
||||
|
@ -807,18 +798,16 @@ static void PutKeyName(char* dst, const char* src)
|
|||
src[s+3] == 'y' &&
|
||||
src[s+4] == ' ' )
|
||||
{
|
||||
InputSlot key;
|
||||
if ( SearchKey(src+s+5, key) )
|
||||
{
|
||||
res = CRobotMain::GetInstancePointer()->GetInputBinding(key).primary;
|
||||
unsigned int res = CRobotMain::GetInstancePointer()->GetInputBinding(key).primary;
|
||||
if (res != KEY_INVALID)
|
||||
{
|
||||
if ( GetResource(RES_KEY, res, name) )
|
||||
std::string keyName;
|
||||
if ( GetResource(RES_KEY, res, keyName) )
|
||||
{
|
||||
n = 0;
|
||||
while ( name[n] != 0 )
|
||||
{
|
||||
dst[d++] = name[n++];
|
||||
}
|
||||
dst.append(keyName);
|
||||
while ( src[s++] != ';' );
|
||||
continue;
|
||||
}
|
||||
|
@ -826,9 +815,8 @@ static void PutKeyName(char* dst, const char* src)
|
|||
}
|
||||
}
|
||||
|
||||
dst[d++] = src[s++];
|
||||
dst.append(1, src[s++]);
|
||||
}
|
||||
dst[d++] = 0;
|
||||
}
|
||||
|
||||
// Returns the translated text of a resource that needs key substitution
|
||||
|
@ -905,13 +893,13 @@ static const char* GetResourceBase(ResType type, int num)
|
|||
|
||||
// Returns the text of a resource.
|
||||
|
||||
bool GetResource(ResType type, int num, char* text)
|
||||
bool GetResource(ResType type, int num, std::string& text)
|
||||
{
|
||||
const char *tmpl = GetResourceBase(type, num);
|
||||
|
||||
if (!tmpl)
|
||||
{
|
||||
text[0] = 0;
|
||||
text.clear();
|
||||
return false;
|
||||
}
|
||||
|
||||
|
|
|
@ -66,7 +66,6 @@ enum ResTextType
|
|||
RT_TITLE_DEFI = 43,
|
||||
RT_TITLE_MISSION = 44,
|
||||
RT_TITLE_FREE = 45,
|
||||
RT_TITLE_PROTO = 46,
|
||||
RT_TITLE_SETUP = 47,
|
||||
RT_TITLE_NAME = 48,
|
||||
RT_TITLE_PERSO = 49,
|
||||
|
@ -79,12 +78,10 @@ enum ResTextType
|
|||
RT_PLAY_CHAPd = 61,
|
||||
RT_PLAY_CHAPm = 62,
|
||||
RT_PLAY_CHAPf = 63,
|
||||
RT_PLAY_CHAPp = 64,
|
||||
RT_PLAY_LISTt = 65,
|
||||
RT_PLAY_LISTd = 66,
|
||||
RT_PLAY_LISTm = 67,
|
||||
RT_PLAY_LISTf = 68,
|
||||
RT_PLAY_LISTp = 69,
|
||||
RT_PLAY_RESUME = 70,
|
||||
RT_PLAY_CHAPu = 71,
|
||||
RT_PLAY_LISTu = 72,
|
||||
|
@ -157,5 +154,5 @@ void InitializeRestext();
|
|||
|
||||
void SetGlobalGamerName(std::string name);
|
||||
bool SearchKey(const char *cmd, InputSlot& slot);
|
||||
bool GetResource(ResType type, int num, char* text);
|
||||
bool GetResource(ResType type, int num, std::string& text);
|
||||
|
||||
|
|
|
@ -17,6 +17,41 @@
|
|||
|
||||
#include "common/stringutils.h"
|
||||
|
||||
#include <cstdarg>
|
||||
#include <cstdio>
|
||||
#include <vector>
|
||||
|
||||
|
||||
static std::string VFormat(const char *fmt, va_list ap)
|
||||
{
|
||||
size_t size = 1024;
|
||||
char stackbuf[1024];
|
||||
std::vector<char> dynamicbuf;
|
||||
char *buf = &stackbuf[0];
|
||||
|
||||
while (1)
|
||||
{
|
||||
int needed = vsnprintf (buf, size, fmt, ap);
|
||||
|
||||
if (needed <= static_cast<int>(size) && needed >= 0)
|
||||
{
|
||||
return std::string(buf, static_cast<size_t>(needed));
|
||||
}
|
||||
|
||||
size = (needed > 0) ? (needed+1) : (size*2);
|
||||
dynamicbuf.resize(size);
|
||||
buf = &dynamicbuf[0];
|
||||
}
|
||||
}
|
||||
|
||||
std::string StrUtils::Format(const char *fmt, ...)
|
||||
{
|
||||
va_list ap;
|
||||
va_start(ap, fmt);
|
||||
std::string buf = VFormat(fmt, ap);
|
||||
va_end(ap);
|
||||
return buf;
|
||||
}
|
||||
|
||||
std::string StrUtils::Replace(const std::string &str, const std::string &oldStr, const std::string &newStr)
|
||||
{
|
||||
|
|
|
@ -31,11 +31,11 @@ namespace StrUtils {
|
|||
/** If given, \a ok is set to true/false on success/failure.
|
||||
Warning: To avoid unnecessary problems, *always* give full template qualifier e.g. ToString\<int\> */
|
||||
template<class T>
|
||||
std::string ToString(T value, bool *ok = NULL)
|
||||
std::string ToString(T value, bool *ok = nullptr)
|
||||
{
|
||||
std::ostringstream s;
|
||||
s << value;
|
||||
if (ok != NULL)
|
||||
if (ok != nullptr)
|
||||
*ok = !s.fail();
|
||||
return s.str();
|
||||
}
|
||||
|
@ -44,17 +44,20 @@ std::string ToString(T value, bool *ok = NULL)
|
|||
/** If given, \a ok is set to true/false on success/failure.
|
||||
Warning: To avoid unnecessary problems, *always* give full template qualifier e.g. FromString\<int\> */
|
||||
template<class T>
|
||||
T FromString(const std::string &str, bool *ok = NULL)
|
||||
T FromString(const std::string &str, bool *ok = nullptr)
|
||||
{
|
||||
std::istringstream s;
|
||||
s.str(str);
|
||||
T value;
|
||||
s >> value;
|
||||
if (ok != NULL)
|
||||
if (ok != nullptr)
|
||||
*ok = !s.fail();
|
||||
return value;
|
||||
}
|
||||
|
||||
//! Replacement for sprintf()
|
||||
std::string Format(const char *fmt, ...);
|
||||
|
||||
//! Returns a string with every occurence of \a oldStr in \a str replaced to \a newStr
|
||||
std::string Replace(const std::string &str, const std::string &oldStr, const std::string &newStr);
|
||||
|
||||
|
|
|
@ -400,6 +400,9 @@ public:
|
|||
virtual void SetFillMode(FillMode mode) = 0;
|
||||
//! Returns the current fill mode
|
||||
virtual FillMode GetFillMode() = 0;
|
||||
|
||||
//! Returns the pixels of the entire screen
|
||||
virtual void* GetFrameBufferPixels()const = 0;
|
||||
};
|
||||
|
||||
|
||||
|
|
|
@ -82,7 +82,9 @@ struct VertexCol
|
|||
Math::Vector coord;
|
||||
Color color;
|
||||
|
||||
explicit VertexCol(Math::Vector aCoord = Math::Vector(),
|
||||
VertexCol() = default;
|
||||
|
||||
explicit VertexCol(Math::Vector aCoord,
|
||||
Color aColor = Color())
|
||||
: coord(aCoord), color(aColor) {}
|
||||
|
||||
|
|
|
@ -593,9 +593,6 @@ void CCamera::EffectFrame(const Event &event)
|
|||
dist = Math::Norm((dist - 100.f) / 100.0f);
|
||||
|
||||
force *= 1.0f-dist;
|
||||
#if _TEEN
|
||||
force *= 2.0f;
|
||||
#endif
|
||||
m_effectOffset *= force;
|
||||
|
||||
if (m_effectProgress >= 1.0f)
|
||||
|
|
|
@ -19,6 +19,7 @@
|
|||
#include "graphics/engine/engine.h"
|
||||
|
||||
#include "app/app.h"
|
||||
#include "app/gamedata.h"
|
||||
|
||||
#include "common/image.h"
|
||||
#include "common/key.h"
|
||||
|
@ -63,6 +64,7 @@ CEngine::CEngine(CApplication *app)
|
|||
m_planet = nullptr;
|
||||
m_sound = nullptr;
|
||||
m_terrain = nullptr;
|
||||
m_pause = nullptr;
|
||||
|
||||
m_showStats = false;
|
||||
|
||||
|
@ -80,7 +82,6 @@ CEngine::CEngine(CApplication *app)
|
|||
m_fogStart[1] = 0.75f;
|
||||
m_waterAddColor = Color(0.0f, 0.0f, 0.0f, 0.0f);
|
||||
|
||||
m_pause = false;
|
||||
m_render = true;
|
||||
m_movieLock = false;
|
||||
m_shadowVisible = true;
|
||||
|
@ -179,6 +180,7 @@ CEngine::~CEngine()
|
|||
m_lightning = nullptr;
|
||||
m_planet = nullptr;
|
||||
m_terrain = nullptr;
|
||||
m_pause = nullptr;
|
||||
|
||||
GetSystemUtils()->DestroyTimeStamp(m_lastFrameTime);
|
||||
m_lastFrameTime = nullptr;
|
||||
|
@ -252,6 +254,7 @@ bool CEngine::Create()
|
|||
m_cloud = new CCloud(this);
|
||||
m_lightning = new CLightning(this);
|
||||
m_planet = new CPlanet(this);
|
||||
m_pause = new CPauseManager();
|
||||
|
||||
m_lightMan->SetDevice(m_device);
|
||||
m_particle->SetDevice(m_device);
|
||||
|
@ -421,19 +424,25 @@ void CEngine::FrameUpdate()
|
|||
|
||||
bool CEngine::WriteScreenShot(const std::string& fileName, int width, int height)
|
||||
{
|
||||
// TODO write screenshot: not very important for now
|
||||
GetLogger()->Trace("CEngine::WriteSceenShot(): stub!\n");
|
||||
return true;
|
||||
}
|
||||
void *pixels = m_device->GetFrameBufferPixels();
|
||||
CImage img({width,height});
|
||||
|
||||
void CEngine::SetPause(bool pause)
|
||||
{
|
||||
m_pause = pause;
|
||||
img.SetDataPixels(pixels);
|
||||
img.flipVertically();
|
||||
|
||||
if ( img.SavePNG(fileName.c_str()) ){
|
||||
GetLogger()->Info("Save SceenShot Saved Successfully!\n");
|
||||
return true;
|
||||
}
|
||||
else{
|
||||
GetLogger()->Error("%s!\n",img.GetError().c_str());
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
bool CEngine::GetPause()
|
||||
{
|
||||
return m_pause;
|
||||
return m_pause->GetPause();
|
||||
}
|
||||
|
||||
void CEngine::SetMovieLock(bool lock)
|
||||
|
@ -2249,33 +2258,12 @@ Texture CEngine::CreateTexture(const std::string& texName, const TextureCreatePa
|
|||
|
||||
if (image == nullptr)
|
||||
{
|
||||
bool loadedFromTexPack = false;
|
||||
|
||||
std::string texPackName = m_app->GetTexPackFilePath(texName);
|
||||
if (! texPackName.empty())
|
||||
if (! img.Load(CGameData::GetInstancePointer()->GetFilePath(DIR_TEXTURE, texName)))
|
||||
{
|
||||
if (img.Load(texPackName))
|
||||
{
|
||||
loadedFromTexPack = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
std::string error = img.GetError();
|
||||
GetLogger()->Error("Couldn't load texture '%s' from texpack: %s, blacklisting the texpack path\n",
|
||||
texName.c_str(), error.c_str());
|
||||
m_texBlacklist.insert(texPackName);
|
||||
}
|
||||
}
|
||||
|
||||
if (!loadedFromTexPack)
|
||||
{
|
||||
if (! img.Load(m_app->GetDataFilePath(DIR_TEXTURE, texName)))
|
||||
{
|
||||
std::string error = img.GetError();
|
||||
GetLogger()->Error("Couldn't load texture '%s': %s, blacklisting\n", texName.c_str(), error.c_str());
|
||||
m_texBlacklist.insert(texName);
|
||||
return Texture(); // invalid texture
|
||||
}
|
||||
std::string error = img.GetError();
|
||||
GetLogger()->Error("Couldn't load texture '%s': %s, blacklisting\n", texName.c_str(), error.c_str());
|
||||
m_texBlacklist.insert(texName);
|
||||
return Texture(); // invalid texture
|
||||
}
|
||||
|
||||
image = &img;
|
||||
|
@ -2438,7 +2426,7 @@ bool CEngine::ChangeTextureColor(const std::string& texName,
|
|||
|
||||
|
||||
CImage img;
|
||||
if (! img.Load(m_app->GetDataFilePath(DIR_TEXTURE, texName)))
|
||||
if (! img.Load(CGameData::GetInstancePointer()->GetFilePath(DIR_TEXTURE, texName)))
|
||||
{
|
||||
std::string error = img.GetError();
|
||||
GetLogger()->Error("Couldn't load texture '%s': %s, blacklisting\n", texName.c_str(), error.c_str());
|
||||
|
|
|
@ -24,6 +24,7 @@
|
|||
|
||||
|
||||
#include "app/system.h"
|
||||
#include "app/pausemanager.h"
|
||||
|
||||
#include "common/event.h"
|
||||
#include "common/singleton.h"
|
||||
|
@ -734,11 +735,8 @@ public:
|
|||
bool WriteScreenShot(const std::string& fileName, int width, int height);
|
||||
|
||||
|
||||
//@{
|
||||
//! Management of game pause mode
|
||||
void SetPause(bool pause);
|
||||
//! Get pause mode
|
||||
TEST_VIRTUAL bool GetPause();
|
||||
//@}
|
||||
|
||||
//@{
|
||||
//! Management of lock for the duration of movie sequence
|
||||
|
@ -1288,6 +1286,7 @@ protected:
|
|||
CLightning* m_lightning;
|
||||
CPlanet* m_planet;
|
||||
CTerrain* m_terrain;
|
||||
CPauseManager* m_pause;
|
||||
|
||||
//! Last encountered error
|
||||
std::string m_error;
|
||||
|
@ -1300,9 +1299,6 @@ protected:
|
|||
//! Whether to show stats (FPS, etc)
|
||||
bool m_showStats;
|
||||
std::string m_fpsText;
|
||||
|
||||
//! Pause mode
|
||||
bool m_pause;
|
||||
//! Rendering enabled?
|
||||
bool m_render;
|
||||
//! Lock for duration of movie?
|
||||
|
|
|
@ -1,6 +1,24 @@
|
|||
// * This file is part of the COLOBOT source code
|
||||
// * Copyright (C) 2001-2008, Daniel ROUX & EPSITEC SA, www.epsitec.ch
|
||||
// * Copyright (C) 2012-2014, 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/.
|
||||
|
||||
#include "graphics/engine/modelmanager.h"
|
||||
|
||||
#include "app/app.h"
|
||||
#include "app/gamedata.h"
|
||||
|
||||
#include "common/logger.h"
|
||||
|
||||
|
@ -30,7 +48,7 @@ bool CModelManager::LoadModel(const std::string& fileName, bool mirrored)
|
|||
if (CApplication::GetInstance().IsDebugModeActive(DEBUG_MODELS))
|
||||
modelFile.SetPrintDebugInfo(true);
|
||||
|
||||
std::string filePath = CApplication::GetInstance().GetDataFilePath(DIR_MODEL, fileName);
|
||||
std::string filePath = CGameData::GetInstancePointer()->GetFilePath(DIR_MODEL, fileName);
|
||||
|
||||
if (!modelFile.ReadModel(filePath))
|
||||
{
|
||||
|
|
|
@ -1,3 +1,20 @@
|
|||
// * This file is part of the COLOBOT source code
|
||||
// * Copyright (C) 2001-2008, Daniel ROUX & EPSITEC SA, www.epsitec.ch
|
||||
// * Copyright (C) 2012-2014, 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/.
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "common/singleton.h"
|
||||
|
|
|
@ -19,6 +19,7 @@
|
|||
#include "graphics/engine/terrain.h"
|
||||
|
||||
#include "app/app.h"
|
||||
#include "app/gamedata.h"
|
||||
|
||||
#include "common/image.h"
|
||||
#include "common/logger.h"
|
||||
|
@ -189,7 +190,7 @@ void CTerrain::AddMaterial(int id, const std::string& texName, const Math::Point
|
|||
bool CTerrain::LoadResources(const std::string& fileName)
|
||||
{
|
||||
CImage img;
|
||||
std::string path = CApplication::GetInstance().GetDataFilePath(DIR_TEXTURE, fileName);
|
||||
std::string path = CGameData::GetInstancePointer()->GetFilePath(DIR_TEXTURE, fileName);
|
||||
if (! img.Load(path))
|
||||
{
|
||||
GetLogger()->Error("Cannot load resource file: '%s'\n", path.c_str());
|
||||
|
@ -286,7 +287,7 @@ bool CTerrain::LoadRelief(const std::string &fileName, float scaleRelief,
|
|||
m_scaleRelief = scaleRelief;
|
||||
|
||||
CImage img;
|
||||
std::string path = CApplication::GetInstance().GetDataFilePath(DIR_TEXTURE, fileName);
|
||||
std::string path = CGameData::GetInstancePointer()->GetFilePath(DIR_TEXTURE, fileName);
|
||||
if (! img.Load(path))
|
||||
{
|
||||
GetLogger()->Error("Could not load relief file: '%s'!\n", path.c_str());
|
||||
|
@ -331,6 +332,66 @@ bool CTerrain::LoadRelief(const std::string &fileName, float scaleRelief,
|
|||
return true;
|
||||
}
|
||||
|
||||
bool CTerrain::RandomizeRelief()
|
||||
{
|
||||
// Perlin noise
|
||||
// Based on Python implementation by Marek Rogalski (mafik)
|
||||
// http://amt2014.pl/archiwum/perlin.py
|
||||
|
||||
int size = (m_mosaicCount*m_brickCount)+1;
|
||||
const int ilosc_oktaw = 6;
|
||||
|
||||
float* oktawy[ilosc_oktaw];
|
||||
for(int i=0; i<ilosc_oktaw; i++)
|
||||
{
|
||||
int pxCount = static_cast<int>(pow(2, (i+1)*2));
|
||||
oktawy[i] = new float[pxCount];
|
||||
for(int j=0; j<pxCount; j++)
|
||||
{
|
||||
oktawy[i][j] = Math::Rand();
|
||||
}
|
||||
}
|
||||
|
||||
for(int y2=0; y2 < size; y2++)
|
||||
{
|
||||
float y = static_cast<float>(y2) / size;
|
||||
for(int x2=0; x2 < size; x2++)
|
||||
{
|
||||
float x = static_cast<float>(x2) / size;
|
||||
|
||||
float wart = 0;
|
||||
for(int i=0; i<ilosc_oktaw; i++)
|
||||
{
|
||||
int rozmiar_oktawy = sqrt(static_cast<int>(pow(2, (i+1)*2)));
|
||||
double xi, yi, a, b;
|
||||
a = modf(x * (rozmiar_oktawy-1), &xi);
|
||||
b = modf(y * (rozmiar_oktawy-1), &yi);
|
||||
/*int xi = floor(x * (rozmiar_oktawy-1));
|
||||
int yi = floor(y * (rozmiar_oktawy-1));
|
||||
float a = (x * (rozmiar_oktawy-1)) - xi;
|
||||
float b = (y * (rozmiar_oktawy-1)) - yi;*/
|
||||
//CLogger::GetInstancePointer()->Error("%f %f %f %f\n", xi, yi, a, b);
|
||||
|
||||
float lg = oktawy[i][static_cast<int>(yi * rozmiar_oktawy + xi)];
|
||||
float pg = oktawy[i][static_cast<int>(yi * rozmiar_oktawy + xi + 1)];
|
||||
float ld = oktawy[i][static_cast<int>((yi+1) * rozmiar_oktawy + xi)];
|
||||
float pd = oktawy[i][static_cast<int>((yi+1) * rozmiar_oktawy + xi + 1)];
|
||||
//CLogger::GetInstancePointer()->Error("%f %f %f %f\n", lg, pg, ld, pd);
|
||||
|
||||
float g = pg * a + lg * (1-a);
|
||||
float d = pd * a + ld * (1-a);
|
||||
float res = d * b + g * (1-b);
|
||||
wart += res;
|
||||
}
|
||||
|
||||
wart /= ilosc_oktaw;
|
||||
|
||||
m_relief[x2+y2*size] = wart * 255.0f;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
bool CTerrain::AddReliefPoint(Math::Vector pos, float scaleRelief)
|
||||
{
|
||||
float dim = (m_mosaicCount*m_brickCount*m_brickSize)/2.0f;
|
||||
|
|
|
@ -212,7 +212,7 @@ struct FlyingLimit
|
|||
* where relief data is specifically adjusted to level space to allow
|
||||
* construction of buildings.
|
||||
*
|
||||
* Undergound resources can be supplied by loading them from image like relief data.
|
||||
* Underground resources can be supplied by loading them from image like relief data.
|
||||
*
|
||||
* Terrain also specifies flying limits for player: one global level and possible
|
||||
* additional spherical restrictions.
|
||||
|
@ -243,6 +243,8 @@ public:
|
|||
void FlushRelief();
|
||||
//! Load relief from image
|
||||
bool LoadRelief(const std::string& fileName, float scaleRelief, bool adjustBorder);
|
||||
//! Load ramdomized relief
|
||||
bool RandomizeRelief();
|
||||
|
||||
//! Load resources from image
|
||||
bool LoadResources(const std::string& fileName);
|
||||
|
|
|
@ -19,6 +19,7 @@
|
|||
#include "graphics/engine/text.h"
|
||||
|
||||
#include "app/app.h"
|
||||
#include "app/gamedata.h"
|
||||
|
||||
#include "common/image.h"
|
||||
#include "common/logger.h"
|
||||
|
@ -333,7 +334,7 @@ float CText::GetStringWidth(std::string text, FontType font, float size)
|
|||
// Skip special chars
|
||||
for (char& c : text)
|
||||
{
|
||||
if (c < 32)
|
||||
if (c < 32 && c >= 0)
|
||||
c = ':';
|
||||
}
|
||||
|
||||
|
@ -351,7 +352,7 @@ float CText::GetCharWidth(UTF8Char ch, FontType font, float size, float offset)
|
|||
if (font == FONT_BUTTON) return 0.0f;
|
||||
|
||||
int width = 1;
|
||||
if (ch.c1 < 32)
|
||||
if (ch.c1 < 32 && ch.c1 >= 0)
|
||||
{
|
||||
if (ch.c1 == '\t')
|
||||
width = m_tabSize;
|
||||
|
@ -646,7 +647,13 @@ void CText::DrawString(const std::string &text, std::vector<FontMetaChar>::itera
|
|||
|
||||
DrawCharAndAdjustPos(ch, font, size, pos, color);
|
||||
|
||||
fmtIndex++;
|
||||
// increment fmtIndex for each byte in multibyte character
|
||||
if ( ch.c1 != 0 )
|
||||
fmtIndex++;
|
||||
if ( ch.c2 != 0 )
|
||||
fmtIndex++;
|
||||
if ( ch.c3 != 0 )
|
||||
fmtIndex++;
|
||||
}
|
||||
|
||||
if (eol != 0)
|
||||
|
@ -859,7 +866,7 @@ CachedFont* CText::GetOrOpenFont(FontType font, float size)
|
|||
return m_lastCachedFont;
|
||||
}
|
||||
|
||||
std::string path = CApplication::GetInstance().GetDataFilePath(DIR_FONT, mf->fileName);
|
||||
std::string path = CGameData::GetInstancePointer()->GetFilePath(DIR_FONT, mf->fileName);
|
||||
|
||||
m_lastCachedFont = new CachedFont();
|
||||
m_lastCachedFont->font = TTF_OpenFont(path.c_str(), pointSize);
|
||||
|
|
|
@ -1791,6 +1791,19 @@ FillMode CGLDevice::GetFillMode()
|
|||
return FILL_POINT;
|
||||
}
|
||||
|
||||
void* CGLDevice::GetFrameBufferPixels()const{
|
||||
|
||||
GLubyte* pixels = new GLubyte [4 * m_config.size.x * m_config.size.y];
|
||||
|
||||
glReadPixels(0, 0, m_config.size.x, m_config.size.y, GL_RGBA, GL_UNSIGNED_BYTE, pixels);
|
||||
|
||||
unsigned int* p = static_cast<unsigned int*> ( static_cast<void*>(pixels) );
|
||||
|
||||
for (int i = 0; i < m_config.size.x * m_config.size.y; ++i)
|
||||
p[i] |= 0xFF000000;
|
||||
|
||||
return static_cast<void*>(p);
|
||||
}
|
||||
|
||||
} // namespace Gfx
|
||||
|
||||
|
|
|
@ -188,6 +188,8 @@ public:
|
|||
virtual void SetFillMode(FillMode mode) ;
|
||||
virtual FillMode GetFillMode();
|
||||
|
||||
virtual void* GetFrameBufferPixels()const;
|
||||
|
||||
private:
|
||||
//! Updates internal modelview matrix
|
||||
void UpdateModelviewMatrix();
|
||||
|
|
|
@ -175,7 +175,6 @@ bool CAuto::CreateInterface(bool bSelect)
|
|||
Ui::CWindow* pw;
|
||||
Math::Point pos, dim, ddim;
|
||||
float ox, oy, sx, sy;
|
||||
char name[100];
|
||||
|
||||
pw = static_cast<Ui::CWindow*>(m_interface->SearchControl(EVENT_WINDOW0));
|
||||
if ( pw != nullptr )
|
||||
|
@ -195,6 +194,7 @@ bool CAuto::CreateInterface(bool bSelect)
|
|||
pw = static_cast<Ui::CWindow*>(m_interface->SearchControl(EVENT_WINDOW0));
|
||||
if ( pw == 0 ) return false;
|
||||
|
||||
std::string name;
|
||||
m_object->GetTooltipName(name);
|
||||
pos.x = 0.0f;
|
||||
pos.y = 64.0f/480.0f;
|
||||
|
|
|
@ -121,7 +121,6 @@ bool CAutoBase::EventProcess(const Event &event)
|
|||
CObject* pObj;
|
||||
Math::Vector pos, speed, vibCir, iPos;
|
||||
Math::Point dim, p;
|
||||
Error err;
|
||||
float angle, dist, time, h, len, vSpeed;
|
||||
int i, max;
|
||||
|
||||
|
@ -313,50 +312,7 @@ begin:
|
|||
|
||||
if ( event.type == EVENT_OBJECT_BTAKEOFF )
|
||||
{
|
||||
err = CheckCloseDoor();
|
||||
if ( err != ERR_OK )
|
||||
{
|
||||
m_main->DisplayError(err, m_object);
|
||||
return false;
|
||||
}
|
||||
|
||||
err = m_main->CheckEndMission(false);
|
||||
if ( err != ERR_OK )
|
||||
{
|
||||
m_main->DisplayError(err, m_object);
|
||||
return false;
|
||||
}
|
||||
|
||||
FreezeCargo(true); // freeze whole cargo
|
||||
m_main->SetMovieLock(true); // blocks everything until the end
|
||||
m_main->DeselectAll();
|
||||
|
||||
newEvent.type = EVENT_UPDINTERFACE;
|
||||
m_eventQueue->AddEvent(newEvent);
|
||||
|
||||
m_camera->SetType(Gfx::CAM_TYPE_SCRIPT);
|
||||
|
||||
pos = m_pos;
|
||||
pos.x -= 110.0f;
|
||||
m_terrain->AdjustToFloor(pos);
|
||||
pos.y += 10.0f;
|
||||
m_camera->SetScriptEye(pos);
|
||||
m_posSound = pos;
|
||||
|
||||
pos = m_object->GetPosition(0);
|
||||
pos.y += 50.0f;
|
||||
m_camera->SetScriptLookat(pos);
|
||||
|
||||
m_engine->SetFocus(1.0f);
|
||||
|
||||
m_soundChannel = m_sound->Play(SOUND_MANIP, m_posSound, 0.3f, 1.5f, true);
|
||||
m_sound->AddEnvelope(m_soundChannel, 0.3f, 1.5f, BASE_DOOR_TIME2, SOPER_CONTINUE);
|
||||
m_sound->AddEnvelope(m_soundChannel, 0.0f, 1.5f, 0.5f, SOPER_STOP);
|
||||
|
||||
m_phase = ABP_CLOSE2;
|
||||
m_progress = 0.0f;
|
||||
m_speed = 1.0f/BASE_DOOR_TIME2;
|
||||
return true;
|
||||
return TakeOff(true);
|
||||
}
|
||||
|
||||
if ( event.type != EVENT_FRAME ) return true;
|
||||
|
@ -1400,11 +1356,7 @@ void CAutoBase::BeginTransit()
|
|||
}
|
||||
else
|
||||
{
|
||||
#if _DEMO
|
||||
m_bgBack = "back46b.png"; // paintings
|
||||
#else
|
||||
m_bgBack = "back46.png"; // paintings
|
||||
#endif
|
||||
}
|
||||
|
||||
m_engine->SetFogStart(0.9f); // hardly any fog
|
||||
|
@ -1444,3 +1396,56 @@ void CAutoBase::EndTransit()
|
|||
m_main->StartMusic();
|
||||
}
|
||||
|
||||
Error CAutoBase::TakeOff(bool printMsg)
|
||||
{
|
||||
|
||||
Event newEvent;
|
||||
Math::Vector pos;
|
||||
Error err;
|
||||
|
||||
err = CheckCloseDoor();
|
||||
if ( err != ERR_OK )
|
||||
{
|
||||
if(printMsg) m_main->DisplayError(err, m_object);
|
||||
return err;
|
||||
}
|
||||
|
||||
err = m_main->CheckEndMission(false);
|
||||
if ( err != ERR_OK )
|
||||
{
|
||||
if(printMsg) m_main->DisplayError(err, m_object);
|
||||
return err;
|
||||
}
|
||||
|
||||
FreezeCargo(true); // freeze whole cargo
|
||||
m_main->SetMovieLock(true); // blocks everything until the end
|
||||
m_main->DeselectAll();
|
||||
|
||||
newEvent.type = EVENT_UPDINTERFACE;
|
||||
m_eventQueue->AddEvent(newEvent);
|
||||
|
||||
m_camera->SetType(Gfx::CAM_TYPE_SCRIPT);
|
||||
|
||||
pos = m_pos;
|
||||
pos.x -= 110.0f;
|
||||
m_terrain->AdjustToFloor(pos);
|
||||
pos.y += 10.0f;
|
||||
m_camera->SetScriptEye(pos);
|
||||
m_posSound = pos;
|
||||
|
||||
pos = m_object->GetPosition(0);
|
||||
pos.y += 50.0f;
|
||||
m_camera->SetScriptLookat(pos);
|
||||
|
||||
m_engine->SetFocus(1.0f);
|
||||
|
||||
m_soundChannel = m_sound->Play(SOUND_MANIP, m_posSound, 0.3f, 1.5f, true);
|
||||
m_sound->AddEnvelope(m_soundChannel, 0.3f, 1.5f, BASE_DOOR_TIME2, SOPER_CONTINUE);
|
||||
m_sound->AddEnvelope(m_soundChannel, 0.0f, 1.5f, 0.5f, SOPER_STOP);
|
||||
|
||||
m_phase = ABP_CLOSE2;
|
||||
m_progress = 0.0f;
|
||||
m_speed = 1.0f/BASE_DOOR_TIME2;
|
||||
return ERR_OK;
|
||||
}
|
||||
|
||||
|
|
|
@ -77,6 +77,8 @@ public:
|
|||
Error GetError();
|
||||
|
||||
bool CreateInterface(bool bSelect);
|
||||
|
||||
Error TakeOff(bool printMsg);
|
||||
|
||||
protected:
|
||||
void UpdateInterface();
|
||||
|
|
|
@ -1238,7 +1238,6 @@ bool CBrain::CreateInterface(bool bSelect)
|
|||
Ui::CLabel* pl;
|
||||
Math::Point pos, dim, ddim;
|
||||
float ox, oy, sx, sy;
|
||||
char name[100];
|
||||
|
||||
pw = static_cast< Ui::CWindow* >(m_interface->SearchControl(EVENT_WINDOW0));
|
||||
if ( pw != 0 )
|
||||
|
@ -1259,13 +1258,14 @@ bool CBrain::CreateInterface(bool bSelect)
|
|||
pw = static_cast< Ui::CWindow* >(m_interface->SearchControl(EVENT_WINDOW0));
|
||||
if ( pw == 0 ) return false;
|
||||
|
||||
m_object->GetTooltipName(name);
|
||||
std::string tooltipLabel;
|
||||
m_object->GetTooltipName(tooltipLabel);
|
||||
pos.x = 0.0f;
|
||||
pos.y = 64.0f/480.0f;
|
||||
ddim.x = 540.0f/640.0f;
|
||||
if ( !m_main->GetShowMap() ) ddim.x = 640.0f/640.0f;
|
||||
ddim.y = 16.0f/480.0f;
|
||||
pw->CreateLabel(pos, ddim, 0, EVENT_LABEL0, name);
|
||||
pw->CreateLabel(pos, ddim, 0, EVENT_LABEL0, tooltipLabel);
|
||||
|
||||
dim.x = 33.0f/640.0f;
|
||||
dim.y = 33.0f/480.0f;
|
||||
|
@ -1674,8 +1674,10 @@ bool CBrain::CreateInterface(bool bSelect)
|
|||
pos.y = oy+sy*1.2f;
|
||||
ddim.x = dim.x*2.2f;
|
||||
ddim.y = dim.y*0.4f;
|
||||
GetResource(RES_TEXT, RT_INTERFACE_REC, name);
|
||||
pl = pw->CreateLabel(pos, ddim, 0, EVENT_LABEL1, name);
|
||||
|
||||
std::string recordLabel;
|
||||
GetResource(RES_TEXT, RT_INTERFACE_REC, recordLabel);
|
||||
pl = pw->CreateLabel(pos, ddim, 0, EVENT_LABEL1, recordLabel);
|
||||
pl->SetFontSize(9.0f);
|
||||
|
||||
pos.x = ox+sx*7.0f;
|
||||
|
@ -1787,9 +1789,6 @@ bool CBrain::CreateInterface(bool bSelect)
|
|||
|
||||
pos.x = ox+sx*13.4f;
|
||||
pos.y = oy+sy*0;
|
||||
#if _TEEN
|
||||
pw->CreateButton(pos, dim, 9, EVENT_OBJECT_RESET);
|
||||
#else
|
||||
if ( m_object->GetTrainer() ) // Training?
|
||||
{
|
||||
pw->CreateButton(pos, dim, 9, EVENT_OBJECT_RESET);
|
||||
|
@ -1798,7 +1797,6 @@ bool CBrain::CreateInterface(bool bSelect)
|
|||
{
|
||||
pw->CreateButton(pos, dim, 10, EVENT_OBJECT_DESELECT);
|
||||
}
|
||||
#endif
|
||||
|
||||
if ( type == OBJECT_MOBILEfa ||
|
||||
type == OBJECT_MOBILEta ||
|
||||
|
@ -2457,17 +2455,10 @@ void CBrain::UpdateScript(Ui::CWindow *pw)
|
|||
char name[100];
|
||||
char title[100];
|
||||
int i;
|
||||
bool bSoluce;
|
||||
|
||||
pl = static_cast< Ui::CList* >(pw->SearchControl(EVENT_OBJECT_PROGLIST));
|
||||
if ( pl == 0 ) return;
|
||||
|
||||
#if _SCHOOL
|
||||
bSoluce = m_main->GetSoluce4();
|
||||
#else
|
||||
bSoluce = true;
|
||||
#endif
|
||||
|
||||
for ( i=0 ; i<BRAINMAXSCRIPT ; i++ )
|
||||
{
|
||||
sprintf(name, "%d", i+1);
|
||||
|
@ -2475,10 +2466,6 @@ void CBrain::UpdateScript(Ui::CWindow *pw)
|
|||
if ( m_script[i] != 0 )
|
||||
{
|
||||
m_script[i]->GetTitle(title);
|
||||
if ( !bSoluce && i == 3 )
|
||||
{
|
||||
title[0] = 0;
|
||||
}
|
||||
if ( title[0] != 0 )
|
||||
{
|
||||
sprintf(name, "%d: %s", i+1, title);
|
||||
|
@ -2488,11 +2475,6 @@ void CBrain::UpdateScript(Ui::CWindow *pw)
|
|||
pl->SetItemName(i, name);
|
||||
}
|
||||
|
||||
if ( !bSoluce )
|
||||
{
|
||||
pl->SetEnable(3, false);
|
||||
}
|
||||
|
||||
pl->SetSelect(m_selScript);
|
||||
pl->ShowSelect(true);
|
||||
}
|
||||
|
|
|
@ -276,6 +276,7 @@ CObject::CObject()
|
|||
m_lastVirusParticle = 0.0f;
|
||||
m_totalDesectList = 0;
|
||||
m_bLock = false;
|
||||
m_bIgnoreBuildCheck = false;
|
||||
m_bExplo = false;
|
||||
m_bCargo = false;
|
||||
m_bBurn = false;
|
||||
|
@ -6781,7 +6782,7 @@ float CObject::GetParam()
|
|||
|
||||
// Management of the mode "blocked" of an object.
|
||||
// For example, a cube of titanium is blocked while it is used to make something,
|
||||
//or a vehicle is blocked as its construction is not finished.
|
||||
// or a vehicle is blocked as its construction is not finished.
|
||||
|
||||
void CObject::SetLock(bool bLock)
|
||||
{
|
||||
|
@ -6793,6 +6794,18 @@ bool CObject::GetLock()
|
|||
return m_bLock;
|
||||
}
|
||||
|
||||
// Ignore checks in build() function
|
||||
|
||||
void CObject::SetIgnoreBuildCheck(bool bIgnoreBuildCheck)
|
||||
{
|
||||
m_bIgnoreBuildCheck = bIgnoreBuildCheck;
|
||||
}
|
||||
|
||||
bool CObject::GetIgnoreBuildCheck()
|
||||
{
|
||||
return m_bIgnoreBuildCheck;
|
||||
}
|
||||
|
||||
// Management of the mode "current explosion" of an object.
|
||||
// An object in this mode is not saving.
|
||||
|
||||
|
@ -7263,10 +7276,10 @@ int CObject::GetDefRank()
|
|||
|
||||
// Getes the object name for the tooltip.
|
||||
|
||||
bool CObject::GetTooltipName(char* name)
|
||||
bool CObject::GetTooltipName(std::string& name)
|
||||
{
|
||||
GetResource(RES_OBJECT, m_type, name);
|
||||
return ( name[0] != 0 );
|
||||
return !name.empty();
|
||||
}
|
||||
|
||||
|
||||
|
@ -7390,3 +7403,70 @@ void CObject::SetTraceWidth(float width)
|
|||
mv->SetTraceWidth(width);
|
||||
}
|
||||
|
||||
DriveType CObject::GetDriveFromObject(ObjectType type)
|
||||
{
|
||||
switch(type) {
|
||||
case OBJECT_MOBILEwt:
|
||||
case OBJECT_MOBILEwa:
|
||||
case OBJECT_MOBILEwc:
|
||||
case OBJECT_MOBILEwi:
|
||||
case OBJECT_MOBILEws:
|
||||
return DRIVE_WHEELED;
|
||||
|
||||
case OBJECT_MOBILEtt:
|
||||
case OBJECT_MOBILEta:
|
||||
case OBJECT_MOBILEtc:
|
||||
case OBJECT_MOBILEti:
|
||||
case OBJECT_MOBILEts:
|
||||
return DRIVE_TRACKED;
|
||||
|
||||
case OBJECT_MOBILEft:
|
||||
case OBJECT_MOBILEfa:
|
||||
case OBJECT_MOBILEfc:
|
||||
case OBJECT_MOBILEfi:
|
||||
case OBJECT_MOBILEfs:
|
||||
return DRIVE_WINGED;
|
||||
|
||||
case OBJECT_MOBILEit:
|
||||
case OBJECT_MOBILEia:
|
||||
case OBJECT_MOBILEic:
|
||||
case OBJECT_MOBILEii:
|
||||
case OBJECT_MOBILEis:
|
||||
return DRIVE_LEGGED;
|
||||
|
||||
default:
|
||||
return DRIVE_OTHER;
|
||||
}
|
||||
}
|
||||
|
||||
ToolType CObject::GetToolFromObject(ObjectType type)
|
||||
{
|
||||
switch(type) {
|
||||
case OBJECT_MOBILEwa:
|
||||
case OBJECT_MOBILEta:
|
||||
case OBJECT_MOBILEfa:
|
||||
case OBJECT_MOBILEia:
|
||||
return TOOL_GRABBER;
|
||||
|
||||
case OBJECT_MOBILEws:
|
||||
case OBJECT_MOBILEts:
|
||||
case OBJECT_MOBILEfs:
|
||||
case OBJECT_MOBILEis:
|
||||
return TOOL_SNIFFER;
|
||||
|
||||
case OBJECT_MOBILEwc:
|
||||
case OBJECT_MOBILEtc:
|
||||
case OBJECT_MOBILEfc:
|
||||
case OBJECT_MOBILEic:
|
||||
return TOOL_SHOOTER;
|
||||
|
||||
case OBJECT_MOBILEwi:
|
||||
case OBJECT_MOBILEti:
|
||||
case OBJECT_MOBILEfi:
|
||||
case OBJECT_MOBILEii:
|
||||
return TOOL_ORGASHOOTER;
|
||||
|
||||
default:
|
||||
return TOOL_OTHER;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -47,245 +47,207 @@ enum ObjectType
|
|||
{
|
||||
OBJECT_NULL = 0, //! < object destroyed
|
||||
OBJECT_FIX = 1, //! < stationary scenery
|
||||
OBJECT_PORTICO = 2, //! < gantry
|
||||
OBJECT_BASE = 3, //! < great main base
|
||||
OBJECT_DERRICK = 4, //! < derrick set
|
||||
OBJECT_FACTORY = 5, //! < factory set
|
||||
OBJECT_STATION = 6, //! < recharging station
|
||||
OBJECT_CONVERT = 7, //! < converter station
|
||||
OBJECT_REPAIR = 8, //! < reparation
|
||||
OBJECT_TOWER = 9, //! < defense tower
|
||||
OBJECT_NEST = 10, //! < nest
|
||||
OBJECT_RESEARCH = 11, //! < research center
|
||||
OBJECT_RADAR = 12, //! < radar
|
||||
OBJECT_ENERGY = 13, //! < energy factory
|
||||
OBJECT_LABO = 14, //! < analytical laboratory for insect
|
||||
OBJECT_NUCLEAR = 15, //! < nuclear power plant
|
||||
OBJECT_START = 16, //! < starting
|
||||
OBJECT_END = 17, //! < finish
|
||||
OBJECT_INFO = 18, //! < information terminal
|
||||
OBJECT_PARA = 19, //! < lightning conductor
|
||||
OBJECT_TARGET1 = 20, //! < gate target
|
||||
OBJECT_TARGET2 = 21, //! < center target
|
||||
OBJECT_SAFE = 22, //! < safe
|
||||
OBJECT_HUSTON = 23, //! < control centre
|
||||
OBJECT_DESTROYER = 24, //! < destroyer
|
||||
OBJECT_FRET = 30, //! < transportable
|
||||
OBJECT_STONE = 31, //! < stone
|
||||
OBJECT_URANIUM = 32, //! < uranium
|
||||
OBJECT_METAL = 33, //! < metal
|
||||
OBJECT_POWER = 34, //! < normal battery
|
||||
OBJECT_ATOMIC = 35, //! < atomic battery
|
||||
OBJECT_BULLET = 36, //! < bullet
|
||||
OBJECT_BBOX = 37, //! < black-box
|
||||
OBJECT_TNT = 38, //! < box of TNT
|
||||
OBJECT_SCRAP1 = 40, //! < metal waste
|
||||
OBJECT_SCRAP2 = 41, //! < metal waste
|
||||
OBJECT_SCRAP3 = 42, //! < metal waste
|
||||
OBJECT_SCRAP4 = 43, //! < plastic waste
|
||||
OBJECT_SCRAP5 = 44, //! < plastic waste
|
||||
OBJECT_MARKPOWER = 50, //! < mark underground energy source
|
||||
OBJECT_MARKSTONE = 51, //! < mark underground ore
|
||||
OBJECT_MARKURANIUM = 52, //! < mark underground uranium
|
||||
OBJECT_MARKKEYa = 53, //! < mark underground key
|
||||
OBJECT_MARKKEYb = 54, //! < mark underground key
|
||||
OBJECT_MARKKEYc = 55, //! < mark underground key
|
||||
OBJECT_MARKKEYd = 56, //! < mark underground key
|
||||
OBJECT_BOMB = 60, //! < bomb
|
||||
OBJECT_WINFIRE = 61, //! < fireworks
|
||||
OBJECT_SHOW = 62, //! < shows a place
|
||||
OBJECT_BAG = 63, //! < survival bag
|
||||
OBJECT_PLANT0 = 70, //! < plant 0
|
||||
OBJECT_PLANT1 = 71, //! < plant 1
|
||||
OBJECT_PLANT2 = 72, //! < plant 2
|
||||
OBJECT_PLANT3 = 73, //! < plant 3
|
||||
OBJECT_PLANT4 = 74, //! < plant 4
|
||||
OBJECT_PLANT5 = 75, //! < plant 5
|
||||
OBJECT_PLANT6 = 76, //! < plant 6
|
||||
OBJECT_PLANT7 = 77, //! < plant 7
|
||||
OBJECT_PLANT8 = 78, //! < plant 8
|
||||
OBJECT_PLANT9 = 79, //! < plant 9
|
||||
OBJECT_PLANT10 = 80, //! < plant 10
|
||||
OBJECT_PLANT11 = 81, //! < plant 11
|
||||
OBJECT_PLANT12 = 82, //! < plant 12
|
||||
OBJECT_PLANT13 = 83, //! < plant 13
|
||||
OBJECT_PLANT14 = 84, //! < plant 14
|
||||
OBJECT_PLANT15 = 85, //! < plant 15
|
||||
OBJECT_PLANT16 = 86, //! < plant 16
|
||||
OBJECT_PLANT17 = 87, //! < plant 17
|
||||
OBJECT_PLANT18 = 88, //! < plant 18
|
||||
OBJECT_PLANT19 = 89, //! < plant 19
|
||||
OBJECT_TREE0 = 90, //! < tree 0
|
||||
OBJECT_TREE1 = 91, //! < tree 1
|
||||
OBJECT_TREE2 = 92, //! < tree 2
|
||||
OBJECT_TREE3 = 93, //! < tree 3
|
||||
OBJECT_TREE4 = 94, //! < tree 4
|
||||
OBJECT_TREE5 = 95, //! < tree 5
|
||||
OBJECT_TREE6 = 96, //! < tree 6
|
||||
OBJECT_TREE7 = 97, //! < tree 7
|
||||
OBJECT_TREE8 = 98, //! < tree 8
|
||||
OBJECT_TREE9 = 99, //! < tree 9
|
||||
OBJECT_MOBILEwt = 100, //! < wheel-trainer
|
||||
OBJECT_MOBILEtt = 101, //! < track-trainer
|
||||
OBJECT_MOBILEft = 102, //! < fly-trainer
|
||||
OBJECT_MOBILEit = 103, //! < insect-trainer
|
||||
OBJECT_MOBILEwa = 110, //! < wheel-arm
|
||||
OBJECT_MOBILEta = 111, //! < track-arm
|
||||
OBJECT_MOBILEfa = 112, //! < fly-arm
|
||||
OBJECT_MOBILEia = 113, //! < insect-arm
|
||||
OBJECT_MOBILEwc = 120, //! < wheel-cannon
|
||||
OBJECT_MOBILEtc = 121, //! < track-cannon
|
||||
OBJECT_MOBILEfc = 122, //! < fly-cannon
|
||||
OBJECT_MOBILEic = 123, //! < insect-cannon
|
||||
OBJECT_MOBILEwi = 130, //! < wheel-insect-cannon
|
||||
OBJECT_MOBILEti = 131, //! < track-insect-cannon
|
||||
OBJECT_MOBILEfi = 132, //! < fly-insect-cannon
|
||||
OBJECT_MOBILEii = 133, //! < insect-insect-cannon
|
||||
OBJECT_MOBILEws = 140, //! < wheel-search
|
||||
OBJECT_MOBILEts = 141, //! < track-search
|
||||
OBJECT_MOBILEfs = 142, //! < fly-search
|
||||
OBJECT_MOBILEis = 143, //! < insect-search
|
||||
OBJECT_MOBILErt = 200, //! < roller-terraform
|
||||
OBJECT_MOBILErc = 201, //! < roller-canon
|
||||
OBJECT_MOBILErr = 202, //! < roller-recover
|
||||
OBJECT_MOBILErs = 203, //! < roller-shield
|
||||
OBJECT_MOBILEsa = 210, //! < submarine
|
||||
OBJECT_MOBILEtg = 211, //! < training target
|
||||
OBJECT_MOBILEdr = 212, //! < robot drawing
|
||||
OBJECT_CONTROLLER = 213, //! < mission controller
|
||||
OBJECT_WAYPOINT = 250, //! < waypoint
|
||||
OBJECT_FLAGb = 260, //! < blue flag
|
||||
OBJECT_FLAGr = 261, //! < red flag
|
||||
OBJECT_FLAGg = 262, //! < green flag
|
||||
OBJECT_FLAGy = 263, //! < yellow flag
|
||||
OBJECT_FLAGv = 264, //! < violet flag
|
||||
OBJECT_KEYa = 270, //! < key a
|
||||
OBJECT_KEYb = 271, //! < key b
|
||||
OBJECT_KEYc = 272, //! < key c
|
||||
OBJECT_KEYd = 273, //! < key d
|
||||
OBJECT_HUMAN = 300, //! < human
|
||||
OBJECT_TOTO = 301, //! < toto
|
||||
OBJECT_TECH = 302, //! < technician
|
||||
OBJECT_BARRIER0 = 400, //! < barrier
|
||||
OBJECT_BARRIER1 = 401, //! < barrier
|
||||
OBJECT_BARRIER2 = 402, //! < barrier
|
||||
OBJECT_BARRIER3 = 403, //! < barrier
|
||||
OBJECT_BARRIER4 = 404, //! < barrier
|
||||
OBJECT_MOTHER = 500, //! < insect queen
|
||||
OBJECT_EGG = 501, //! < egg
|
||||
OBJECT_ANT = 502, //! < ant
|
||||
OBJECT_SPIDER = 503, //! < spider
|
||||
OBJECT_BEE = 504, //! < bee
|
||||
OBJECT_WORM = 505, //! < worm
|
||||
OBJECT_RUINmobilew1 = 600, //! < ruin 1
|
||||
OBJECT_RUINmobilew2 = 601, //! < ruin 1
|
||||
OBJECT_RUINmobilet1 = 602, //! < ruin 2
|
||||
OBJECT_RUINmobilet2 = 603, //! < ruin 2
|
||||
OBJECT_RUINmobiler1 = 604, //! < ruin 3
|
||||
OBJECT_RUINmobiler2 = 605, //! < ruin 3
|
||||
OBJECT_RUINfactory = 606, //! < ruin 4
|
||||
OBJECT_RUINdoor = 607, //! < ruin 5
|
||||
OBJECT_RUINsupport = 608, //! < ruin 6
|
||||
OBJECT_RUINradar = 609, //! < ruin 7
|
||||
OBJECT_RUINconvert = 610, //! < ruin 8
|
||||
OBJECT_RUINbase = 611, //! < ruin 9
|
||||
OBJECT_RUINhead = 612, //! < ruin 10
|
||||
OBJECT_TEEN0 = 620, //! < toy
|
||||
OBJECT_TEEN1 = 621, //! < toy
|
||||
OBJECT_TEEN2 = 622, //! < toy
|
||||
OBJECT_TEEN3 = 623, //! < toy
|
||||
OBJECT_TEEN4 = 624, //! < toy
|
||||
OBJECT_TEEN5 = 625, //! < toy
|
||||
OBJECT_TEEN6 = 626, //! < toy
|
||||
OBJECT_TEEN7 = 627, //! < toy
|
||||
OBJECT_TEEN8 = 628, //! < toy
|
||||
OBJECT_TEEN9 = 629, //! < toy
|
||||
OBJECT_TEEN10 = 630, //! < toy
|
||||
OBJECT_TEEN11 = 631, //! < toy
|
||||
OBJECT_TEEN12 = 632, //! < toy
|
||||
OBJECT_TEEN13 = 633, //! < toy
|
||||
OBJECT_TEEN14 = 634, //! < toy
|
||||
OBJECT_TEEN15 = 635, //! < toy
|
||||
OBJECT_TEEN16 = 636, //! < toy
|
||||
OBJECT_TEEN17 = 637, //! < toy
|
||||
OBJECT_TEEN18 = 638, //! < toy
|
||||
OBJECT_TEEN19 = 639, //! < toy
|
||||
OBJECT_TEEN20 = 640, //! < toy
|
||||
OBJECT_TEEN21 = 641, //! < toy
|
||||
OBJECT_TEEN22 = 642, //! < toy
|
||||
OBJECT_TEEN23 = 643, //! < toy
|
||||
OBJECT_TEEN24 = 644, //! < toy
|
||||
OBJECT_TEEN25 = 645, //! < toy
|
||||
OBJECT_TEEN26 = 646, //! < toy
|
||||
OBJECT_TEEN27 = 647, //! < toy
|
||||
OBJECT_TEEN28 = 648, //! < toy
|
||||
OBJECT_TEEN29 = 649, //! < toy
|
||||
OBJECT_TEEN30 = 650, //! < toy
|
||||
OBJECT_TEEN31 = 651, //! < toy
|
||||
OBJECT_TEEN32 = 652, //! < toy
|
||||
OBJECT_TEEN33 = 653, //! < toy
|
||||
OBJECT_TEEN34 = 654, //! < toy
|
||||
OBJECT_TEEN35 = 655, //! < toy
|
||||
OBJECT_TEEN36 = 656, //! < toy
|
||||
OBJECT_TEEN37 = 657, //! < toy
|
||||
OBJECT_TEEN38 = 658, //! < toy
|
||||
OBJECT_TEEN39 = 659, //! < toy
|
||||
OBJECT_TEEN40 = 660, //! < toy
|
||||
OBJECT_TEEN41 = 661, //! < toy
|
||||
OBJECT_TEEN42 = 662, //! < toy
|
||||
OBJECT_TEEN43 = 663, //! < toy
|
||||
OBJECT_TEEN44 = 664, //! < toy
|
||||
OBJECT_TEEN45 = 665, //! < toy
|
||||
OBJECT_TEEN46 = 666, //! < toy
|
||||
OBJECT_TEEN47 = 667, //! < toy
|
||||
OBJECT_TEEN48 = 668, //! < toy
|
||||
OBJECT_TEEN49 = 669, //! < toy
|
||||
OBJECT_QUARTZ0 = 700, //! < crystal 0
|
||||
OBJECT_QUARTZ1 = 701, //! < crystal 1
|
||||
OBJECT_QUARTZ2 = 702, //! < crystal 2
|
||||
OBJECT_QUARTZ3 = 703, //! < crystal 3
|
||||
OBJECT_QUARTZ4 = 704, //! < crystal 4
|
||||
OBJECT_QUARTZ5 = 705, //! < crystal 5
|
||||
OBJECT_QUARTZ6 = 706, //! < crystal 6
|
||||
OBJECT_QUARTZ7 = 707, //! < crystal 7
|
||||
OBJECT_QUARTZ8 = 708, //! < crystal 8
|
||||
OBJECT_QUARTZ9 = 709, //! < crystal 9
|
||||
OBJECT_ROOT0 = 710, //! < root 0
|
||||
OBJECT_ROOT1 = 711, //! < root 1
|
||||
OBJECT_ROOT2 = 712, //! < root 2
|
||||
OBJECT_ROOT3 = 713, //! < root 3
|
||||
OBJECT_ROOT4 = 714, //! < root 4
|
||||
OBJECT_ROOT5 = 715, //! < root 5
|
||||
OBJECT_ROOT6 = 716, //! < root 6
|
||||
OBJECT_ROOT7 = 717, //! < root 7
|
||||
OBJECT_ROOT8 = 718, //! < root 8
|
||||
OBJECT_ROOT9 = 719, //! < root 9
|
||||
OBJECT_SEAWEED0 = 720, //! < seaweed 0
|
||||
OBJECT_SEAWEED1 = 721, //! < seaweed 1
|
||||
OBJECT_SEAWEED2 = 722, //! < seaweed 2
|
||||
OBJECT_SEAWEED3 = 723, //! < seaweed 3
|
||||
OBJECT_SEAWEED4 = 724, //! < seaweed 4
|
||||
OBJECT_SEAWEED5 = 725, //! < seaweed 5
|
||||
OBJECT_SEAWEED6 = 726, //! < seaweed 6
|
||||
OBJECT_SEAWEED7 = 727, //! < seaweed 7
|
||||
OBJECT_SEAWEED8 = 728, //! < seaweed 8
|
||||
OBJECT_SEAWEED9 = 729, //! < seaweed 9
|
||||
OBJECT_MUSHROOM0 = 730, //! < mushroom 0
|
||||
OBJECT_MUSHROOM1 = 731, //! < mushroom 1
|
||||
OBJECT_MUSHROOM2 = 732, //! < mushroom 2
|
||||
OBJECT_MUSHROOM3 = 733, //! < mushroom 3
|
||||
OBJECT_MUSHROOM4 = 734, //! < mushroom 4
|
||||
OBJECT_MUSHROOM5 = 735, //! < mushroom 5
|
||||
OBJECT_MUSHROOM6 = 736, //! < mushroom 6
|
||||
OBJECT_MUSHROOM7 = 737, //! < mushroom 7
|
||||
OBJECT_MUSHROOM8 = 738, //! < mushroom 8
|
||||
OBJECT_MUSHROOM9 = 739, //! < mushroom 9
|
||||
OBJECT_APOLLO1 = 900, //! < apollo lem
|
||||
OBJECT_APOLLO2 = 901, //! < apollo jeep
|
||||
OBJECT_APOLLO3 = 902, //! < apollo flag
|
||||
OBJECT_APOLLO4 = 903, //! < apollo module
|
||||
OBJECT_APOLLO5 = 904, //! < apollo antenna
|
||||
OBJECT_HOME1 = 910, //! < home 1
|
||||
OBJECT_PORTICO = 2, //! < Portico
|
||||
OBJECT_BASE = 3, //! < SpaceShip
|
||||
OBJECT_DERRICK = 4, //! < Derrick
|
||||
OBJECT_FACTORY = 5, //! < BotFactory
|
||||
OBJECT_STATION = 6, //! < PowerStation
|
||||
OBJECT_CONVERT = 7, //! < Converter
|
||||
OBJECT_REPAIR = 8, //! < RepairStation
|
||||
OBJECT_TOWER = 9, //! < DefenseTower
|
||||
OBJECT_NEST = 10, //! < AlienNest
|
||||
OBJECT_RESEARCH = 11, //! < ResearchCenter
|
||||
OBJECT_RADAR = 12, //! < RadarStation
|
||||
OBJECT_ENERGY = 13, //! < PowerPlant
|
||||
OBJECT_LABO = 14, //! < AutoLab
|
||||
OBJECT_NUCLEAR = 15, //! < NuclearPlant
|
||||
OBJECT_START = 16, //! < StartArea
|
||||
OBJECT_END = 17, //! < EndArea
|
||||
OBJECT_INFO = 18, //! < ExchangePost
|
||||
OBJECT_PARA = 19, //! < PowerCaptor
|
||||
OBJECT_TARGET1 = 20, //! < Target1 (gate)
|
||||
OBJECT_TARGET2 = 21, //! < Target2 (center)
|
||||
OBJECT_SAFE = 22, //! < Vault
|
||||
OBJECT_HUSTON = 23, //! < Houston
|
||||
OBJECT_DESTROYER = 24, //! < Destroyer
|
||||
OBJECT_FRET = 30, //! < transportable (unused)
|
||||
OBJECT_STONE = 31, //! < TitaniumOre
|
||||
OBJECT_URANIUM = 32, //! < UraniumOre
|
||||
OBJECT_METAL = 33, //! < Titanium
|
||||
OBJECT_POWER = 34, //! < PowerCell
|
||||
OBJECT_ATOMIC = 35, //! < NuclearCell
|
||||
OBJECT_BULLET = 36, //! < OrgaMatter
|
||||
OBJECT_BBOX = 37, //! < BlackBox
|
||||
OBJECT_TNT = 38, //! < TNT
|
||||
OBJECT_SCRAP1 = 40, //! < Scrap1 (metal)
|
||||
OBJECT_SCRAP2 = 41, //! < Scrap2 (metal)
|
||||
OBJECT_SCRAP3 = 42, //! < Scrap3 (metal)
|
||||
OBJECT_SCRAP4 = 43, //! < Scrap4 (plastic)
|
||||
OBJECT_SCRAP5 = 44, //! < Scrap5 (plastic)
|
||||
OBJECT_MARKPOWER = 50, //! < PowerSpot
|
||||
OBJECT_MARKSTONE = 51, //! < TitaniumSpot
|
||||
OBJECT_MARKURANIUM = 52, //! < UraniumSpot
|
||||
OBJECT_MARKKEYa = 53, //! < KeyASpot
|
||||
OBJECT_MARKKEYb = 54, //! < KeyBSpot
|
||||
OBJECT_MARKKEYc = 55, //! < KeyCSpot
|
||||
OBJECT_MARKKEYd = 56, //! < KeyDSpot
|
||||
OBJECT_BOMB = 60, //! < Mine
|
||||
OBJECT_WINFIRE = 61, //! < Firework
|
||||
OBJECT_SHOW = 62, //! < arrow above object (Visit)
|
||||
OBJECT_BAG = 63, //! < Bag
|
||||
OBJECT_PLANT0 = 70, //! < Greenery0
|
||||
OBJECT_PLANT1 = 71, //! < Greenery1
|
||||
OBJECT_PLANT2 = 72, //! < Greenery2
|
||||
OBJECT_PLANT3 = 73, //! < Greenery3
|
||||
OBJECT_PLANT4 = 74, //! < Greenery4
|
||||
OBJECT_PLANT5 = 75, //! < Greenery5
|
||||
OBJECT_PLANT6 = 76, //! < Greenery6
|
||||
OBJECT_PLANT7 = 77, //! < Greenery7
|
||||
OBJECT_PLANT8 = 78, //! < Greenery8
|
||||
OBJECT_PLANT9 = 79, //! < Greenery9
|
||||
OBJECT_PLANT10 = 80, //! < Greenery10
|
||||
OBJECT_PLANT11 = 81, //! < Greenery11
|
||||
OBJECT_PLANT12 = 82, //! < Greenery12
|
||||
OBJECT_PLANT13 = 83, //! < Greenery13
|
||||
OBJECT_PLANT14 = 84, //! < Greenery14
|
||||
OBJECT_PLANT15 = 85, //! < Greenery15
|
||||
OBJECT_PLANT16 = 86, //! < Greenery16
|
||||
OBJECT_PLANT17 = 87, //! < Greenery17
|
||||
OBJECT_PLANT18 = 88, //! < Greenery18
|
||||
OBJECT_PLANT19 = 89, //! < Greenery19
|
||||
OBJECT_TREE0 = 90, //! < Tree0
|
||||
OBJECT_TREE1 = 91, //! < Tree1
|
||||
OBJECT_TREE2 = 92, //! < Tree2
|
||||
OBJECT_TREE3 = 93, //! < Tree3
|
||||
OBJECT_TREE4 = 94, //! < Tree4
|
||||
OBJECT_TREE5 = 95, //! < Tree5
|
||||
OBJECT_MOBILEwt = 100, //! < PracticeBot
|
||||
OBJECT_MOBILEtt = 101, //! < track-trainer (unused)
|
||||
OBJECT_MOBILEft = 102, //! < fly-trainer (unused)
|
||||
OBJECT_MOBILEit = 103, //! < insect-trainer (unused)
|
||||
OBJECT_MOBILEwa = 110, //! < WheeledGrabber
|
||||
OBJECT_MOBILEta = 111, //! < TrackedGrabber
|
||||
OBJECT_MOBILEfa = 112, //! < WingedGrabber
|
||||
OBJECT_MOBILEia = 113, //! < LeggedGrabber
|
||||
OBJECT_MOBILEwc = 120, //! < WheeledShooter
|
||||
OBJECT_MOBILEtc = 121, //! < TrackedShooter
|
||||
OBJECT_MOBILEfc = 122, //! < WingedShooter
|
||||
OBJECT_MOBILEic = 123, //! < LeggedShooter
|
||||
OBJECT_MOBILEwi = 130, //! < WheeledOrgaShooter
|
||||
OBJECT_MOBILEti = 131, //! < TrackedOrgaShooter
|
||||
OBJECT_MOBILEfi = 132, //! < WingedOrgaShooter
|
||||
OBJECT_MOBILEii = 133, //! < LeggedOrgaShooter
|
||||
OBJECT_MOBILEws = 140, //! < WheeledSniffer
|
||||
OBJECT_MOBILEts = 141, //! < TrackedSniffer
|
||||
OBJECT_MOBILEfs = 142, //! < WingedSniffer
|
||||
OBJECT_MOBILEis = 143, //! < LeggedSniffer
|
||||
OBJECT_MOBILErt = 200, //! < Thumper
|
||||
OBJECT_MOBILErc = 201, //! < PhazerShooter
|
||||
OBJECT_MOBILErr = 202, //! < Recycler
|
||||
OBJECT_MOBILErs = 203, //! < Shielder
|
||||
OBJECT_MOBILEsa = 210, //! < Subber
|
||||
OBJECT_MOBILEtg = 211, //! < TargetBot
|
||||
OBJECT_MOBILEdr = 212, //! < Scribbler
|
||||
OBJECT_CONTROLLER = 213, //! < MissionController
|
||||
OBJECT_WAYPOINT = 250, //! < WayPoint
|
||||
OBJECT_FLAGb = 260, //! < BlueFlag
|
||||
OBJECT_FLAGr = 261, //! < RedFlag
|
||||
OBJECT_FLAGg = 262, //! < GreenFlag
|
||||
OBJECT_FLAGy = 263, //! < YellowFlag
|
||||
OBJECT_FLAGv = 264, //! < VioletFlag
|
||||
OBJECT_KEYa = 270, //! < KeyA
|
||||
OBJECT_KEYb = 271, //! < KeyB
|
||||
OBJECT_KEYc = 272, //! < KeyC
|
||||
OBJECT_KEYd = 273, //! < KeyD
|
||||
OBJECT_HUMAN = 300, //! < Me
|
||||
OBJECT_TOTO = 301, //! < Robby (toto)
|
||||
OBJECT_TECH = 302, //! < Tech
|
||||
OBJECT_BARRIER0 = 400, //! < Barrier0
|
||||
OBJECT_BARRIER1 = 401, //! < Barrier1
|
||||
OBJECT_BARRIER2 = 402, //! < Barrier2
|
||||
OBJECT_BARRIER3 = 403, //! < Barrier3
|
||||
OBJECT_MOTHER = 500, //! < AlienQueen
|
||||
OBJECT_EGG = 501, //! < AlienEgg
|
||||
OBJECT_ANT = 502, //! < AlienAnt
|
||||
OBJECT_SPIDER = 503, //! < AlienSpider
|
||||
OBJECT_BEE = 504, //! < AlienWasp
|
||||
OBJECT_WORM = 505, //! < AlienWorm
|
||||
OBJECT_RUINmobilew1 = 600, //! < WreckBotw1
|
||||
OBJECT_RUINmobilew2 = 601, //! < WreckBotw2
|
||||
OBJECT_RUINmobilet1 = 602, //! < WreckBott1
|
||||
OBJECT_RUINmobilet2 = 603, //! < WreckBott2
|
||||
OBJECT_RUINmobiler1 = 604, //! < WreckBotr1
|
||||
OBJECT_RUINmobiler2 = 605, //! < WreckBotr2
|
||||
OBJECT_RUINfactory = 606, //! < RuinBotFactory
|
||||
OBJECT_RUINdoor = 607, //! < RuinDoor
|
||||
OBJECT_RUINsupport = 608, //! < RuinSupport
|
||||
OBJECT_RUINradar = 609, //! < RuinRadar
|
||||
OBJECT_RUINconvert = 610, //! < RuinConvert
|
||||
OBJECT_RUINbase = 611, //! < RuinBaseCamp
|
||||
OBJECT_RUINhead = 612, //! < RuinHeadCamp
|
||||
OBJECT_TEEN0 = 620, //! < Teen0
|
||||
OBJECT_TEEN1 = 621, //! < Teen1
|
||||
OBJECT_TEEN2 = 622, //! < Teen2
|
||||
OBJECT_TEEN3 = 623, //! < Teen3
|
||||
OBJECT_TEEN4 = 624, //! < Teen4
|
||||
OBJECT_TEEN5 = 625, //! < Teen5
|
||||
OBJECT_TEEN6 = 626, //! < Teen6
|
||||
OBJECT_TEEN7 = 627, //! < Teen7
|
||||
OBJECT_TEEN8 = 628, //! < Teen8
|
||||
OBJECT_TEEN9 = 629, //! < Teen9
|
||||
OBJECT_TEEN10 = 630, //! < Teen10
|
||||
OBJECT_TEEN11 = 631, //! < Teen11
|
||||
OBJECT_TEEN12 = 632, //! < Teen12
|
||||
OBJECT_TEEN13 = 633, //! < Teen13
|
||||
OBJECT_TEEN14 = 634, //! < Teen14
|
||||
OBJECT_TEEN15 = 635, //! < Teen15
|
||||
OBJECT_TEEN16 = 636, //! < Teen16
|
||||
OBJECT_TEEN17 = 637, //! < Teen17
|
||||
OBJECT_TEEN18 = 638, //! < Teen18
|
||||
OBJECT_TEEN19 = 639, //! < Teen19
|
||||
OBJECT_TEEN20 = 640, //! < Teen20
|
||||
OBJECT_TEEN21 = 641, //! < Teen21
|
||||
OBJECT_TEEN22 = 642, //! < Teen22
|
||||
OBJECT_TEEN23 = 643, //! < Teen23
|
||||
OBJECT_TEEN24 = 644, //! < Teen24
|
||||
OBJECT_TEEN25 = 645, //! < Teen25
|
||||
OBJECT_TEEN26 = 646, //! < Teen26
|
||||
OBJECT_TEEN27 = 647, //! < Teen27
|
||||
OBJECT_TEEN28 = 648, //! < Teen28
|
||||
OBJECT_TEEN29 = 649, //! < Teen29
|
||||
OBJECT_TEEN30 = 650, //! < Teen30
|
||||
OBJECT_TEEN31 = 651, //! < Teen31
|
||||
OBJECT_TEEN32 = 652, //! < Teen32
|
||||
OBJECT_TEEN33 = 653, //! < Teen33
|
||||
OBJECT_TEEN34 = 654, //! < Stone (Teen34)
|
||||
OBJECT_TEEN35 = 655, //! < Teen35
|
||||
OBJECT_TEEN36 = 656, //! < Teen36
|
||||
OBJECT_TEEN37 = 657, //! < Teen37
|
||||
OBJECT_TEEN38 = 658, //! < Teen38
|
||||
OBJECT_TEEN39 = 659, //! < Teen39
|
||||
OBJECT_TEEN40 = 660, //! < Teen40
|
||||
OBJECT_TEEN41 = 661, //! < Teen41
|
||||
OBJECT_TEEN42 = 662, //! < Teen42
|
||||
OBJECT_TEEN43 = 663, //! < Teen43
|
||||
OBJECT_TEEN44 = 664, //! < Teen44
|
||||
OBJECT_QUARTZ0 = 700, //! < Quartz0
|
||||
OBJECT_QUARTZ1 = 701, //! < Quartz1
|
||||
OBJECT_QUARTZ2 = 702, //! < Quartz2
|
||||
OBJECT_QUARTZ3 = 703, //! < Quartz3
|
||||
OBJECT_ROOT0 = 710, //! < MegaStalk0
|
||||
OBJECT_ROOT1 = 711, //! < MegaStalk1
|
||||
OBJECT_ROOT2 = 712, //! < MegaStalk2
|
||||
OBJECT_ROOT3 = 713, //! < MegaStalk3
|
||||
OBJECT_ROOT4 = 714, //! < MegaStalk4
|
||||
OBJECT_ROOT5 = 715, //! < MegaStalk5
|
||||
OBJECT_MUSHROOM1 = 731, //! < Mushroom1
|
||||
OBJECT_MUSHROOM2 = 732, //! < Mushroom2
|
||||
OBJECT_APOLLO1 = 900, //! < ApolloLEM
|
||||
OBJECT_APOLLO2 = 901, //! < ApolloJeep
|
||||
OBJECT_APOLLO3 = 902, //! < ApolloFlag
|
||||
OBJECT_APOLLO4 = 903, //! < ApolloModule
|
||||
OBJECT_APOLLO5 = 904, //! < ApolloAntenna
|
||||
OBJECT_HOME1 = 910, //! < Home
|
||||
|
||||
OBJECT_MAX = 1000 //! < number of values
|
||||
};
|
||||
|
@ -311,6 +273,24 @@ enum ObjectMaterial
|
|||
OM_MINERAL = 5, // stone
|
||||
};
|
||||
|
||||
enum DriveType
|
||||
{
|
||||
DRIVE_OTHER = 0,
|
||||
DRIVE_WHEELED,
|
||||
DRIVE_TRACKED,
|
||||
DRIVE_WINGED,
|
||||
DRIVE_LEGGED,
|
||||
};
|
||||
|
||||
enum ToolType
|
||||
{
|
||||
TOOL_OTHER = 0,
|
||||
TOOL_GRABBER,
|
||||
TOOL_SNIFFER,
|
||||
TOOL_SHOOTER,
|
||||
TOOL_ORGASHOOTER,
|
||||
};
|
||||
|
||||
struct ObjectPart
|
||||
{
|
||||
char bUsed;
|
||||
|
@ -602,6 +582,9 @@ public:
|
|||
|
||||
void SetParam(float value);
|
||||
float GetParam();
|
||||
|
||||
void SetIgnoreBuildCheck(bool bIgnoreBuildCheck);
|
||||
bool GetIgnoreBuildCheck();
|
||||
|
||||
void SetExplo(bool bExplo);
|
||||
bool GetExplo();
|
||||
|
@ -639,7 +622,7 @@ public:
|
|||
void SetDefRank(int rank);
|
||||
int GetDefRank();
|
||||
|
||||
bool GetTooltipName(char* name);
|
||||
bool GetTooltipName(std::string& name);
|
||||
|
||||
void AddDeselList(CObject* pObj);
|
||||
CObject* SubDeselList();
|
||||
|
@ -659,6 +642,9 @@ public:
|
|||
void SetTraceWidth(float width);
|
||||
|
||||
std::string GetModelDirName();
|
||||
|
||||
static DriveType GetDriveFromObject(ObjectType type);
|
||||
static ToolType GetToolFromObject(ObjectType type);
|
||||
|
||||
protected:
|
||||
bool EventFrame(const Event &event);
|
||||
|
@ -737,6 +723,7 @@ protected:
|
|||
bool m_bTrainer; // drive vehicle (without remote)
|
||||
bool m_bToy; // toy key
|
||||
bool m_bManual; // manual control (Scribbler)
|
||||
bool m_bIgnoreBuildCheck;
|
||||
bool m_bFixed;
|
||||
bool m_bClip;
|
||||
bool m_bShowLimit;
|
||||
|
|
|
@ -30,7 +30,7 @@ CObjectManager::CObjectManager()
|
|||
{
|
||||
m_table[i] = nullptr;
|
||||
}
|
||||
usedCount = 0;
|
||||
m_usedCount = 0;
|
||||
}
|
||||
|
||||
CObjectManager::~CObjectManager()
|
||||
|
@ -39,16 +39,16 @@ CObjectManager::~CObjectManager()
|
|||
|
||||
bool CObjectManager::AddInstance(CObject* instance)
|
||||
{
|
||||
if (usedCount >= MAX_OBJECTS) return false;
|
||||
if (m_usedCount >= MAX_OBJECTS) return false;
|
||||
|
||||
m_table[instance->GetID()] = instance;
|
||||
usedCount++;
|
||||
m_usedCount++;
|
||||
return true;
|
||||
}
|
||||
|
||||
bool CObjectManager::DeleteInstance(CObject* instance)
|
||||
{
|
||||
for (int i = 0; i < usedCount; i++)
|
||||
for (int i = 0; i < m_usedCount; i++)
|
||||
{
|
||||
if (m_table[i] == instance)
|
||||
m_table[i] = nullptr;
|
||||
|
@ -63,10 +63,9 @@ CObject* CObjectManager::SearchInstance(int id)
|
|||
return m_table[id];
|
||||
}
|
||||
|
||||
CObject* CObjectManager::CreateObject(Math::Vector pos, float angle, float zoom, float height,
|
||||
ObjectType type, float power,
|
||||
bool trainer, bool toy,
|
||||
int option)
|
||||
CObject* CObjectManager::CreateObject(Math::Vector pos, float angle, ObjectType type,
|
||||
float power, float zoom, float height,
|
||||
bool trainer, bool toy, int option)
|
||||
{
|
||||
CObject* object = nullptr;
|
||||
|
||||
|
@ -161,8 +160,7 @@ CObject* CObjectManager::CreateObject(Math::Vector pos, float angle, float zoom,
|
|||
if ( type == OBJECT_BARRIER0 ||
|
||||
type == OBJECT_BARRIER1 ||
|
||||
type == OBJECT_BARRIER2 ||
|
||||
type == OBJECT_BARRIER3 ||
|
||||
type == OBJECT_BARRIER4 )
|
||||
type == OBJECT_BARRIER3 )
|
||||
{
|
||||
object = new CObject();
|
||||
object->CreateBarrier(pos, angle, height, type);
|
||||
|
@ -193,26 +191,14 @@ CObject* CObjectManager::CreateObject(Math::Vector pos, float angle, float zoom,
|
|||
type == OBJECT_TREE2 ||
|
||||
type == OBJECT_TREE3 ||
|
||||
type == OBJECT_TREE4 ||
|
||||
type == OBJECT_TREE5 ||
|
||||
type == OBJECT_TREE6 ||
|
||||
type == OBJECT_TREE7 ||
|
||||
type == OBJECT_TREE8 ||
|
||||
type == OBJECT_TREE9 )
|
||||
type == OBJECT_TREE5 )
|
||||
{
|
||||
object = new CObject();
|
||||
object->CreatePlant(pos, angle, height, type);
|
||||
}
|
||||
else
|
||||
if ( type == OBJECT_MUSHROOM0 ||
|
||||
type == OBJECT_MUSHROOM1 ||
|
||||
type == OBJECT_MUSHROOM2 ||
|
||||
type == OBJECT_MUSHROOM3 ||
|
||||
type == OBJECT_MUSHROOM4 ||
|
||||
type == OBJECT_MUSHROOM5 ||
|
||||
type == OBJECT_MUSHROOM6 ||
|
||||
type == OBJECT_MUSHROOM7 ||
|
||||
type == OBJECT_MUSHROOM8 ||
|
||||
type == OBJECT_MUSHROOM9 )
|
||||
if ( type == OBJECT_MUSHROOM1 ||
|
||||
type == OBJECT_MUSHROOM2 )
|
||||
{
|
||||
object = new CObject();
|
||||
object->CreateMushroom(pos, angle, height, type);
|
||||
|
@ -262,12 +248,7 @@ CObject* CObjectManager::CreateObject(Math::Vector pos, float angle, float zoom,
|
|||
type == OBJECT_TEEN41 ||
|
||||
type == OBJECT_TEEN42 ||
|
||||
type == OBJECT_TEEN43 ||
|
||||
type == OBJECT_TEEN44 ||
|
||||
type == OBJECT_TEEN45 ||
|
||||
type == OBJECT_TEEN46 ||
|
||||
type == OBJECT_TEEN47 ||
|
||||
type == OBJECT_TEEN48 ||
|
||||
type == OBJECT_TEEN49 )
|
||||
type == OBJECT_TEEN44 )
|
||||
{
|
||||
object = new CObject();
|
||||
object->SetOption(option);
|
||||
|
@ -277,13 +258,7 @@ CObject* CObjectManager::CreateObject(Math::Vector pos, float angle, float zoom,
|
|||
if ( type == OBJECT_QUARTZ0 ||
|
||||
type == OBJECT_QUARTZ1 ||
|
||||
type == OBJECT_QUARTZ2 ||
|
||||
type == OBJECT_QUARTZ3 ||
|
||||
type == OBJECT_QUARTZ4 ||
|
||||
type == OBJECT_QUARTZ5 ||
|
||||
type == OBJECT_QUARTZ6 ||
|
||||
type == OBJECT_QUARTZ7 ||
|
||||
type == OBJECT_QUARTZ8 ||
|
||||
type == OBJECT_QUARTZ9 )
|
||||
type == OBJECT_QUARTZ3 )
|
||||
{
|
||||
object = new CObject();
|
||||
object->CreateQuartz(pos, angle, height, type);
|
||||
|
@ -294,11 +269,7 @@ CObject* CObjectManager::CreateObject(Math::Vector pos, float angle, float zoom,
|
|||
type == OBJECT_ROOT2 ||
|
||||
type == OBJECT_ROOT3 ||
|
||||
type == OBJECT_ROOT4 ||
|
||||
type == OBJECT_ROOT5 ||
|
||||
type == OBJECT_ROOT6 ||
|
||||
type == OBJECT_ROOT7 ||
|
||||
type == OBJECT_ROOT8 ||
|
||||
type == OBJECT_ROOT9 )
|
||||
type == OBJECT_ROOT5 )
|
||||
{
|
||||
object = new CObject();
|
||||
object->CreateRoot(pos, angle, height, type);
|
||||
|
@ -387,3 +358,11 @@ CObject* CObjectManager::CreateObject(Math::Vector pos, float angle, float zoom,
|
|||
return object;
|
||||
}
|
||||
|
||||
void CObjectManager::Flush()
|
||||
{
|
||||
for (int i = 0; i < MAX_OBJECTS; i++)
|
||||
{
|
||||
m_table[i] = nullptr;
|
||||
}
|
||||
m_usedCount = 0;
|
||||
}
|
||||
|
|
|
@ -44,10 +44,12 @@ public:
|
|||
//! Seeks for an object
|
||||
CObject* SearchInstance(int id);
|
||||
//! Creates an object
|
||||
CObject* CreateObject(Math::Vector pos, float angle, float zoom, float height, ObjectType type, float power, bool trainer, bool toy, int option);
|
||||
CObject* CreateObject(Math::Vector pos, float angle, ObjectType type, float power = -1.f, float zoom = 1.f, float height = 0.f, bool trainer = false, bool toy = false, int option = 0);
|
||||
//! Removes all objects
|
||||
void Flush();
|
||||
|
||||
protected:
|
||||
CObject* m_table[MAX_OBJECTS];
|
||||
int usedCount;
|
||||
int m_usedCount;
|
||||
};
|
||||
|
||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -30,6 +30,8 @@
|
|||
#include "object/object.h"
|
||||
#include "object/mainmovie.h"
|
||||
|
||||
#include "app/pausemanager.h"
|
||||
|
||||
#include <stdio.h>
|
||||
|
||||
enum Phase
|
||||
|
@ -44,7 +46,6 @@ enum Phase
|
|||
PHASE_FREE,
|
||||
PHASE_TEEN,
|
||||
PHASE_USER,
|
||||
PHASE_PROTO,
|
||||
PHASE_LOADING,
|
||||
PHASE_SIMUL,
|
||||
PHASE_MODEL,
|
||||
|
@ -104,6 +105,8 @@ struct EndTake
|
|||
int lost; // lost if <=
|
||||
float powermin; // wins if energy cell >=
|
||||
float powermax; // wins if energy cell <=
|
||||
ToolType tool;
|
||||
DriveType drive;
|
||||
bool immediat;
|
||||
char message[100];
|
||||
};
|
||||
|
@ -117,6 +120,8 @@ struct AudioChange
|
|||
int max; // change if <
|
||||
float powermin; // change if energy cell >=
|
||||
float powermax; // change if energy cell <=
|
||||
ToolType tool;
|
||||
DriveType drive;
|
||||
char music[100];
|
||||
bool repeat;
|
||||
bool changed;
|
||||
|
@ -250,7 +255,7 @@ public:
|
|||
void SetTracePrecision(float factor);
|
||||
float GetTracePrecision();
|
||||
|
||||
void ChangePause(bool pause);
|
||||
void ChangePause(PauseType pause);
|
||||
|
||||
void SetSpeed(float speed);
|
||||
float GetSpeed();
|
||||
|
@ -335,6 +340,7 @@ public:
|
|||
float GetPersoAngle();
|
||||
|
||||
void StartMusic();
|
||||
void StartPauseMusic(PauseType pause);
|
||||
void ClearInterface();
|
||||
void ChangeColor();
|
||||
|
||||
|
@ -391,14 +397,11 @@ protected:
|
|||
void CreateScene(bool soluce, bool fixScene, bool resetObject);
|
||||
|
||||
Math::Vector LookatPoint(Math::Vector eye, float angleH, float angleV, float length);
|
||||
CObject* CreateObject(Math::Vector pos, float angle, float zoom,
|
||||
float height, ObjectType type, float power=1.0f,
|
||||
bool trainer=false, bool toy=false, int option=0);
|
||||
int CreateLight(Math::Vector direction, Gfx::Color color);
|
||||
void HiliteClear();
|
||||
void HiliteObject(Math::Point pos);
|
||||
void HiliteFrame(float rTime);
|
||||
void CreateTooltip(Math::Point pos, const char* text);
|
||||
void CreateTooltip(Math::Point pos, const std::string& text);
|
||||
void ClearTooltip();
|
||||
CObject* DetectObject(Math::Point pos);
|
||||
void ChangeCamera();
|
||||
|
@ -440,6 +443,7 @@ protected:
|
|||
Ui::CDisplayText* m_displayText;
|
||||
Ui::CDisplayInfo* m_displayInfo;
|
||||
CSoundInterface* m_sound;
|
||||
CPauseManager* m_pause;
|
||||
|
||||
//! Bindings for user inputs
|
||||
InputBinding m_inputBindings[INPUT_SLOT_MAX];
|
||||
|
@ -471,15 +475,19 @@ protected:
|
|||
bool m_showSoluce;
|
||||
bool m_showAll;
|
||||
bool m_cheatRadar;
|
||||
bool m_audioRepeat;
|
||||
bool m_shortCut;
|
||||
std::string m_audioTrack;
|
||||
bool m_audioRepeat;
|
||||
std::string m_satcomTrack;
|
||||
bool m_satcomRepeat;
|
||||
std::string m_editorTrack;
|
||||
bool m_editorRepeat;
|
||||
int m_delayWriteMessage;
|
||||
int m_movieInfoIndex;
|
||||
|
||||
CObject* m_controller;
|
||||
|
||||
//Level Checker flags
|
||||
// Level Checker flags
|
||||
bool m_beginObject;
|
||||
bool m_terrainGenerate;
|
||||
bool m_terrainInitTextures;
|
||||
|
@ -495,7 +503,6 @@ protected:
|
|||
bool m_satComLock; // call of SatCom is possible?
|
||||
bool m_editLock; // edition in progress?
|
||||
bool m_editFull; // edition in full screen?
|
||||
bool m_pause; // simulation paused
|
||||
bool m_hilite;
|
||||
bool m_trainerPilot; // remote trainer?
|
||||
bool m_suspend;
|
||||
|
@ -506,7 +513,7 @@ protected:
|
|||
char m_mapFilename[100];
|
||||
|
||||
Math::Point m_tooltipPos;
|
||||
char m_tooltipName[100];
|
||||
std::string m_tooltipName;
|
||||
float m_tooltipTime;
|
||||
|
||||
char m_infoFilename[SATCOM_MAX][100]; // names of text files
|
||||
|
@ -522,6 +529,8 @@ protected:
|
|||
int m_endingWinRank;
|
||||
int m_endingLostRank;
|
||||
bool m_winTerminate;
|
||||
|
||||
bool m_exitAfterMission;
|
||||
|
||||
float m_fontSize;
|
||||
Math::Point m_windowPos;
|
||||
|
|
|
@ -100,6 +100,7 @@ bool CTaskBuild::CreateBuilding(Math::Vector pos, float angle)
|
|||
if ( m_type == OBJECT_PARA ) m_buildingHeight = 68.0f;
|
||||
if ( m_type == OBJECT_INFO ) m_buildingHeight = 19.0f;
|
||||
if ( m_type == OBJECT_DESTROYER) m_buildingHeight = 35.0f;
|
||||
if ( m_type == OBJECT_HUSTON ) m_buildingHeight = 45.0f;
|
||||
m_buildingHeight *= 0.25f;
|
||||
|
||||
m_buildingPos = m_building->GetPosition(0);
|
||||
|
@ -574,7 +575,7 @@ Error CTaskBuild::FlatFloor()
|
|||
if ( m_type == OBJECT_PARA ) radius = 20.0f;
|
||||
if ( m_type == OBJECT_INFO ) radius = 5.0f;
|
||||
if ( m_type == OBJECT_DESTROYER) radius = 20.0f;
|
||||
if ( radius == 0.0f ) return ERR_GENERIC;
|
||||
//if ( radius == 0.0f ) return ERR_GENERIC;
|
||||
|
||||
center = m_metal->GetPosition(0);
|
||||
angle = m_terrain->GetFineSlope(center);
|
||||
|
|
|
@ -1559,8 +1559,8 @@ void CTaskGoto::ComputeRepulse(Math::Point &dir)
|
|||
oType == OBJECT_BOMB ||
|
||||
(oType >= OBJECT_PLANT0 &&
|
||||
oType <= OBJECT_PLANT19 ) ||
|
||||
(oType >= OBJECT_MUSHROOM0 &&
|
||||
oType <= OBJECT_MUSHROOM9 ) ) continue;
|
||||
(oType >= OBJECT_MUSHROOM1 &&
|
||||
oType <= OBJECT_MUSHROOM2 ) ) continue;
|
||||
}
|
||||
|
||||
addi = add;
|
||||
|
|
|
@ -26,6 +26,7 @@
|
|||
|
||||
CTaskGunGoal::CTaskGunGoal(CObject* object) : CTask(object)
|
||||
{
|
||||
m_aimImpossible = false;
|
||||
}
|
||||
|
||||
// Object's destructor.
|
||||
|
@ -116,6 +117,12 @@ Error CTaskGunGoal::Start(float dirV, float dirH)
|
|||
|
||||
m_progress = 0.0f;
|
||||
|
||||
// direction was constrainted, hence resulting in impossible move
|
||||
if (dirV != m_finalDirV || dirH != m_finalDirH)
|
||||
{
|
||||
m_aimImpossible = true;
|
||||
}
|
||||
|
||||
return ERR_OK;
|
||||
}
|
||||
|
||||
|
@ -126,12 +133,25 @@ Error CTaskGunGoal::IsEnded()
|
|||
if ( m_engine->GetPause() ) return ERR_CONTINUE;
|
||||
|
||||
if ( m_initialDirV == m_finalDirV &&
|
||||
m_initialDirH == m_finalDirH ) return ERR_STOP;
|
||||
if ( m_progress < 1.0f ) return ERR_CONTINUE;
|
||||
m_initialDirH == m_finalDirH )
|
||||
{
|
||||
if ( m_aimImpossible )
|
||||
return ERR_AIM_IMPOSSIBLE;
|
||||
else
|
||||
return ERR_STOP;
|
||||
}
|
||||
|
||||
if ( m_progress < 1.0f ) return ERR_CONTINUE;
|
||||
|
||||
m_object->SetGunGoalV(m_finalDirV);
|
||||
m_object->SetGunGoalH(m_finalDirH);
|
||||
Abort();
|
||||
|
||||
if ( m_aimImpossible )
|
||||
{
|
||||
return ERR_AIM_IMPOSSIBLE;
|
||||
}
|
||||
|
||||
return ERR_STOP;
|
||||
}
|
||||
|
||||
|
|
|
@ -44,5 +44,7 @@ protected:
|
|||
float m_finalDirV; // direction to reach
|
||||
float m_initialDirH; // initial direction
|
||||
float m_finalDirH; // direction to reach
|
||||
|
||||
bool m_aimImpossible; // set to true if impossible aim was set
|
||||
};
|
||||
|
||||
|
|
|
@ -105,9 +105,11 @@ bool CTaskRecover::EventProcess(const Event &event)
|
|||
if ( power != 0 )
|
||||
{
|
||||
energy = power->GetEnergy();
|
||||
power->SetEnergy(energy-ENERGY_RECOVER*event.rTime*m_speed);
|
||||
energy -= event.rTime * ENERGY_RECOVER / power->GetCapacity() * m_speed;
|
||||
power->SetEnergy(energy);
|
||||
}
|
||||
|
||||
|
||||
speed.x = (Math::Rand()-0.5f)*0.1f*m_progress;
|
||||
speed.y = (Math::Rand()-0.5f)*0.1f*m_progress;
|
||||
speed.z = (Math::Rand()-0.5f)*0.1f*m_progress;
|
||||
|
|
|
@ -76,15 +76,9 @@ bool CTaskTerraform::EventProcess(const Event &event)
|
|||
{
|
||||
if ( m_soundChannel == -1 )
|
||||
{
|
||||
#if _TEEN
|
||||
m_soundChannel = m_sound->Play(SOUND_GGG, m_object->GetPosition(0), 1.0f, 0.5f, true);
|
||||
m_sound->AddEnvelope(m_soundChannel, 1.0f, 2.0f, 1.5f, SOPER_CONTINUE);
|
||||
m_sound->AddEnvelope(m_soundChannel, 0.0f, 0.5f, 0.5f, SOPER_STOP);
|
||||
#else
|
||||
m_soundChannel = m_sound->Play(SOUND_GGG, m_object->GetPosition(0), 1.0f, 0.5f, true);
|
||||
m_sound->AddEnvelope(m_soundChannel, 1.0f, 2.0f, 4.0f, SOPER_CONTINUE);
|
||||
m_sound->AddEnvelope(m_soundChannel, 0.0f, 0.5f, 0.5f, SOPER_STOP);
|
||||
#endif
|
||||
}
|
||||
|
||||
dir.x = 0.0f;
|
||||
|
@ -109,11 +103,7 @@ bool CTaskTerraform::EventProcess(const Event &event)
|
|||
if ( m_phase == TTP_DOWN )
|
||||
{
|
||||
pos.x = 9.0f;
|
||||
#if _TEEN
|
||||
pos.y = 4.0f-m_progress*4.0f;
|
||||
#else
|
||||
pos.y = 4.0f-m_progress*5.8f;
|
||||
#endif
|
||||
pos.z = 0.0f;
|
||||
m_object->SetPosition(2, pos);
|
||||
}
|
||||
|
@ -121,11 +111,7 @@ bool CTaskTerraform::EventProcess(const Event &event)
|
|||
if ( m_phase == TTP_UP )
|
||||
{
|
||||
pos.x = 9.0f;
|
||||
#if _TEEN
|
||||
pos.y = 4.0f-(1.0f-m_progress)*4.0f;
|
||||
#else
|
||||
pos.y = 4.0f-(1.0f-m_progress)*5.8f;
|
||||
#endif
|
||||
pos.z = 0.0f;
|
||||
m_object->SetPosition(2, pos);
|
||||
}
|
||||
|
@ -230,11 +216,7 @@ Error CTaskTerraform::Start()
|
|||
|
||||
m_phase = TTP_CHARGE;
|
||||
m_progress = 0.0f;
|
||||
#if _TEEN
|
||||
m_speed = 1.0f/1.5f;
|
||||
#else
|
||||
m_speed = 1.0f/4.0f;
|
||||
#endif
|
||||
m_time = 0.0f;
|
||||
|
||||
m_bError = false; // ok
|
||||
|
@ -261,9 +243,6 @@ Error CTaskTerraform::IsEnded()
|
|||
|
||||
if ( m_phase == TTP_CHARGE )
|
||||
{
|
||||
#if _TEEN
|
||||
Terraform(); // changes the terrain.
|
||||
#endif
|
||||
|
||||
m_phase = TTP_DOWN;
|
||||
m_speed = 1.0f/0.2f;
|
||||
|
@ -272,9 +251,7 @@ Error CTaskTerraform::IsEnded()
|
|||
|
||||
if ( m_phase == TTP_DOWN )
|
||||
{
|
||||
#if !_TEEN
|
||||
Terraform(); // changes the terrain.
|
||||
#endif
|
||||
|
||||
m_object->SetCirVibration(Math::Vector(0.0f, 0.0f, 0.0f));
|
||||
m_object->SetZoom(0, 1.0f);
|
||||
|
|
|
@ -107,6 +107,9 @@ CPhysics::CPhysics(CObject* object)
|
|||
m_bFreeze = false;
|
||||
m_bForceUpdate = true;
|
||||
m_bLowLevel = false;
|
||||
m_fallingHeight = 0.0f;
|
||||
m_minFallingHeight = 20.0f;
|
||||
m_fallDamageFraction = 0.007f;
|
||||
|
||||
memset(&m_linMotion, 0, sizeof(Motion));
|
||||
memset(&m_cirMotion, 0,sizeof(Motion));
|
||||
|
@ -786,6 +789,10 @@ void CPhysics::MotorUpdate(float aTime, float rTime)
|
|||
|
||||
type = m_object->GetType();
|
||||
|
||||
if(std::isnan(m_motorSpeed.x)) m_motorSpeed.x = 0.f;
|
||||
if(std::isnan(m_motorSpeed.y)) m_motorSpeed.y = 0.f;
|
||||
if(std::isnan(m_motorSpeed.z)) m_motorSpeed.z = 0.f;
|
||||
|
||||
motorSpeed = m_motorSpeed;
|
||||
|
||||
if ( type == OBJECT_MOTHER ||
|
||||
|
@ -847,6 +854,7 @@ void CPhysics::MotorUpdate(float aTime, float rTime)
|
|||
else
|
||||
{
|
||||
motorSpeed.y = -1.0f; // grave
|
||||
SetFalling();
|
||||
}
|
||||
SetMotor(false);
|
||||
}
|
||||
|
@ -911,6 +919,7 @@ void CPhysics::MotorUpdate(float aTime, float rTime)
|
|||
if ( m_reactorRange == 0.0f ) // reactor tilt?
|
||||
{
|
||||
motorSpeed.y = -1.0f; // grave
|
||||
SetFalling();
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1509,6 +1518,7 @@ bool CPhysics::EventFrame(const Event &event)
|
|||
if ( pos.y < m_water->GetLevel(m_object) ) // underwater?
|
||||
{
|
||||
h *= 0.5f;
|
||||
m_fallingHeight = 0.0f; // can't fall underwater
|
||||
}
|
||||
#endif
|
||||
//? m_linMotion.terrainSpeed.x = -tAngle.z*m_linMotion.terrainForce.x*h;
|
||||
|
@ -1601,6 +1611,13 @@ bool CPhysics::EventFrame(const Event &event)
|
|||
MotorParticle(m_time, event.rTime);
|
||||
SoundMotor(event.rTime);
|
||||
|
||||
if ( m_bLand && m_fallingHeight != 0.0f ) // if fell
|
||||
{
|
||||
float force = (m_fallingHeight - m_object->GetPosition(0).y) * m_fallDamageFraction;
|
||||
m_object->ExploObject(EXPLO_BOUM, force);
|
||||
m_fallingHeight = 0.0f;
|
||||
}
|
||||
|
||||
m_bForceUpdate = false;
|
||||
|
||||
return true;
|
||||
|
@ -2561,19 +2578,13 @@ int CPhysics::ObjectAdapt(const Math::Vector &pos, const Math::Vector &angle)
|
|||
oType == OBJECT_KEYd ||
|
||||
oType == OBJECT_TNT ||
|
||||
(oType >= OBJECT_PLANT0 && oType <= OBJECT_PLANT19 ) ||
|
||||
(oType >= OBJECT_MUSHROOM0 && oType <= OBJECT_MUSHROOM9) ) continue;
|
||||
(oType >= OBJECT_MUSHROOM1 && oType <= OBJECT_MUSHROOM2) ) continue;
|
||||
}
|
||||
|
||||
#if _TEEN
|
||||
if ( oType == OBJECT_WAYPOINT &&
|
||||
pObj->GetEnable() &&
|
||||
!m_object->GetResetBusy() ) // driving vehicle?
|
||||
#else
|
||||
if ( oType == OBJECT_WAYPOINT &&
|
||||
pObj->GetEnable() &&
|
||||
!m_object->GetResetBusy() &&
|
||||
m_object->GetTrainer() ) // driving vehicle?
|
||||
#endif
|
||||
{
|
||||
oPos = pObj->GetPosition(0);
|
||||
distance = Math::DistanceProjected(oPos, iPos);
|
||||
|
@ -2979,15 +2990,15 @@ void CPhysics::FrameParticle(float aTime, float rTime)
|
|||
{
|
||||
Math::Vector pos;
|
||||
CObject* power;
|
||||
float energy, intensity;
|
||||
float energy/*, intensity*/;
|
||||
int effectLight;
|
||||
bool bFlash;
|
||||
//bool bFlash;
|
||||
|
||||
m_restBreakParticle -= rTime;
|
||||
if ( aTime-m_lastPowerParticle < m_engine->ParticleAdapt(0.05f) ) return;
|
||||
m_lastPowerParticle = aTime;
|
||||
|
||||
bFlash = false;
|
||||
//bFlash = false;
|
||||
|
||||
energy = 0.0f;
|
||||
power = m_object->GetPower();
|
||||
|
@ -3001,7 +3012,7 @@ void CPhysics::FrameParticle(float aTime, float rTime)
|
|||
if ( energy > m_lastEnergy ) // recharge?
|
||||
{
|
||||
PowerParticle(1.0f, false);
|
||||
bFlash = true;
|
||||
//bFlash = true;
|
||||
}
|
||||
|
||||
if ( energy == 0.0f || m_lastEnergy == 0.0f )
|
||||
|
@ -3015,7 +3026,7 @@ void CPhysics::FrameParticle(float aTime, float rTime)
|
|||
if ( m_restBreakParticle > 0.0f )
|
||||
{
|
||||
PowerParticle(m_restBreakParticle/2.5f, (energy == 0));
|
||||
bFlash = true;
|
||||
//bFlash = true;
|
||||
}
|
||||
|
||||
effectLight = m_object->GetEffectLight();
|
||||
|
@ -3881,3 +3892,36 @@ Error CPhysics::GetError()
|
|||
return ERR_OK;
|
||||
}
|
||||
|
||||
void CPhysics::SetFalling()
|
||||
{
|
||||
if (m_fallingHeight == 0.0f && m_floorHeight >= m_minFallingHeight)
|
||||
m_fallingHeight = m_object->GetPosition(0).y;
|
||||
}
|
||||
|
||||
float CPhysics::GetFallingHeight()
|
||||
{
|
||||
return m_fallingHeight;
|
||||
}
|
||||
|
||||
void CPhysics::SetMinFallingHeight(float value)
|
||||
{
|
||||
if (value < 0.0f) return;
|
||||
m_minFallingHeight = value;
|
||||
}
|
||||
|
||||
float CPhysics::GetMinFallingHeight()
|
||||
{
|
||||
return m_minFallingHeight;
|
||||
}
|
||||
|
||||
void CPhysics::SetFallDamageFraction(float value)
|
||||
{
|
||||
if (value < 0.0f) return;
|
||||
m_fallDamageFraction = value;
|
||||
}
|
||||
|
||||
float CPhysics::GetFallDamageFraction()
|
||||
{
|
||||
return m_fallDamageFraction;
|
||||
}
|
||||
|
||||
|
|
|
@ -165,6 +165,14 @@ public:
|
|||
void CreateInterface(bool bSelect);
|
||||
Error GetError();
|
||||
|
||||
float GetFallingHeight();
|
||||
|
||||
void SetMinFallingHeight(float value);
|
||||
float GetMinFallingHeight();
|
||||
|
||||
void SetFallDamageFraction(float value);
|
||||
float GetFallDamageFraction();
|
||||
|
||||
protected:
|
||||
bool EventFrame(const Event &event);
|
||||
void WaterFrame(float aTime, float rTime);
|
||||
|
@ -191,6 +199,7 @@ protected:
|
|||
void MotorParticle(float aTime, float rTime);
|
||||
void WaterParticle(float aTime, Math::Vector pos, ObjectType type, float floor, float advance, float turn);
|
||||
void WheelParticle(int color, float width);
|
||||
void SetFalling();
|
||||
|
||||
protected:
|
||||
Gfx::CEngine* m_engine;
|
||||
|
@ -240,13 +249,16 @@ protected:
|
|||
float m_restBreakParticle;
|
||||
float m_floorLevel; // ground level
|
||||
float m_floorHeight; // height above the ground
|
||||
int m_soundChannel;
|
||||
int m_soundChannelSlide;
|
||||
int m_soundChannel;
|
||||
int m_soundChannelSlide;
|
||||
float m_soundTimePshhh;
|
||||
float m_soundTimeJostle;
|
||||
float m_soundTimeBoum;
|
||||
bool m_bSoundSlow;
|
||||
bool m_bForceUpdate;
|
||||
bool m_bLowLevel;
|
||||
float m_fallingHeight;
|
||||
float m_fallDamageFraction;
|
||||
float m_minFallingHeight;
|
||||
};
|
||||
|
||||
|
|
|
@ -253,10 +253,11 @@ std::string GetHelpFilename(const char *token)
|
|||
if ( strcmp(token, "getresearchenable" ) == 0 ) return std::string("help/") + CApplication::GetInstancePointer()->GetLanguageChar() + std::string("/cbot/getresen.txt");
|
||||
if ( strcmp(token, "getresearchdone" ) == 0 ) return std::string("help/") + CApplication::GetInstancePointer()->GetLanguageChar() + std::string("/cbot/getresdo.txt");
|
||||
if ( strcmp(token, "retobject" ) == 0 ) return std::string("help/") + CApplication::GetInstancePointer()->GetLanguageChar() + std::string("/cbot/retobj.txt");
|
||||
if ( strcmp(token, "progfunc" ) == 0 ) return std::string("help/") + CApplication::GetInstancePointer()->GetLanguageChar() + std::string("/cbot/factory.txt");
|
||||
if ( strcmp(token, "busy" ) == 0 ) return std::string("help/") + CApplication::GetInstancePointer()->GetLanguageChar() + std::string("/cbot/busy.txt");
|
||||
if ( strcmp(token, "factory" ) == 0 ) return std::string("help/") + CApplication::GetInstancePointer()->GetLanguageChar() + std::string("/cbot/factory.txt");
|
||||
if ( strcmp(token, "progfunc" ) == 0 ) return std::string("help/") + CApplication::GetInstancePointer()->GetLanguageChar() + std::string("/cbot/factory.txt");
|
||||
if ( strcmp(token, "busy" ) == 0 ) return std::string("help/") + CApplication::GetInstancePointer()->GetLanguageChar() + std::string("/cbot/busy.txt");
|
||||
if ( strcmp(token, "takeoff" ) == 0 ) return std::string("help/") + CApplication::GetInstancePointer()->GetLanguageChar() + std::string("/cbot/takeoff.txt");
|
||||
if ( strcmp(token, "research" ) == 0 ) return std::string("help/") + CApplication::GetInstancePointer()->GetLanguageChar() + std::string("/cbot/research.txt");
|
||||
if ( strcmp(token, "factory" ) == 0 ) return std::string("help/") + CApplication::GetInstancePointer()->GetLanguageChar() + std::string("/cbot/factory.txt");
|
||||
if ( strcmp(token, "destroy" ) == 0 ) return std::string("help/") + CApplication::GetInstancePointer()->GetLanguageChar() + std::string("/cbot/destroy.txt");
|
||||
if ( strcmp(token, "search" ) == 0 ) return std::string("help/") + CApplication::GetInstancePointer()->GetLanguageChar() + std::string("/cbot/search.txt");
|
||||
if ( strcmp(token, "radar" ) == 0 ) return std::string("help/") + CApplication::GetInstancePointer()->GetLanguageChar() + std::string("/cbot/radar.txt");
|
||||
|
@ -333,6 +334,7 @@ std::string GetHelpFilename(const char *token)
|
|||
if ( strcmp(token, "penup" ) == 0 ) return std::string("help/") + CApplication::GetInstancePointer()->GetLanguageChar() + std::string("/cbot/penup.txt");
|
||||
if ( strcmp(token, "pencolor" ) == 0 ) return std::string("help/") + CApplication::GetInstancePointer()->GetLanguageChar() + std::string("/cbot/pencolor.txt");
|
||||
if ( strcmp(token, "penwidth" ) == 0 ) return std::string("help/") + CApplication::GetInstancePointer()->GetLanguageChar() + std::string("/cbot/penwidth.txt");
|
||||
if ( strcmp(token, "camerafocus" ) == 0 ) return std::string("help/") + CApplication::GetInstancePointer()->GetLanguageChar() + std::string("/cbot/camerafocus.txt");
|
||||
if ( strcmp(token, "extern" ) == 0 ) return std::string("help/") + CApplication::GetInstancePointer()->GetLanguageChar() + std::string("/cbot/extern.txt");
|
||||
if ( strcmp(token, "class" ) == 0 ) return std::string("help/") + CApplication::GetInstancePointer()->GetLanguageChar() + std::string("/cbot/class.txt");
|
||||
if ( strcmp(token, "static" ) == 0 ) return std::string("help/") + CApplication::GetInstancePointer()->GetLanguageChar() + std::string("/cbot/static.txt");
|
||||
|
@ -384,6 +386,7 @@ bool IsFunction(const char *token)
|
|||
if ( strcmp(token, "busy" ) == 0 ) return true;
|
||||
if ( strcmp(token, "factory" ) == 0 ) return true;
|
||||
if ( strcmp(token, "research" ) == 0 ) return true;
|
||||
if ( strcmp(token, "takeoff" ) == 0 ) return true;
|
||||
if ( strcmp(token, "destroy" ) == 0 ) return true;
|
||||
if ( strcmp(token, "search" ) == 0 ) return true;
|
||||
if ( strcmp(token, "radar" ) == 0 ) return true;
|
||||
|
@ -439,6 +442,7 @@ bool IsFunction(const char *token)
|
|||
if ( strcmp(token, "penup" ) == 0 ) return true;
|
||||
if ( strcmp(token, "pencolor" ) == 0 ) return true;
|
||||
if ( strcmp(token, "penwidth" ) == 0 ) return true;
|
||||
if ( strcmp(token, "camerafocus" ) == 0 ) return true;
|
||||
if ( strcmp(token, "sizeof" ) == 0 ) return true;
|
||||
return false;
|
||||
}
|
||||
|
@ -477,6 +481,7 @@ const char* GetHelpText(const char *token)
|
|||
if ( strcmp(token, "busy" ) == 0 ) return "object.busy ( );";
|
||||
if ( strcmp(token, "factory" ) == 0 ) return "object.factory ( cat, program );";
|
||||
if ( strcmp(token, "research" ) == 0 ) return "object.research ( type );";
|
||||
if ( strcmp(token, "takeoff" ) == 0 ) return "object.takeoff ( );";
|
||||
if ( strcmp(token, "destroy" ) == 0 ) return "object.destroy ( );";
|
||||
if ( strcmp(token, "search" ) == 0 ) return "search ( );";
|
||||
if ( strcmp(token, "radar" ) == 0 ) return "radar ( cat, angle, focus, min, max, sens );";
|
||||
|
@ -532,6 +537,7 @@ const char* GetHelpText(const char *token)
|
|||
if ( strcmp(token, "penup" ) == 0 ) return "penup ( );";
|
||||
if ( strcmp(token, "pencolor" ) == 0 ) return "pencolor ( color );";
|
||||
if ( strcmp(token, "penwidth" ) == 0 ) return "penwidth ( width );";
|
||||
if ( strcmp(token, "camerafocus") == 0 ) return "camerafocus ( object );";
|
||||
return "";
|
||||
}
|
||||
|
||||
|
|
|
@ -35,6 +35,16 @@ char* SkipSpace(char *line)
|
|||
return line;
|
||||
}
|
||||
|
||||
std::string GetCmd(char* line)
|
||||
{
|
||||
line = SkipSpace(line);
|
||||
|
||||
int len = 0;
|
||||
for(char* x = line; *x != 0 && *x != ' ' && *x != '\t' && *x != '\n'; x++, len++);
|
||||
|
||||
return std::string(line, len);
|
||||
}
|
||||
|
||||
// Checks if a line contains a command.
|
||||
|
||||
bool Cmd(char *line, const char *token)
|
||||
|
@ -42,8 +52,15 @@ bool Cmd(char *line, const char *token)
|
|||
char* p;
|
||||
|
||||
line = SkipSpace(line);
|
||||
|
||||
p = strstr(line, token);
|
||||
return ( p == line ); // command at the beginning?
|
||||
if(p != line) return false; // command at the beginning?
|
||||
|
||||
unsigned int len = 0;
|
||||
for(char* x = p; *x != 0 && *x != ' ' && *x != '\t' && *x != '\n'; x++, len++);
|
||||
if(len != strlen(token)) return false; // ends with space?
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
// Seeking an operator.
|
||||
|
@ -238,16 +255,6 @@ ObjectType GetTypeObject(char *line, int rank, ObjectType def)
|
|||
if ( Cmd(p, "Mine" ) ) return OBJECT_BOMB;
|
||||
if ( Cmd(p, "Firework" ) ) return OBJECT_WINFIRE;
|
||||
if ( Cmd(p, "Bag" ) ) return OBJECT_BAG;
|
||||
if ( Cmd(p, "Greenery10" ) ) return OBJECT_PLANT10;
|
||||
if ( Cmd(p, "Greenery11" ) ) return OBJECT_PLANT11;
|
||||
if ( Cmd(p, "Greenery12" ) ) return OBJECT_PLANT12;
|
||||
if ( Cmd(p, "Greenery13" ) ) return OBJECT_PLANT13;
|
||||
if ( Cmd(p, "Greenery14" ) ) return OBJECT_PLANT14;
|
||||
if ( Cmd(p, "Greenery15" ) ) return OBJECT_PLANT15;
|
||||
if ( Cmd(p, "Greenery16" ) ) return OBJECT_PLANT16;
|
||||
if ( Cmd(p, "Greenery17" ) ) return OBJECT_PLANT17;
|
||||
if ( Cmd(p, "Greenery18" ) ) return OBJECT_PLANT18;
|
||||
if ( Cmd(p, "Greenery19" ) ) return OBJECT_PLANT19;
|
||||
if ( Cmd(p, "Greenery0" ) ) return OBJECT_PLANT0;
|
||||
if ( Cmd(p, "Greenery1" ) ) return OBJECT_PLANT1;
|
||||
if ( Cmd(p, "Greenery2" ) ) return OBJECT_PLANT2;
|
||||
|
@ -258,26 +265,24 @@ ObjectType GetTypeObject(char *line, int rank, ObjectType def)
|
|||
if ( Cmd(p, "Greenery7" ) ) return OBJECT_PLANT7;
|
||||
if ( Cmd(p, "Greenery8" ) ) return OBJECT_PLANT8;
|
||||
if ( Cmd(p, "Greenery9" ) ) return OBJECT_PLANT9;
|
||||
if ( Cmd(p, "Greenery10" ) ) return OBJECT_PLANT10;
|
||||
if ( Cmd(p, "Greenery11" ) ) return OBJECT_PLANT11;
|
||||
if ( Cmd(p, "Greenery12" ) ) return OBJECT_PLANT12;
|
||||
if ( Cmd(p, "Greenery13" ) ) return OBJECT_PLANT13;
|
||||
if ( Cmd(p, "Greenery14" ) ) return OBJECT_PLANT14;
|
||||
if ( Cmd(p, "Greenery15" ) ) return OBJECT_PLANT15;
|
||||
if ( Cmd(p, "Greenery16" ) ) return OBJECT_PLANT16;
|
||||
if ( Cmd(p, "Greenery17" ) ) return OBJECT_PLANT17;
|
||||
if ( Cmd(p, "Greenery18" ) ) return OBJECT_PLANT18;
|
||||
if ( Cmd(p, "Greenery19" ) ) return OBJECT_PLANT19;
|
||||
if ( Cmd(p, "Tree0" ) ) return OBJECT_TREE0;
|
||||
if ( Cmd(p, "Tree1" ) ) return OBJECT_TREE1;
|
||||
if ( Cmd(p, "Tree2" ) ) return OBJECT_TREE2;
|
||||
if ( Cmd(p, "Tree3" ) ) return OBJECT_TREE3;
|
||||
if ( Cmd(p, "Tree4" ) ) return OBJECT_TREE4;
|
||||
if ( Cmd(p, "Tree5" ) ) return OBJECT_TREE5;
|
||||
if ( Cmd(p, "Tree6" ) ) return OBJECT_TREE6;
|
||||
if ( Cmd(p, "Tree7" ) ) return OBJECT_TREE7;
|
||||
if ( Cmd(p, "Tree8" ) ) return OBJECT_TREE8;
|
||||
if ( Cmd(p, "Tree9" ) ) return OBJECT_TREE9;
|
||||
if ( Cmd(p, "Mushroom0" ) ) return OBJECT_MUSHROOM0;
|
||||
if ( Cmd(p, "Mushroom1" ) ) return OBJECT_MUSHROOM1;
|
||||
if ( Cmd(p, "Mushroom2" ) ) return OBJECT_MUSHROOM2;
|
||||
if ( Cmd(p, "Mushroom3" ) ) return OBJECT_MUSHROOM3;
|
||||
if ( Cmd(p, "Mushroom4" ) ) return OBJECT_MUSHROOM4;
|
||||
if ( Cmd(p, "Mushroom5" ) ) return OBJECT_MUSHROOM5;
|
||||
if ( Cmd(p, "Mushroom6" ) ) return OBJECT_MUSHROOM6;
|
||||
if ( Cmd(p, "Mushroom7" ) ) return OBJECT_MUSHROOM7;
|
||||
if ( Cmd(p, "Mushroom8" ) ) return OBJECT_MUSHROOM8;
|
||||
if ( Cmd(p, "Mushroom9" ) ) return OBJECT_MUSHROOM9;
|
||||
if ( Cmd(p, "Home" ) ) return OBJECT_HOME1;
|
||||
if ( Cmd(p, "Derrick" ) ) return OBJECT_DERRICK;
|
||||
if ( Cmd(p, "BotFactory" ) ) return OBJECT_FACTORY;
|
||||
|
@ -323,47 +328,6 @@ ObjectType GetTypeObject(char *line, int rank, ObjectType def)
|
|||
if ( Cmd(p, "Barrier1" ) ) return OBJECT_BARRIER1;
|
||||
if ( Cmd(p, "Barrier2" ) ) return OBJECT_BARRIER2;
|
||||
if ( Cmd(p, "Barrier3" ) ) return OBJECT_BARRIER3;
|
||||
if ( Cmd(p, "Barrier4" ) ) return OBJECT_BARRIER4;
|
||||
if ( Cmd(p, "Teen40" ) ) return OBJECT_TEEN40;
|
||||
if ( Cmd(p, "Teen41" ) ) return OBJECT_TEEN41;
|
||||
if ( Cmd(p, "Teen42" ) ) return OBJECT_TEEN42;
|
||||
if ( Cmd(p, "Teen43" ) ) return OBJECT_TEEN43;
|
||||
if ( Cmd(p, "Teen44" ) ) return OBJECT_TEEN44;
|
||||
if ( Cmd(p, "Teen45" ) ) return OBJECT_TEEN45;
|
||||
if ( Cmd(p, "Teen46" ) ) return OBJECT_TEEN46;
|
||||
if ( Cmd(p, "Teen47" ) ) return OBJECT_TEEN47;
|
||||
if ( Cmd(p, "Teen48" ) ) return OBJECT_TEEN48;
|
||||
if ( Cmd(p, "Teen49" ) ) return OBJECT_TEEN49;
|
||||
if ( Cmd(p, "Teen30" ) ) return OBJECT_TEEN30;
|
||||
if ( Cmd(p, "Teen31" ) ) return OBJECT_TEEN31;
|
||||
if ( Cmd(p, "Teen32" ) ) return OBJECT_TEEN32;
|
||||
if ( Cmd(p, "Teen33" ) ) return OBJECT_TEEN33;
|
||||
if ( Cmd(p, "Stone" ) ) return OBJECT_TEEN34;
|
||||
if ( Cmd(p, "Teen35" ) ) return OBJECT_TEEN35;
|
||||
if ( Cmd(p, "Teen36" ) ) return OBJECT_TEEN36;
|
||||
if ( Cmd(p, "Teen37" ) ) return OBJECT_TEEN37;
|
||||
if ( Cmd(p, "Teen38" ) ) return OBJECT_TEEN38;
|
||||
if ( Cmd(p, "Teen39" ) ) return OBJECT_TEEN39;
|
||||
if ( Cmd(p, "Teen20" ) ) return OBJECT_TEEN20;
|
||||
if ( Cmd(p, "Teen21" ) ) return OBJECT_TEEN21;
|
||||
if ( Cmd(p, "Teen22" ) ) return OBJECT_TEEN22;
|
||||
if ( Cmd(p, "Teen23" ) ) return OBJECT_TEEN23;
|
||||
if ( Cmd(p, "Teen24" ) ) return OBJECT_TEEN24;
|
||||
if ( Cmd(p, "Teen25" ) ) return OBJECT_TEEN25;
|
||||
if ( Cmd(p, "Teen26" ) ) return OBJECT_TEEN26;
|
||||
if ( Cmd(p, "Teen27" ) ) return OBJECT_TEEN27;
|
||||
if ( Cmd(p, "Teen28" ) ) return OBJECT_TEEN28;
|
||||
if ( Cmd(p, "Teen29" ) ) return OBJECT_TEEN29;
|
||||
if ( Cmd(p, "Teen10" ) ) return OBJECT_TEEN10;
|
||||
if ( Cmd(p, "Teen11" ) ) return OBJECT_TEEN11;
|
||||
if ( Cmd(p, "Teen12" ) ) return OBJECT_TEEN12;
|
||||
if ( Cmd(p, "Teen13" ) ) return OBJECT_TEEN13;
|
||||
if ( Cmd(p, "Teen14" ) ) return OBJECT_TEEN14;
|
||||
if ( Cmd(p, "Teen15" ) ) return OBJECT_TEEN15;
|
||||
if ( Cmd(p, "Teen16" ) ) return OBJECT_TEEN16;
|
||||
if ( Cmd(p, "Teen17" ) ) return OBJECT_TEEN17;
|
||||
if ( Cmd(p, "Teen18" ) ) return OBJECT_TEEN18;
|
||||
if ( Cmd(p, "Teen19" ) ) return OBJECT_TEEN19;
|
||||
if ( Cmd(p, "Teen0" ) ) return OBJECT_TEEN0;
|
||||
if ( Cmd(p, "Teen1" ) ) return OBJECT_TEEN1;
|
||||
if ( Cmd(p, "Teen2" ) ) return OBJECT_TEEN2;
|
||||
|
@ -374,26 +338,51 @@ ObjectType GetTypeObject(char *line, int rank, ObjectType def)
|
|||
if ( Cmd(p, "Teen7" ) ) return OBJECT_TEEN7;
|
||||
if ( Cmd(p, "Teen8" ) ) return OBJECT_TEEN8;
|
||||
if ( Cmd(p, "Teen9" ) ) return OBJECT_TEEN9;
|
||||
if ( Cmd(p, "Teen10" ) ) return OBJECT_TEEN10;
|
||||
if ( Cmd(p, "Teen11" ) ) return OBJECT_TEEN11;
|
||||
if ( Cmd(p, "Teen12" ) ) return OBJECT_TEEN12;
|
||||
if ( Cmd(p, "Teen13" ) ) return OBJECT_TEEN13;
|
||||
if ( Cmd(p, "Teen14" ) ) return OBJECT_TEEN14;
|
||||
if ( Cmd(p, "Teen15" ) ) return OBJECT_TEEN15;
|
||||
if ( Cmd(p, "Teen16" ) ) return OBJECT_TEEN16;
|
||||
if ( Cmd(p, "Teen17" ) ) return OBJECT_TEEN17;
|
||||
if ( Cmd(p, "Teen18" ) ) return OBJECT_TEEN18;
|
||||
if ( Cmd(p, "Teen19" ) ) return OBJECT_TEEN19;
|
||||
if ( Cmd(p, "Teen20" ) ) return OBJECT_TEEN20;
|
||||
if ( Cmd(p, "Teen21" ) ) return OBJECT_TEEN21;
|
||||
if ( Cmd(p, "Teen22" ) ) return OBJECT_TEEN22;
|
||||
if ( Cmd(p, "Teen23" ) ) return OBJECT_TEEN23;
|
||||
if ( Cmd(p, "Teen24" ) ) return OBJECT_TEEN24;
|
||||
if ( Cmd(p, "Teen25" ) ) return OBJECT_TEEN25;
|
||||
if ( Cmd(p, "Teen26" ) ) return OBJECT_TEEN26;
|
||||
if ( Cmd(p, "Teen27" ) ) return OBJECT_TEEN27;
|
||||
if ( Cmd(p, "Teen28" ) ) return OBJECT_TEEN28;
|
||||
if ( Cmd(p, "Teen29" ) ) return OBJECT_TEEN29;
|
||||
if ( Cmd(p, "Teen30" ) ) return OBJECT_TEEN30;
|
||||
if ( Cmd(p, "Teen31" ) ) return OBJECT_TEEN31;
|
||||
if ( Cmd(p, "Teen32" ) ) return OBJECT_TEEN32;
|
||||
if ( Cmd(p, "Teen33" ) ) return OBJECT_TEEN33;
|
||||
if ( Cmd(p, "Stone" ) ) return OBJECT_TEEN34;
|
||||
if ( Cmd(p, "Teen35" ) ) return OBJECT_TEEN35;
|
||||
if ( Cmd(p, "Teen36" ) ) return OBJECT_TEEN36;
|
||||
if ( Cmd(p, "Teen37" ) ) return OBJECT_TEEN37;
|
||||
if ( Cmd(p, "Teen38" ) ) return OBJECT_TEEN38;
|
||||
if ( Cmd(p, "Teen39" ) ) return OBJECT_TEEN39;
|
||||
if ( Cmd(p, "Teen40" ) ) return OBJECT_TEEN40;
|
||||
if ( Cmd(p, "Teen41" ) ) return OBJECT_TEEN41;
|
||||
if ( Cmd(p, "Teen42" ) ) return OBJECT_TEEN42;
|
||||
if ( Cmd(p, "Teen43" ) ) return OBJECT_TEEN43;
|
||||
if ( Cmd(p, "Teen44" ) ) return OBJECT_TEEN44;
|
||||
if ( Cmd(p, "Quartz0" ) ) return OBJECT_QUARTZ0;
|
||||
if ( Cmd(p, "Quartz1" ) ) return OBJECT_QUARTZ1;
|
||||
if ( Cmd(p, "Quartz2" ) ) return OBJECT_QUARTZ2;
|
||||
if ( Cmd(p, "Quartz3" ) ) return OBJECT_QUARTZ3;
|
||||
if ( Cmd(p, "Quartz4" ) ) return OBJECT_QUARTZ4;
|
||||
if ( Cmd(p, "Quartz5" ) ) return OBJECT_QUARTZ5;
|
||||
if ( Cmd(p, "Quartz6" ) ) return OBJECT_QUARTZ6;
|
||||
if ( Cmd(p, "Quartz7" ) ) return OBJECT_QUARTZ7;
|
||||
if ( Cmd(p, "Quartz8" ) ) return OBJECT_QUARTZ8;
|
||||
if ( Cmd(p, "Quartz9" ) ) return OBJECT_QUARTZ9;
|
||||
if ( Cmd(p, "MegaStalk0" ) ) return OBJECT_ROOT0;
|
||||
if ( Cmd(p, "MegaStalk1" ) ) return OBJECT_ROOT1;
|
||||
if ( Cmd(p, "MegaStalk2" ) ) return OBJECT_ROOT2;
|
||||
if ( Cmd(p, "MegaStalk3" ) ) return OBJECT_ROOT3;
|
||||
if ( Cmd(p, "MegaStalk4" ) ) return OBJECT_ROOT4;
|
||||
if ( Cmd(p, "MegaStalk5" ) ) return OBJECT_ROOT5;
|
||||
if ( Cmd(p, "MegaStalk6" ) ) return OBJECT_ROOT6;
|
||||
if ( Cmd(p, "MegaStalk7" ) ) return OBJECT_ROOT7;
|
||||
if ( Cmd(p, "MegaStalk8" ) ) return OBJECT_ROOT8;
|
||||
if ( Cmd(p, "MegaStalk9" ) ) return OBJECT_ROOT9;
|
||||
if ( Cmd(p, "ApolloLEM" ) ) return OBJECT_APOLLO1;
|
||||
if ( Cmd(p, "ApolloJeep" ) ) return OBJECT_APOLLO2;
|
||||
if ( Cmd(p, "ApolloFlag" ) ) return OBJECT_APOLLO3;
|
||||
|
@ -438,11 +427,7 @@ const char* GetTypeObject(ObjectType type)
|
|||
if ( type == OBJECT_MOBILEdr ) return "Scribbler";
|
||||
if ( type == OBJECT_MARKPOWER ) return "PowerSpot";
|
||||
if ( type == OBJECT_MARKSTONE ) return "TitaniumSpot";
|
||||
#if _GERMAN | _WG
|
||||
if ( type == OBJECT_MARKURANIUM ) return "PlatinumSpot";
|
||||
#else
|
||||
if ( type == OBJECT_MARKURANIUM ) return "UraniumSpot";
|
||||
#endif
|
||||
if ( type == OBJECT_MARKKEYa ) return "KeyASpot";
|
||||
if ( type == OBJECT_MARKKEYb ) return "KeyBSpot";
|
||||
if ( type == OBJECT_MARKKEYc ) return "KeyCSpot";
|
||||
|
@ -454,17 +439,9 @@ const char* GetTypeObject(ObjectType type)
|
|||
if ( type == OBJECT_FLAGy ) return "YellowFlag";
|
||||
if ( type == OBJECT_FLAGv ) return "VioletFlag";
|
||||
if ( type == OBJECT_POWER ) return "PowerCell";
|
||||
#if _GERMAN | _WG
|
||||
if ( type == OBJECT_ATOMIC ) return "FuelCell";
|
||||
#else
|
||||
if ( type == OBJECT_ATOMIC ) return "NuclearCell";
|
||||
#endif
|
||||
if ( type == OBJECT_STONE ) return "TitaniumOre";
|
||||
#if _GERMAN | _WG
|
||||
if ( type == OBJECT_URANIUM ) return "PlatinumOre";
|
||||
#else
|
||||
if ( type == OBJECT_URANIUM ) return "UraniumOre";
|
||||
#endif
|
||||
if ( type == OBJECT_METAL ) return "Titanium";
|
||||
if ( type == OBJECT_BULLET ) return "OrgaMatter";
|
||||
if ( type == OBJECT_BBOX ) return "BlackBox";
|
||||
|
@ -507,20 +484,8 @@ const char* GetTypeObject(ObjectType type)
|
|||
if ( type == OBJECT_TREE3 ) return "Tree3";
|
||||
if ( type == OBJECT_TREE4 ) return "Tree4";
|
||||
if ( type == OBJECT_TREE5 ) return "Tree5";
|
||||
if ( type == OBJECT_TREE6 ) return "Tree6";
|
||||
if ( type == OBJECT_TREE7 ) return "Tree7";
|
||||
if ( type == OBJECT_TREE8 ) return "Tree8";
|
||||
if ( type == OBJECT_TREE9 ) return "Tree9";
|
||||
if ( type == OBJECT_MUSHROOM0 ) return "Mushroom0";
|
||||
if ( type == OBJECT_MUSHROOM1 ) return "Mushroom1";
|
||||
if ( type == OBJECT_MUSHROOM2 ) return "Mushroom2";
|
||||
if ( type == OBJECT_MUSHROOM3 ) return "Mushroom3";
|
||||
if ( type == OBJECT_MUSHROOM4 ) return "Mushroom4";
|
||||
if ( type == OBJECT_MUSHROOM5 ) return "Mushroom5";
|
||||
if ( type == OBJECT_MUSHROOM6 ) return "Mushroom6";
|
||||
if ( type == OBJECT_MUSHROOM7 ) return "Mushroom7";
|
||||
if ( type == OBJECT_MUSHROOM8 ) return "Mushroom8";
|
||||
if ( type == OBJECT_MUSHROOM9 ) return "Mushroom9";
|
||||
if ( type == OBJECT_HOME1 ) return "Home";
|
||||
if ( type == OBJECT_DERRICK ) return "Derrick";
|
||||
if ( type == OBJECT_FACTORY ) return "BotFactory";
|
||||
|
@ -535,11 +500,7 @@ const char* GetTypeObject(ObjectType type)
|
|||
if ( type == OBJECT_INFO ) return "ExchangePost";
|
||||
if ( type == OBJECT_ENERGY ) return "PowerPlant";
|
||||
if ( type == OBJECT_LABO ) return "AutoLab";
|
||||
#if _GERMAN | _WG
|
||||
if ( type == OBJECT_NUCLEAR ) return "FuelCellPlant";
|
||||
#else
|
||||
if ( type == OBJECT_NUCLEAR ) return "NuclearPlant";
|
||||
#endif
|
||||
if ( type == OBJECT_PARA ) return "PowerCaptor";
|
||||
if ( type == OBJECT_SAFE ) return "Vault";
|
||||
if ( type == OBJECT_HUSTON ) return "Houston";
|
||||
|
@ -570,7 +531,6 @@ const char* GetTypeObject(ObjectType type)
|
|||
if ( type == OBJECT_BARRIER1 ) return "Barrier1";
|
||||
if ( type == OBJECT_BARRIER2 ) return "Barrier2";
|
||||
if ( type == OBJECT_BARRIER3 ) return "Barrier3";
|
||||
if ( type == OBJECT_BARRIER4 ) return "Barrier4";
|
||||
if ( type == OBJECT_TEEN0 ) return "Teen0";
|
||||
if ( type == OBJECT_TEEN1 ) return "Teen1";
|
||||
if ( type == OBJECT_TEEN2 ) return "Teen2";
|
||||
|
@ -616,31 +576,16 @@ const char* GetTypeObject(ObjectType type)
|
|||
if ( type == OBJECT_TEEN42 ) return "Teen42";
|
||||
if ( type == OBJECT_TEEN43 ) return "Teen43";
|
||||
if ( type == OBJECT_TEEN44 ) return "Teen44";
|
||||
if ( type == OBJECT_TEEN45 ) return "Teen45";
|
||||
if ( type == OBJECT_TEEN46 ) return "Teen46";
|
||||
if ( type == OBJECT_TEEN47 ) return "Teen47";
|
||||
if ( type == OBJECT_TEEN48 ) return "Teen48";
|
||||
if ( type == OBJECT_TEEN49 ) return "Teen49";
|
||||
if ( type == OBJECT_QUARTZ0 ) return "Quartz0";
|
||||
if ( type == OBJECT_QUARTZ1 ) return "Quartz1";
|
||||
if ( type == OBJECT_QUARTZ2 ) return "Quartz2";
|
||||
if ( type == OBJECT_QUARTZ3 ) return "Quartz3";
|
||||
if ( type == OBJECT_QUARTZ4 ) return "Quartz4";
|
||||
if ( type == OBJECT_QUARTZ5 ) return "Quartz5";
|
||||
if ( type == OBJECT_QUARTZ6 ) return "Quartz6";
|
||||
if ( type == OBJECT_QUARTZ7 ) return "Quartz7";
|
||||
if ( type == OBJECT_QUARTZ8 ) return "Quartz8";
|
||||
if ( type == OBJECT_QUARTZ9 ) return "Quartz9";
|
||||
if ( type == OBJECT_ROOT0 ) return "MegaStalk0";
|
||||
if ( type == OBJECT_ROOT1 ) return "MegaStalk1";
|
||||
if ( type == OBJECT_ROOT2 ) return "MegaStalk2";
|
||||
if ( type == OBJECT_ROOT3 ) return "MegaStalk3";
|
||||
if ( type == OBJECT_ROOT4 ) return "MegaStalk4";
|
||||
if ( type == OBJECT_ROOT5 ) return "MegaStalk5";
|
||||
if ( type == OBJECT_ROOT6 ) return "MegaStalk6";
|
||||
if ( type == OBJECT_ROOT7 ) return "MegaStalk7";
|
||||
if ( type == OBJECT_ROOT8 ) return "MegaStalk8";
|
||||
if ( type == OBJECT_ROOT9 ) return "MegaStalk9";
|
||||
if ( type == OBJECT_APOLLO1 ) return "ApolloLEM";
|
||||
if ( type == OBJECT_APOLLO2 ) return "ApolloJeep";
|
||||
if ( type == OBJECT_APOLLO3 ) return "ApolloFlag";
|
||||
|
@ -800,6 +745,62 @@ const char* GetCamera(Gfx::CameraType type)
|
|||
return "BACK";
|
||||
}
|
||||
|
||||
// Returns the type of drive.
|
||||
|
||||
DriveType GetDrive(char *line, int rank)
|
||||
{
|
||||
char* p;
|
||||
|
||||
p = SearchArg(line, rank);
|
||||
if ( *p == 0 ) return DRIVE_OTHER;
|
||||
|
||||
if ( Cmd(p, "Wheeled" ) ) return DRIVE_WHEELED;
|
||||
if ( Cmd(p, "Tracked" ) ) return DRIVE_TRACKED;
|
||||
if ( Cmd(p, "Winged" ) ) return DRIVE_WINGED;
|
||||
if ( Cmd(p, "Legged" ) ) return DRIVE_LEGGED;
|
||||
|
||||
return DRIVE_OTHER;
|
||||
}
|
||||
|
||||
// Returns the name of a drive.
|
||||
|
||||
const char* GetDrive(DriveType type)
|
||||
{
|
||||
if ( type == DRIVE_WHEELED ) return "Wheeled";
|
||||
if ( type == DRIVE_TRACKED ) return "Tracked";
|
||||
if ( type == DRIVE_WINGED ) return "Winged";
|
||||
if ( type == DRIVE_LEGGED ) return "Legged";
|
||||
return "Other";
|
||||
}
|
||||
|
||||
// Returns the type of tool.
|
||||
|
||||
ToolType GetTool(char *line, int rank)
|
||||
{
|
||||
char* p;
|
||||
|
||||
p = SearchArg(line, rank);
|
||||
if ( *p == 0 ) return TOOL_OTHER;
|
||||
|
||||
if ( Cmd(p, "Grabber" ) ) return TOOL_GRABBER;
|
||||
if ( Cmd(p, "Sniffer" ) ) return TOOL_SNIFFER;
|
||||
if ( Cmd(p, "Shooter" ) ) return TOOL_SHOOTER;
|
||||
if ( Cmd(p, "OrgaShooter" ) ) return TOOL_ORGASHOOTER;
|
||||
|
||||
return TOOL_OTHER;
|
||||
}
|
||||
|
||||
// Returns the name of a tool.
|
||||
|
||||
const char* GetTool(ToolType type)
|
||||
{
|
||||
if ( type == TOOL_GRABBER ) return "Grabber";
|
||||
if ( type == TOOL_SNIFFER ) return "Sniffer";
|
||||
if ( type == TOOL_SHOOTER ) return "Shooter";
|
||||
if ( type == TOOL_ORGASHOOTER ) return "OrgaShooter";
|
||||
return "Other";
|
||||
}
|
||||
|
||||
// Returns an integer.
|
||||
|
||||
int OpInt(char *line, const char *op, int def)
|
||||
|
@ -887,6 +888,24 @@ Gfx::CameraType OpCamera(char *line, const char *op)
|
|||
return GetCamera(line, 0);
|
||||
}
|
||||
|
||||
// Returns the type of drive.
|
||||
|
||||
DriveType OpDrive(char *line, const char *op)
|
||||
{
|
||||
line = SearchOp(line, op);
|
||||
if ( *line == 0 ) return DRIVE_OTHER;
|
||||
return GetDrive(line, 0);
|
||||
}
|
||||
|
||||
// Returns the type of tool.
|
||||
|
||||
ToolType OpTool(char *line, const char *op)
|
||||
{
|
||||
line = SearchOp(line, op);
|
||||
if ( *line == 0 ) return TOOL_OTHER;
|
||||
return GetTool(line, 0);
|
||||
}
|
||||
|
||||
// Returns the type of a building.
|
||||
|
||||
int OpBuild(char *line, const char *op)
|
||||
|
|
|
@ -30,6 +30,7 @@
|
|||
|
||||
// Procedures.
|
||||
|
||||
extern std::string GetCmd(char* line);
|
||||
extern bool Cmd(char *line, const char *token);
|
||||
extern char* SearchOp(char *line, const char *op);
|
||||
|
||||
|
@ -45,6 +46,10 @@ extern int GetResearch(char *line, int rank);
|
|||
extern Gfx::PyroType GetPyro(char *line, int rank);
|
||||
extern Gfx::CameraType GetCamera(char *line, int rank);
|
||||
extern const char* GetCamera(Gfx::CameraType type);
|
||||
extern DriveType GetDrive(char *line, int rank);
|
||||
extern const char* GetDrive(DriveType type);
|
||||
extern ToolType GetTool(char *line, int rank);
|
||||
extern const char* GetTool(ToolType type);
|
||||
|
||||
extern int OpInt(char *line, const char *op, int def);
|
||||
extern float OpFloat(char *line, const char *op, float def);
|
||||
|
@ -55,6 +60,8 @@ extern Gfx::EngineObjectType OpTypeTerrain(char *line, const char *op, Gfx::Engi
|
|||
extern int OpResearch(char *line, const char *op);
|
||||
extern Gfx::PyroType OpPyro(char *line, const char *op);
|
||||
extern Gfx::CameraType OpCamera(char *line, const char *op);
|
||||
extern DriveType OpDrive(char *line, const char *op);
|
||||
extern ToolType OpTool(char *line, const char *op);
|
||||
extern int OpBuild(char *line, const char *op);
|
||||
extern Math::Vector OpPos(char *line, const char *op);
|
||||
extern Math::Vector OpDir(char *line, const char *op);
|
||||
|
|
|
@ -18,10 +18,12 @@
|
|||
#include "script/script.h"
|
||||
|
||||
#include "app/app.h"
|
||||
#include "app/gamedata.h"
|
||||
|
||||
#include "common/global.h"
|
||||
#include "common/iman.h"
|
||||
#include "common/restext.h"
|
||||
#include "common/stringutils.h"
|
||||
|
||||
#include "graphics/engine/terrain.h"
|
||||
#include "graphics/engine/water.h"
|
||||
|
@ -37,6 +39,7 @@
|
|||
|
||||
#include "object/auto/auto.h"
|
||||
#include "object/auto/autofactory.h"
|
||||
#include "object/auto/autobase.h"
|
||||
|
||||
#include "physics/physics.h"
|
||||
|
||||
|
@ -678,10 +681,23 @@ bool CScript::rFactory(CBotVar* thisclass, CBotVar* var, CBotVar* result, int& e
|
|||
classVars = classVars->GetNext(); // "id"
|
||||
int rank = classVars->GetValInt();
|
||||
CObject* factory = CObjectManager::GetInstancePointer()->SearchInstance(rank);
|
||||
CAutoFactory* automat = static_cast<CAutoFactory*>(factory->GetAuto());
|
||||
if (factory == nullptr) {
|
||||
exception = ERR_GENERIC;
|
||||
result->SetValInt(ERR_GENERIC);
|
||||
CLogger::GetInstancePointer()->Error("in object.factory() - factory is nullptr");
|
||||
return false;
|
||||
}
|
||||
|
||||
if ( thisType == OBJECT_FACTORY )
|
||||
{
|
||||
CAutoFactory* automat = static_cast<CAutoFactory*>(factory->GetAuto());
|
||||
if(automat == nullptr) {
|
||||
exception = ERR_GENERIC;
|
||||
result->SetValInt(ERR_GENERIC);
|
||||
CLogger::GetInstancePointer()->Error("in object.factory() - automat is nullptr");
|
||||
return false;
|
||||
}
|
||||
|
||||
bool bEnable = false;
|
||||
|
||||
if ( type == OBJECT_MOBILEwa )
|
||||
|
@ -900,6 +916,54 @@ bool CScript::rResearch(CBotVar* thisclass, CBotVar* var, CBotVar* result, int&
|
|||
return true;
|
||||
}
|
||||
|
||||
// Instruction "object.takeoff()"
|
||||
|
||||
bool CScript::rTakeOff(CBotVar* thisclass, CBotVar* var, CBotVar* result, int& exception)
|
||||
{
|
||||
Error err;
|
||||
|
||||
exception = 0;
|
||||
|
||||
CBotVar* classVars = thisclass->GetItemList(); // "category"
|
||||
ObjectType thisType = static_cast<ObjectType>(classVars->GetValInt());
|
||||
classVars = classVars->GetNext(); // "position"
|
||||
classVars = classVars->GetNext(); // "orientation"
|
||||
classVars = classVars->GetNext(); // "pitch"
|
||||
classVars = classVars->GetNext(); // "roll"
|
||||
classVars = classVars->GetNext(); // "energyLevel"
|
||||
classVars = classVars->GetNext(); // "shieldLevel"
|
||||
classVars = classVars->GetNext(); // "temperature"
|
||||
classVars = classVars->GetNext(); // "altitude"
|
||||
classVars = classVars->GetNext(); // "lifeTime"
|
||||
classVars = classVars->GetNext(); // "material"
|
||||
classVars = classVars->GetNext(); // "energyCell"
|
||||
classVars = classVars->GetNext(); // "load"
|
||||
classVars = classVars->GetNext(); // "id"
|
||||
int rank = classVars->GetValInt();
|
||||
CObject* center = CObjectManager::GetInstancePointer()->SearchInstance(rank);
|
||||
CAuto* automat = center->GetAuto();
|
||||
|
||||
if ( thisType == OBJECT_BASE )
|
||||
{
|
||||
err = (static_cast<CAutoBase*>(automat))->TakeOff(false);
|
||||
} else
|
||||
err = ERR_WRONG_OBJ;
|
||||
|
||||
if ( err != ERR_OK )
|
||||
{
|
||||
result->SetValInt(err); // return error
|
||||
//TODO: if ( script->m_errMode == ERM_STOP )
|
||||
if( true )
|
||||
{
|
||||
exception = err;
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
// Compilation of the instruction "delete(rank[, exploType[, force]])".
|
||||
|
||||
CBotTypResult CScript::cDelete(CBotVar* &var, void* user)
|
||||
|
@ -1330,7 +1394,7 @@ bool CScript::Process(CScript* script, CBotVar* result, int &exception)
|
|||
|
||||
if ( err == ERR_STOP ) err = ERR_OK;
|
||||
result->SetValInt(err); // indicates the error or ok
|
||||
if ( err != ERR_OK && script->m_errMode == ERM_STOP )
|
||||
if ( ShouldProcessStop(err, script->m_errMode) )
|
||||
{
|
||||
exception = err;
|
||||
return false;
|
||||
|
@ -1344,6 +1408,21 @@ bool CScript::Process(CScript* script, CBotVar* result, int &exception)
|
|||
}
|
||||
|
||||
|
||||
// Returns true if error code means real error and exception must be thrown
|
||||
|
||||
bool CScript::ShouldProcessStop(Error err, int errMode)
|
||||
{
|
||||
// aim impossible - not a real error
|
||||
if ( err == ERR_AIM_IMPOSSIBLE )
|
||||
return false;
|
||||
|
||||
if ( err != ERR_OK && errMode == ERM_STOP )
|
||||
return true;
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
// Compilation of the instruction "detect(type)".
|
||||
|
||||
CBotTypResult CScript::cDetect(CBotVar* &var, void* user)
|
||||
|
@ -1576,7 +1655,7 @@ CBotTypResult CScript::cCanBuild(CBotVar* &var, void* user)
|
|||
return CBotTypResult(CBotTypBoolean);
|
||||
}
|
||||
|
||||
// Instruction "canbuid ( category );"
|
||||
// Instruction "canbuild ( category );"
|
||||
// returns true if this building can be built
|
||||
|
||||
bool CScript::rCanBuild(CBotVar* var, CBotVar* result, int& exception, void* user)
|
||||
|
@ -1602,7 +1681,7 @@ bool CScript::rCanBuild(CBotVar* var, CBotVar* result, int& exception, void* use
|
|||
(category == OBJECT_DESTROYER && (g_build & BUILD_DESTROYER)))
|
||||
{
|
||||
|
||||
//if we want to build not researched one
|
||||
// if we want to build not researched one
|
||||
if ( (category == OBJECT_TOWER && !(g_researchDone & RESEARCH_TOWER)) ||
|
||||
(category == OBJECT_NUCLEAR && !(g_researchDone & RESEARCH_ATOMIC))
|
||||
)
|
||||
|
@ -1646,7 +1725,7 @@ bool CScript::rBuild(CBotVar* var, CBotVar* result, int& exception, void* user)
|
|||
}
|
||||
else
|
||||
{
|
||||
category = static_cast<ObjectType>(var->GetValInt()); //get category parameter
|
||||
category = static_cast<ObjectType>(var->GetValInt()); // get category parameter
|
||||
if ( (category == OBJECT_DERRICK && (g_build & BUILD_DERRICK)) ||
|
||||
(category == OBJECT_FACTORY && (g_build & BUILD_FACTORY)) ||
|
||||
(category == OBJECT_STATION && (g_build & BUILD_STATION)) ||
|
||||
|
@ -1663,7 +1742,7 @@ bool CScript::rBuild(CBotVar* var, CBotVar* result, int& exception, void* user)
|
|||
(category == OBJECT_DESTROYER && (g_build & BUILD_DESTROYER)))
|
||||
{
|
||||
|
||||
//if we want to build not researched one
|
||||
// if we want to build not researched one
|
||||
if ( (category == OBJECT_TOWER && !(g_researchDone & RESEARCH_TOWER)) ||
|
||||
(category == OBJECT_NUCLEAR && !(g_researchDone & RESEARCH_ATOMIC))
|
||||
)
|
||||
|
@ -1676,8 +1755,11 @@ bool CScript::rBuild(CBotVar* var, CBotVar* result, int& exception, void* user)
|
|||
}
|
||||
|
||||
}
|
||||
|
||||
if (pThis->GetIgnoreBuildCheck())
|
||||
err = ERR_OK;
|
||||
|
||||
if (err == ERR_OK && script->m_primaryTask == 0) //if we can build and no task is present
|
||||
if (err == ERR_OK && script->m_primaryTask == 0) // if we can build and no task is present
|
||||
{
|
||||
script->m_primaryTask = new CTaskManager(script->m_object);
|
||||
err = script->m_primaryTask->StartTaskBuild(category);
|
||||
|
@ -1688,9 +1770,9 @@ bool CScript::rBuild(CBotVar* var, CBotVar* result, int& exception, void* user)
|
|||
script->m_primaryTask = 0;
|
||||
}
|
||||
}
|
||||
//When script is waiting for finishing this task, it sets ERR_OK, and continues executing Process
|
||||
//without creating new task. I think, there was a problem with previous version in release configuration
|
||||
//It did not init error variable in this situation, and code tried to use variable with trash inside
|
||||
// When script is waiting for finishing this task, it sets ERR_OK, and continues executing Process
|
||||
// without creating new task. I think, there was a problem with previous version in release configuration
|
||||
// It did not init error variable in this situation, and code tried to use variable with trash inside
|
||||
}
|
||||
|
||||
if ( err != ERR_OK )
|
||||
|
@ -1820,52 +1902,10 @@ bool CScript::rProduce(CBotVar* var, CBotVar* result, int& exception, void* user
|
|||
}
|
||||
}
|
||||
|
||||
if ( type == OBJECT_FRET ||
|
||||
type == OBJECT_STONE ||
|
||||
type == OBJECT_URANIUM ||
|
||||
type == OBJECT_METAL ||
|
||||
type == OBJECT_POWER ||
|
||||
type == OBJECT_ATOMIC ||
|
||||
type == OBJECT_BULLET ||
|
||||
type == OBJECT_BBOX ||
|
||||
type == OBJECT_KEYa ||
|
||||
type == OBJECT_KEYb ||
|
||||
type == OBJECT_KEYc ||
|
||||
type == OBJECT_KEYd ||
|
||||
type == OBJECT_TNT ||
|
||||
type == OBJECT_SCRAP1 ||
|
||||
type == OBJECT_SCRAP2 ||
|
||||
type == OBJECT_SCRAP3 ||
|
||||
type == OBJECT_SCRAP4 ||
|
||||
type == OBJECT_SCRAP5 ||
|
||||
type == OBJECT_BOMB ||
|
||||
type == OBJECT_WAYPOINT ||
|
||||
type == OBJECT_SHOW ||
|
||||
type == OBJECT_WINFIRE ||
|
||||
type == OBJECT_BAG ||
|
||||
type == OBJECT_MARKPOWER ||
|
||||
type == OBJECT_MARKSTONE ||
|
||||
type == OBJECT_MARKURANIUM ||
|
||||
type == OBJECT_MARKKEYa ||
|
||||
type == OBJECT_MARKKEYb ||
|
||||
type == OBJECT_MARKKEYc ||
|
||||
type == OBJECT_MARKKEYd ||
|
||||
type == OBJECT_EGG )
|
||||
{
|
||||
object = new CObject();
|
||||
if ( !object->CreateResource(pos, angle, type) )
|
||||
{
|
||||
delete object;
|
||||
result->SetValInt(1); // error
|
||||
return true;
|
||||
}
|
||||
object->SetActivity(false);
|
||||
}
|
||||
else if ( type == OBJECT_MOTHER ||
|
||||
type == OBJECT_ANT ||
|
||||
type == OBJECT_SPIDER ||
|
||||
type == OBJECT_BEE ||
|
||||
type == OBJECT_WORM )
|
||||
if ( type == OBJECT_ANT ||
|
||||
type == OBJECT_SPIDER ||
|
||||
type == OBJECT_BEE ||
|
||||
type == OBJECT_WORM )
|
||||
{
|
||||
CObject* egg;
|
||||
|
||||
|
@ -1883,117 +1923,16 @@ bool CScript::rProduce(CBotVar* var, CBotVar* result, int& exception, void* user
|
|||
delete egg;
|
||||
}
|
||||
object->SetActivity(false);
|
||||
}
|
||||
else if ( type == OBJECT_PORTICO ||
|
||||
type == OBJECT_BASE ||
|
||||
type == OBJECT_DERRICK ||
|
||||
type == OBJECT_FACTORY ||
|
||||
type == OBJECT_STATION ||
|
||||
type == OBJECT_CONVERT ||
|
||||
type == OBJECT_REPAIR ||
|
||||
type == OBJECT_DESTROYER||
|
||||
type == OBJECT_TOWER ||
|
||||
type == OBJECT_NEST ||
|
||||
type == OBJECT_RESEARCH ||
|
||||
type == OBJECT_RADAR ||
|
||||
type == OBJECT_INFO ||
|
||||
type == OBJECT_ENERGY ||
|
||||
type == OBJECT_LABO ||
|
||||
type == OBJECT_NUCLEAR ||
|
||||
type == OBJECT_PARA ||
|
||||
type == OBJECT_SAFE ||
|
||||
type == OBJECT_HUSTON ||
|
||||
type == OBJECT_TARGET1 ||
|
||||
type == OBJECT_TARGET2 ||
|
||||
type == OBJECT_START ||
|
||||
type == OBJECT_END )
|
||||
{
|
||||
object = new CObject();
|
||||
if ( !object->CreateBuilding(pos, angle, 0, type) )
|
||||
} else {
|
||||
if ((type == OBJECT_POWER || type == OBJECT_ATOMIC) && power == -1.0f) power = 1.0f;
|
||||
object = CObjectManager::GetInstancePointer()->CreateObject(pos, angle, type, power);
|
||||
if ( object == nullptr )
|
||||
{
|
||||
delete object;
|
||||
result->SetValInt(1); // error
|
||||
return true;
|
||||
}
|
||||
object->SetActivity(false);
|
||||
script->m_main->CreateShortcuts();
|
||||
}
|
||||
else if ( type == OBJECT_FLAGb ||
|
||||
type == OBJECT_FLAGr ||
|
||||
type == OBJECT_FLAGg ||
|
||||
type == OBJECT_FLAGy ||
|
||||
type == OBJECT_FLAGv )
|
||||
{
|
||||
object = new CObject();
|
||||
if ( !object->CreateFlag(pos, angle, type) )
|
||||
{
|
||||
delete object;
|
||||
result->SetValInt(1); // error
|
||||
return true;
|
||||
}
|
||||
object->SetActivity(false);
|
||||
}
|
||||
else if ( type == OBJECT_HUMAN ||
|
||||
type == OBJECT_TECH ||
|
||||
type == OBJECT_TOTO ||
|
||||
type == OBJECT_MOBILEfa ||
|
||||
type == OBJECT_MOBILEta ||
|
||||
type == OBJECT_MOBILEwa ||
|
||||
type == OBJECT_MOBILEia ||
|
||||
type == OBJECT_MOBILEfc ||
|
||||
type == OBJECT_MOBILEtc ||
|
||||
type == OBJECT_MOBILEwc ||
|
||||
type == OBJECT_MOBILEic ||
|
||||
type == OBJECT_MOBILEfi ||
|
||||
type == OBJECT_MOBILEti ||
|
||||
type == OBJECT_MOBILEwi ||
|
||||
type == OBJECT_MOBILEii ||
|
||||
type == OBJECT_MOBILEfs ||
|
||||
type == OBJECT_MOBILEts ||
|
||||
type == OBJECT_MOBILEws ||
|
||||
type == OBJECT_MOBILEis ||
|
||||
type == OBJECT_MOBILErt ||
|
||||
type == OBJECT_MOBILErc ||
|
||||
type == OBJECT_MOBILErr ||
|
||||
type == OBJECT_MOBILErs ||
|
||||
type == OBJECT_MOBILEsa ||
|
||||
type == OBJECT_MOBILEtg ||
|
||||
type == OBJECT_MOBILEft ||
|
||||
type == OBJECT_MOBILEtt ||
|
||||
type == OBJECT_MOBILEwt ||
|
||||
type == OBJECT_MOBILEit ||
|
||||
type == OBJECT_MOBILEdr ||
|
||||
type == OBJECT_APOLLO2 )
|
||||
{
|
||||
object = new CObject();
|
||||
if ( !object->CreateVehicle(pos, angle, type, power, false, false) )
|
||||
{
|
||||
delete object;
|
||||
result->SetValInt(1); // error
|
||||
return true;
|
||||
}
|
||||
object->UpdateMapping();
|
||||
object->SetRange(30.0f);
|
||||
object->SetZoom(0, 1.0f);
|
||||
CPhysics* physics = object->GetPhysics();
|
||||
if ( physics != 0 )
|
||||
{
|
||||
physics->SetFreeze(false); // can move
|
||||
}
|
||||
object->SetLock(false); // vehicle useable
|
||||
// SetManual will affect bot speed
|
||||
if (type == OBJECT_MOBILEdr)
|
||||
{
|
||||
object->SetManual(true);
|
||||
}
|
||||
object->SetActivity(true);
|
||||
script->m_main->CreateShortcuts();
|
||||
}
|
||||
else
|
||||
{
|
||||
result->SetValInt(1); // impossible
|
||||
return true;
|
||||
}
|
||||
|
||||
if (name[0] != 0)
|
||||
{
|
||||
|
@ -2923,7 +2862,6 @@ bool CScript::rShield(CBotVar* var, CBotVar* result, int& exception, void* user)
|
|||
|
||||
CBotTypResult CScript::cFire(CBotVar* &var, void* user)
|
||||
{
|
||||
#if 0
|
||||
CObject* pThis = static_cast<CObject *>(user);
|
||||
ObjectType type;
|
||||
|
||||
|
@ -2931,23 +2869,25 @@ CBotTypResult CScript::cFire(CBotVar* &var, void* user)
|
|||
|
||||
if ( type == OBJECT_ANT )
|
||||
{
|
||||
return cOnePoint(var, user);
|
||||
if ( var == 0 ) return CBotTypResult(CBotErrLowParam);
|
||||
CBotTypResult ret = cPoint(var, user);
|
||||
if ( ret.GetType() != 0 ) return ret;
|
||||
if ( var != 0 ) return CBotTypResult(CBotErrOverParam);
|
||||
}
|
||||
else if ( type == OBJECT_SPIDER )
|
||||
{
|
||||
return cNull(var, user);
|
||||
if ( var != 0 ) return CBotTypResult(CBotErrOverParam);
|
||||
}
|
||||
else
|
||||
{
|
||||
if ( var == 0 ) return CBotTypResult(CBotTypFloat);
|
||||
if ( var->GetType() > CBotTypDouble ) return CBotTypResult(CBotErrBadNum);
|
||||
var = var->GetNext();
|
||||
if ( var != 0 ) return CBotTypResult(CBotErrOverParam);
|
||||
return CBotTypResult(CBotTypFloat);
|
||||
if ( var != 0 )
|
||||
{
|
||||
if ( var->GetType() > CBotTypDouble ) return CBotTypResult(CBotErrBadNum);
|
||||
var = var->GetNext();
|
||||
if ( var != 0 ) return CBotTypResult(CBotErrOverParam);
|
||||
}
|
||||
}
|
||||
#else
|
||||
return CBotTypResult(CBotTypFloat);
|
||||
#endif
|
||||
}
|
||||
|
||||
// Instruction "fire(delay)".
|
||||
|
@ -2983,6 +2923,7 @@ bool CScript::rFire(CBotVar* var, CBotVar* result, int& exception, void* user)
|
|||
{
|
||||
if ( var == 0 ) delay = 0.0f;
|
||||
else delay = var->GetValFloat();
|
||||
if ( delay < 0.0f ) delay = -delay;
|
||||
err = script->m_primaryTask->StartTaskFire(delay);
|
||||
}
|
||||
|
||||
|
@ -3031,7 +2972,11 @@ bool CScript::rAim(CBotVar* var, CBotVar* result, int& exception, void* user)
|
|||
var = var->GetNext();
|
||||
var == 0 ? y=0.0f : y=var->GetValFloat();
|
||||
err = script->m_primaryTask->StartTaskGunGoal(x*Math::PI/180.0f, y*Math::PI/180.0f);
|
||||
if ( err != ERR_OK )
|
||||
if ( err == ERR_AIM_IMPOSSIBLE )
|
||||
{
|
||||
result->SetValInt(err); // shows the error
|
||||
}
|
||||
else if ( err != ERR_OK )
|
||||
{
|
||||
delete script->m_primaryTask;
|
||||
script->m_primaryTask = 0;
|
||||
|
@ -3488,6 +3433,47 @@ bool CScript::rPenWidth(CBotVar* var, CBotVar* result, int& exception, void* use
|
|||
return true;
|
||||
}
|
||||
|
||||
// Compilation of the instruction with one object parameter
|
||||
|
||||
CBotTypResult CScript::cOneObject(CBotVar* &var, void* user)
|
||||
{
|
||||
if ( var == 0 ) return CBotTypResult(CBotErrLowParam);
|
||||
var = var->GetNext();
|
||||
if ( var == 0 ) return CBotTypResult(CBotTypFloat);
|
||||
|
||||
return CBotTypResult(CBotErrOverParam);
|
||||
}
|
||||
|
||||
// Instruction "camerafocus(object)".
|
||||
|
||||
bool CScript::rCameraFocus(CBotVar* var, CBotVar* result, int& exception, void* user)
|
||||
{
|
||||
CScript* script = (static_cast<CObject *>(user))->GetRunScript();
|
||||
|
||||
CBotVar* classVars = var->GetItemList(); // "category"
|
||||
classVars = classVars->GetNext(); // "position"
|
||||
classVars = classVars->GetNext(); // "orientation"
|
||||
classVars = classVars->GetNext(); // "pitch"
|
||||
classVars = classVars->GetNext(); // "roll"
|
||||
classVars = classVars->GetNext(); // "energyLevel"
|
||||
classVars = classVars->GetNext(); // "shieldLevel"
|
||||
classVars = classVars->GetNext(); // "temperature"
|
||||
classVars = classVars->GetNext(); // "altitude"
|
||||
classVars = classVars->GetNext(); // "lifeTime"
|
||||
classVars = classVars->GetNext(); // "material"
|
||||
classVars = classVars->GetNext(); // "energyCell"
|
||||
classVars = classVars->GetNext(); // "load"
|
||||
classVars = classVars->GetNext(); // "id"
|
||||
int rank = classVars->GetValInt();
|
||||
CObject* object = CObjectManager::GetInstancePointer()->SearchInstance(rank);
|
||||
|
||||
script->m_main->SelectObject(object, false);
|
||||
|
||||
result->SetValInt(ERR_OK);
|
||||
exception = ERR_OK;
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
|
||||
// Object's constructor.
|
||||
|
@ -3504,6 +3490,7 @@ CScript::CScript(CObject* object, CTaskManager** secondaryTask)
|
|||
m_secondaryTask = secondaryTask;
|
||||
|
||||
m_interface = m_main->GetInterface();
|
||||
m_pause = CPauseManager::GetInstancePointer();
|
||||
|
||||
m_ipf = CBOT_IPF;
|
||||
m_errMode = ERM_STOP;
|
||||
|
@ -3587,6 +3574,8 @@ void CScript::InitFonctions()
|
|||
CBotProgram::AddFunction("penup", rPenUp, CScript::cNull);
|
||||
CBotProgram::AddFunction("pencolor", rPenColor, CScript::cOneFloat);
|
||||
CBotProgram::AddFunction("penwidth", rPenWidth, CScript::cOneFloat);
|
||||
|
||||
CBotProgram::AddFunction("camerafocus", rCameraFocus, CScript::cOneObject);
|
||||
|
||||
CBotProgram::AddFunction("canbuild", rCanBuild, CScript::cCanBuild);
|
||||
CBotProgram::AddFunction("build", rBuild, CScript::cOneFloat);
|
||||
|
@ -3898,16 +3887,16 @@ bool CScript::Continue(const Event &event)
|
|||
|
||||
if ( m_error != 0 && m_errMode == ERM_STOP )
|
||||
{
|
||||
char s[100];
|
||||
std::string s;
|
||||
GetError(s);
|
||||
m_main->GetDisplayText()->DisplayText(s, m_object, 10.0f, Ui::TT_ERROR);
|
||||
m_main->GetDisplayText()->DisplayText(s.c_str(), m_object, 10.0f, Ui::TT_ERROR);
|
||||
}
|
||||
m_engine->SetPause(true); // gives pause
|
||||
m_pause->SetPause(PAUSE_EDITOR); // gives pause
|
||||
return true;
|
||||
}
|
||||
if ( !m_bContinue )
|
||||
{
|
||||
m_engine->SetPause(true); // gives pause
|
||||
m_pause->SetPause(PAUSE_EDITOR); // gives pause
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -3931,9 +3920,9 @@ bool CScript::Continue(const Event &event)
|
|||
|
||||
if ( m_error != 0 && m_errMode == ERM_STOP )
|
||||
{
|
||||
char s[100];
|
||||
std::string s;
|
||||
GetError(s);
|
||||
m_main->GetDisplayText()->DisplayText(s, m_object, 10.0f, Ui::TT_ERROR);
|
||||
m_main->GetDisplayText()->DisplayText(s.c_str(), m_object, 10.0f, Ui::TT_ERROR);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
@ -3950,9 +3939,9 @@ bool CScript::Step(const Event &event)
|
|||
if ( !m_bRun ) return true;
|
||||
if ( !m_bStepMode ) return false;
|
||||
|
||||
m_engine->SetPause(false);
|
||||
// ??? m_engine->SetPause(false);
|
||||
// TODO: m_app StepSimulation??? m_engine->StepSimulation(0.01f); // advance of 10ms
|
||||
m_engine->SetPause(true);
|
||||
// ??? m_engine->SetPause(true);
|
||||
|
||||
m_event = event;
|
||||
|
||||
|
@ -3973,16 +3962,16 @@ bool CScript::Step(const Event &event)
|
|||
|
||||
if ( m_error != 0 && m_errMode == ERM_STOP )
|
||||
{
|
||||
char s[100];
|
||||
std::string s;
|
||||
GetError(s);
|
||||
m_main->GetDisplayText()->DisplayText(s, m_object, 10.0f, Ui::TT_ERROR);
|
||||
m_main->GetDisplayText()->DisplayText(s.c_str(), m_object, 10.0f, Ui::TT_ERROR);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
if ( m_bContinue ) // instuction "move", "goto", etc. ?
|
||||
{
|
||||
m_engine->SetPause(false); // removes the pause
|
||||
m_pause->ClearPause(); // removes the pause
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
@ -4347,27 +4336,27 @@ int CScript::GetError()
|
|||
|
||||
// Returns the text of the error.
|
||||
|
||||
void CScript::GetError(char* buffer)
|
||||
void CScript::GetError(std::string& error)
|
||||
{
|
||||
if ( m_error == 0 )
|
||||
{
|
||||
buffer[0] = 0;
|
||||
error.clear();
|
||||
}
|
||||
else
|
||||
{
|
||||
if ( m_error == ERR_OBLIGATORYTOKEN )
|
||||
{
|
||||
char s[100];
|
||||
std::string s;
|
||||
GetResource(RES_ERR, m_error, s);
|
||||
sprintf(buffer, s, m_token);
|
||||
error = StrUtils::Format(s.c_str(), m_token);
|
||||
}
|
||||
else if ( m_error < 1000 )
|
||||
{
|
||||
GetResource(RES_ERR, m_error, buffer);
|
||||
GetResource(RES_ERR, m_error, error);
|
||||
}
|
||||
else
|
||||
{
|
||||
GetResource(RES_CBOT, m_error, buffer);
|
||||
GetResource(RES_CBOT, m_error, error);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -4385,7 +4374,9 @@ void CScript::New(Ui::CEdit* edit, const char* name)
|
|||
char *sf;
|
||||
int cursor1, cursor2, len, i, j;
|
||||
|
||||
GetResource(RES_TEXT, RT_SCRIPT_NEW, res);
|
||||
std::string resStr;
|
||||
GetResource(RES_TEXT, RT_SCRIPT_NEW, resStr);
|
||||
strcpy(res, resStr.c_str());
|
||||
if ( name[0] == 0 ) strcpy(text, res);
|
||||
else strcpy(text, name);
|
||||
|
||||
|
@ -4418,7 +4409,7 @@ void CScript::New(Ui::CEdit* edit, const char* name)
|
|||
sf = m_main->GetScriptFile();
|
||||
if ( sf[0] != 0 ) // Load an empty program specific?
|
||||
{
|
||||
std::string filename = CApplication::GetInstancePointer()->GetDataFilePath(DIR_AI, sf);
|
||||
std::string filename = CGameData::GetInstancePointer()->GetFilePath(DIR_AI, sf);
|
||||
file = fopen(filename.c_str(), "rb");
|
||||
if ( file != NULL )
|
||||
{
|
||||
|
@ -4512,7 +4503,7 @@ bool CScript::ReadScript(const char* filename)
|
|||
|
||||
if ( strchr(filename, '/') == 0 ) //we're reading non user script
|
||||
{
|
||||
name = CApplication::GetInstancePointer()->GetDataFilePath(DIR_AI, filename);
|
||||
name = CGameData::GetInstancePointer()->GetFilePath(DIR_AI, filename);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -4546,7 +4537,7 @@ bool CScript::WriteScript(const char* filename)
|
|||
|
||||
if ( strchr(filename, '/') == 0 ) //we're writing non user script
|
||||
{
|
||||
name = CApplication::GetInstancePointer()->GetDataFilePath(DIR_AI, filename);
|
||||
name = CGameData::GetInstancePointer()->GetFilePath(DIR_AI, filename);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
|
@ -24,6 +24,10 @@
|
|||
|
||||
#include "common/event.h"
|
||||
|
||||
#include "common/global.h"
|
||||
|
||||
#include "app/pausemanager.h"
|
||||
|
||||
#include "CBot/CBotDll.h"
|
||||
|
||||
#include <stdio.h>
|
||||
|
@ -74,7 +78,7 @@ public:
|
|||
bool IntroduceVirus();
|
||||
|
||||
int GetError();
|
||||
void GetError(char* buffer);
|
||||
void GetError(std::string& error);
|
||||
|
||||
void New(Ui::CEdit* edit, const char* name);
|
||||
bool SendScript(const char* text);
|
||||
|
@ -126,6 +130,7 @@ private:
|
|||
static CBotTypResult cPenDown(CBotVar* &var, void* user);
|
||||
static CBotTypResult cOnePoint(CBotVar* &var, void* user);
|
||||
static CBotTypResult cPoint(CBotVar* &var, void* user);
|
||||
static CBotTypResult cOneObject(CBotVar* &var, void* user);
|
||||
|
||||
|
||||
static bool rSin(CBotVar* var, CBotVar* result, int& exception, void* user);
|
||||
|
@ -190,6 +195,7 @@ private:
|
|||
static bool rPenUp(CBotVar* var, CBotVar* result, int& exception, void* user);
|
||||
static bool rPenColor(CBotVar* var, CBotVar* result, int& exception, void* user);
|
||||
static bool rPenWidth(CBotVar* var, CBotVar* result, int& exception, void* user);
|
||||
static bool rCameraFocus(CBotVar* var, CBotVar* result, int& exception, void* user);
|
||||
|
||||
public:
|
||||
static CBotTypResult cBusy(CBotVar* thisclass, CBotVar* &var);
|
||||
|
@ -200,10 +206,12 @@ public:
|
|||
static bool rBusy(CBotVar* thisclass, CBotVar* var, CBotVar* result, int& exception);
|
||||
static bool rFactory(CBotVar* thisclass, CBotVar* var, CBotVar* result, int& exception);
|
||||
static bool rResearch(CBotVar* thisclass, CBotVar* var, CBotVar* result, int& exception);
|
||||
static bool rTakeOff(CBotVar* thisclass, CBotVar* var, CBotVar* result, int& exception);
|
||||
static bool rDestroy(CBotVar* thisclass, CBotVar* var, CBotVar* result, int& exception);
|
||||
|
||||
private:
|
||||
static bool Process(CScript* script, CBotVar* result, int &exception);
|
||||
static bool ShouldProcessStop(Error err, int errMode);
|
||||
static CObject* SearchInfo(CScript* script, CObject* object, float power);
|
||||
|
||||
protected:
|
||||
|
@ -216,6 +224,7 @@ protected:
|
|||
CTaskManager* m_primaryTask;
|
||||
CTaskManager** m_secondaryTask;
|
||||
CObject* m_object;
|
||||
CPauseManager* m_pause;
|
||||
|
||||
int m_ipf; // number of instructions/second
|
||||
int m_errMode; // what to do in case of error
|
||||
|
|
|
@ -18,6 +18,8 @@
|
|||
|
||||
#include "sound/oalsound/alsound.h"
|
||||
|
||||
#include "app/gamedata.h"
|
||||
|
||||
#include <algorithm>
|
||||
#include <iomanip>
|
||||
|
||||
|
@ -26,12 +28,14 @@
|
|||
ALSound::ALSound()
|
||||
{
|
||||
m_enabled = false;
|
||||
m_3D = false;
|
||||
m_audioVolume = 1.0f;
|
||||
m_musicVolume = 1.0f;
|
||||
m_currentMusic = nullptr;
|
||||
m_eye.LoadZero();
|
||||
m_lookat.LoadZero();
|
||||
m_previousMusic.fadeTime = 0.0f;
|
||||
m_previousMusic.music = nullptr;
|
||||
m_channels_limit = 2048;
|
||||
}
|
||||
|
||||
|
||||
|
@ -58,6 +62,16 @@ void ALSound::CleanUp()
|
|||
{
|
||||
delete m_currentMusic;
|
||||
}
|
||||
|
||||
for (auto item : m_oldMusic)
|
||||
{
|
||||
delete item.music;
|
||||
}
|
||||
|
||||
if (m_previousMusic.music)
|
||||
{
|
||||
delete m_previousMusic.music;
|
||||
}
|
||||
|
||||
for (auto item : m_sounds)
|
||||
{
|
||||
|
@ -77,7 +91,7 @@ void ALSound::CleanUp()
|
|||
}
|
||||
|
||||
|
||||
bool ALSound::Create(bool b3D)
|
||||
bool ALSound::Create()
|
||||
{
|
||||
CleanUp();
|
||||
|
||||
|
@ -102,32 +116,12 @@ bool ALSound::Create(bool b3D)
|
|||
alListenerf(AL_GAIN, m_audioVolume);
|
||||
alDistanceModel(AL_LINEAR_DISTANCE_CLAMPED);
|
||||
|
||||
m_currentMusic = new Channel();
|
||||
GetLogger()->Info("Done.\n");
|
||||
m_enabled = true;
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
void ALSound::SetSound3D(bool bMode)
|
||||
{
|
||||
m_3D = bMode;
|
||||
}
|
||||
|
||||
|
||||
bool ALSound::GetSound3D()
|
||||
{
|
||||
return m_3D;
|
||||
}
|
||||
|
||||
|
||||
bool ALSound::GetSound3DCap()
|
||||
{
|
||||
// TODO stub! need to be implemented
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
bool ALSound::GetEnable()
|
||||
{
|
||||
return m_enabled;
|
||||
|
@ -168,10 +162,10 @@ int ALSound::GetMusicVolume()
|
|||
}
|
||||
|
||||
|
||||
bool ALSound::Cache(Sound sound, std::string filename)
|
||||
bool ALSound::Cache(Sound sound, const std::string &filename)
|
||||
{
|
||||
Buffer *buffer = new Buffer();
|
||||
if (buffer->LoadFromFile(filename, sound))
|
||||
if (buffer->LoadFromFile(CGameData::GetInstancePointer()->GetFilePath(DIR_SOUND, filename), sound))
|
||||
{
|
||||
m_sounds[sound] = buffer;
|
||||
return true;
|
||||
|
@ -179,14 +173,12 @@ bool ALSound::Cache(Sound sound, std::string filename)
|
|||
return false;
|
||||
}
|
||||
|
||||
bool ALSound::CacheMusic(std::string filename)
|
||||
bool ALSound::CacheMusic(const std::string &filename)
|
||||
{
|
||||
if (m_music.find(filename) == m_music.end())
|
||||
{
|
||||
Buffer *buffer = new Buffer();
|
||||
std::stringstream file;
|
||||
file << m_soundPath << "/" << filename;
|
||||
if (buffer->LoadFromFile(file.str(), static_cast<Sound>(-1)))
|
||||
if (buffer->LoadFromFile(CGameData::GetInstancePointer()->GetFilePath(DIR_MUSIC, filename), static_cast<Sound>(-1)))
|
||||
{
|
||||
m_music[filename] = buffer;
|
||||
return true;
|
||||
|
@ -252,11 +244,16 @@ bool ALSound::SearchFreeBuffer(Sound sound, int &channel, bool &bAlreadyLoaded)
|
|||
for (auto it : m_channels)
|
||||
{
|
||||
if (it.second->IsPlaying())
|
||||
{
|
||||
continue;
|
||||
}
|
||||
if (it.second->GetSoundType() != sound)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
it.second->SetPriority(priority);
|
||||
it.second->Reset();
|
||||
channel = it.first;
|
||||
bAlreadyLoaded = it.second->IsLoaded();
|
||||
return true;
|
||||
|
@ -270,6 +267,7 @@ bool ALSound::SearchFreeBuffer(Sound sound, int &channel, bool &bAlreadyLoaded)
|
|||
if (chn->IsReady())
|
||||
{
|
||||
chn->SetPriority(priority);
|
||||
chn->Reset();
|
||||
m_channels[1] = chn;
|
||||
channel = 1;
|
||||
bAlreadyLoaded = false;
|
||||
|
@ -280,8 +278,8 @@ bool ALSound::SearchFreeBuffer(Sound sound, int &channel, bool &bAlreadyLoaded)
|
|||
return false;
|
||||
}
|
||||
|
||||
// Seeks a channel completely free.
|
||||
if (m_channels.size() < 64)
|
||||
// Assigns new channel within limit
|
||||
if (m_channels.size() < m_channels_limit)
|
||||
{
|
||||
auto it = m_channels.end();
|
||||
it--;
|
||||
|
@ -295,13 +293,14 @@ bool ALSound::SearchFreeBuffer(Sound sound, int &channel, bool &bAlreadyLoaded)
|
|||
if (chn->IsReady())
|
||||
{
|
||||
chn->SetPriority(priority);
|
||||
chn->Reset();
|
||||
m_channels[++i] = chn;
|
||||
channel = i;
|
||||
bAlreadyLoaded = false;
|
||||
return true;
|
||||
}
|
||||
delete chn;
|
||||
GetLogger()->Warn("Could not open additional channel to play sound!\n");
|
||||
GetLogger()->Debug("Could not open additional channel to play sound!\n");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -313,6 +312,7 @@ bool ALSound::SearchFreeBuffer(Sound sound, int &channel, bool &bAlreadyLoaded)
|
|||
{
|
||||
GetLogger()->Debug("Sound channel with lower priority will be reused.\n");
|
||||
channel = it.first;
|
||||
it.second->Reset();
|
||||
return true;
|
||||
}
|
||||
if (it.second->GetPriority() <= priority)
|
||||
|
@ -322,11 +322,12 @@ bool ALSound::SearchFreeBuffer(Sound sound, int &channel, bool &bAlreadyLoaded)
|
|||
if (lowerOrEqual != -1)
|
||||
{
|
||||
channel = lowerOrEqual;
|
||||
m_channels[channel]->Reset();
|
||||
GetLogger()->Debug("Sound channel with lower or equal priority will be reused.\n");
|
||||
return true;
|
||||
}
|
||||
|
||||
GetLogger()->Warn("Could not find free buffer to use.\n");
|
||||
GetLogger()->Debug("Could not find free buffer to use.\n");
|
||||
return false;
|
||||
}
|
||||
|
||||
|
@ -337,7 +338,7 @@ int ALSound::Play(Sound sound, float amplitude, float frequency, bool bLoop)
|
|||
}
|
||||
|
||||
|
||||
int ALSound::Play(Sound sound, Math::Vector pos, float amplitude, float frequency, bool bLoop)
|
||||
int ALSound::Play(Sound sound, const Math::Vector &pos, float amplitude, float frequency, bool bLoop)
|
||||
{
|
||||
if (!m_enabled)
|
||||
{
|
||||
|
@ -345,14 +346,16 @@ int ALSound::Play(Sound sound, Math::Vector pos, float amplitude, float frequenc
|
|||
}
|
||||
if (m_sounds.find(sound) == m_sounds.end())
|
||||
{
|
||||
GetLogger()->Warn("Sound %d was not loaded!\n", sound);
|
||||
GetLogger()->Debug("Sound %d was not loaded!\n", sound);
|
||||
return -1;
|
||||
}
|
||||
|
||||
int channel;
|
||||
bool bAlreadyLoaded = false;
|
||||
if (!SearchFreeBuffer(sound, channel, bAlreadyLoaded))
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (!bAlreadyLoaded)
|
||||
{
|
||||
|
@ -363,15 +366,8 @@ int ALSound::Play(Sound sound, Math::Vector pos, float amplitude, float frequenc
|
|||
}
|
||||
}
|
||||
|
||||
Position(channel, pos);
|
||||
if (!m_3D)
|
||||
{
|
||||
ComputeVolumePan2D(channel, pos);
|
||||
}
|
||||
else
|
||||
{
|
||||
m_channels[channel]->SetVolumeAtrib(1.0f);
|
||||
}
|
||||
m_channels[channel]->SetPosition(pos);
|
||||
m_channels[channel]->SetVolumeAtrib(1.0f);
|
||||
|
||||
// setting initial values
|
||||
m_channels[channel]->SetStartAmplitude(amplitude);
|
||||
|
@ -381,15 +377,26 @@ int ALSound::Play(Sound sound, Math::Vector pos, float amplitude, float frequenc
|
|||
m_channels[channel]->SetFrequency(frequency);
|
||||
m_channels[channel]->SetVolume(powf(amplitude * m_channels[channel]->GetVolumeAtrib(), 0.2f) * m_audioVolume);
|
||||
m_channels[channel]->SetLoop(bLoop);
|
||||
m_channels[channel]->Play();
|
||||
|
||||
return channel;
|
||||
if (!m_channels[channel]->Play())
|
||||
{
|
||||
m_channels_limit = m_channels.size() - 1;
|
||||
GetLogger()->Debug("Changing channel limit to %u.\n", m_channels_limit);
|
||||
auto it = m_channels.find(channel);
|
||||
Channel *ch = it->second;
|
||||
m_channels.erase(it);
|
||||
delete ch;
|
||||
|
||||
return -1;
|
||||
}
|
||||
|
||||
return channel | ((m_channels[channel]->GetId() & 0xffff) << 16);
|
||||
}
|
||||
|
||||
|
||||
bool ALSound::FlushEnvelope(int channel)
|
||||
{
|
||||
if (m_channels.find(channel) == m_channels.end())
|
||||
if (!CheckChannel(channel))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
@ -401,10 +408,7 @@ bool ALSound::FlushEnvelope(int channel)
|
|||
|
||||
bool ALSound::AddEnvelope(int channel, float amplitude, float frequency, float time, SoundNext oper)
|
||||
{
|
||||
if (!m_enabled)
|
||||
return false;
|
||||
|
||||
if (m_channels.find(channel) == m_channels.end())
|
||||
if (!CheckChannel(channel))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
@ -421,40 +425,21 @@ bool ALSound::AddEnvelope(int channel, float amplitude, float frequency, float t
|
|||
}
|
||||
|
||||
|
||||
bool ALSound::Position(int channel, Math::Vector pos)
|
||||
bool ALSound::Position(int channel, const Math::Vector &pos)
|
||||
{
|
||||
if (!m_enabled)
|
||||
return false;
|
||||
|
||||
if (m_channels.find(channel) == m_channels.end())
|
||||
if (!CheckChannel(channel))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
if (m_3D)
|
||||
{
|
||||
m_channels[channel]->SetPan(pos);
|
||||
}
|
||||
else
|
||||
{
|
||||
ComputeVolumePan2D(channel, pos);
|
||||
|
||||
if (!m_channels[channel]->HasEnvelope())
|
||||
{
|
||||
float volume = m_channels[channel]->GetStartAmplitude();
|
||||
m_channels[channel]->SetVolume(powf(volume * m_channels[channel]->GetVolumeAtrib(), 0.2f) * m_audioVolume);
|
||||
}
|
||||
}
|
||||
m_channels[channel]->SetPosition(pos);
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
bool ALSound::Frequency(int channel, float frequency)
|
||||
{
|
||||
if (!m_enabled)
|
||||
return false;
|
||||
|
||||
if (m_channels.find(channel) == m_channels.end())
|
||||
if (!CheckChannel(channel))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
@ -466,10 +451,7 @@ bool ALSound::Frequency(int channel, float frequency)
|
|||
|
||||
bool ALSound::Stop(int channel)
|
||||
{
|
||||
if (!m_enabled)
|
||||
return false;
|
||||
|
||||
if (m_channels.find(channel) == m_channels.end())
|
||||
if (!CheckChannel(channel))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
@ -484,7 +466,9 @@ bool ALSound::Stop(int channel)
|
|||
bool ALSound::StopAll()
|
||||
{
|
||||
if (!m_enabled)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
for (auto channel : m_channels)
|
||||
{
|
||||
|
@ -499,7 +483,9 @@ bool ALSound::StopAll()
|
|||
bool ALSound::MuteAll(bool bMute)
|
||||
{
|
||||
if (!m_enabled)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
for (auto it : m_channels)
|
||||
{
|
||||
|
@ -509,14 +495,6 @@ bool ALSound::MuteAll(bool bMute)
|
|||
}
|
||||
}
|
||||
|
||||
if (bMute)
|
||||
{
|
||||
m_currentMusic->SetVolume(0.0f);
|
||||
}
|
||||
else
|
||||
{
|
||||
m_currentMusic->SetVolume(m_musicVolume);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
|
@ -524,7 +502,9 @@ bool ALSound::MuteAll(bool bMute)
|
|||
void ALSound::FrameMove(float delta)
|
||||
{
|
||||
if (!m_enabled)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
float progress;
|
||||
float volume, frequency;
|
||||
|
@ -534,7 +514,6 @@ void ALSound::FrameMove(float delta)
|
|||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
if (it.second->IsMuted())
|
||||
{
|
||||
it.second->SetVolume(0.0f);
|
||||
|
@ -582,79 +561,117 @@ void ALSound::FrameMove(float delta)
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
std::list<OldMusic> toRemove;
|
||||
|
||||
for (auto& it : m_oldMusic)
|
||||
{
|
||||
if (it.currentTime >= it.fadeTime)
|
||||
{
|
||||
delete it.music;
|
||||
toRemove.push_back(it);
|
||||
}
|
||||
else
|
||||
{
|
||||
it.currentTime += delta;
|
||||
it.music->SetVolume(((it.fadeTime-it.currentTime) / it.fadeTime) * m_musicVolume);
|
||||
}
|
||||
}
|
||||
|
||||
if (m_previousMusic.fadeTime > 0.0f) {
|
||||
if (m_previousMusic.currentTime >= m_previousMusic.fadeTime)
|
||||
{
|
||||
m_previousMusic.music->Pause();
|
||||
}
|
||||
else
|
||||
{
|
||||
m_previousMusic.currentTime += delta;
|
||||
m_previousMusic.music->SetVolume(((m_previousMusic.fadeTime-m_previousMusic.currentTime) / m_previousMusic.fadeTime) * m_musicVolume);
|
||||
}
|
||||
}
|
||||
|
||||
for (auto it : toRemove)
|
||||
m_oldMusic.remove(it);
|
||||
}
|
||||
|
||||
|
||||
void ALSound::SetListener(Math::Vector eye, Math::Vector lookat)
|
||||
void ALSound::SetListener(const Math::Vector &eye, const Math::Vector &lookat)
|
||||
{
|
||||
m_eye = eye;
|
||||
m_lookat = lookat;
|
||||
if (m_3D)
|
||||
{
|
||||
float orientation[] = {lookat.x, lookat.y, lookat.z, 0.f, 1.f, 0.f};
|
||||
alListener3f(AL_POSITION, eye.x, eye.y, eye.z);
|
||||
alListenerfv(AL_ORIENTATION, orientation);
|
||||
}
|
||||
else
|
||||
{
|
||||
float orientation[] = {0.0f, 0.0f, 0.0f, 0.f, 1.f, 0.f};
|
||||
alListener3f(AL_POSITION, 0.0f, 0.0f, 0.0f);
|
||||
alListenerfv(AL_ORIENTATION, orientation);
|
||||
Math::Vector forward = lookat - eye;
|
||||
forward.Normalize();
|
||||
float orientation[] = {forward.x, forward.y, forward.z, 0.f, -1.0f, 0.0f};
|
||||
|
||||
// recalculate sound position
|
||||
for (auto it : m_channels)
|
||||
{
|
||||
if (it.second->IsPlaying())
|
||||
{
|
||||
Math::Vector pos = it.second->GetPosition();
|
||||
ComputeVolumePan2D(it.first, pos);
|
||||
|
||||
if (!it.second->HasEnvelope())
|
||||
{
|
||||
float volume = it.second->GetStartAmplitude();
|
||||
it.second->SetVolume(powf(volume * it.second->GetVolumeAtrib(), 0.2f) * m_audioVolume);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
alListener3f(AL_POSITION, eye.x, eye.y, eye.z);
|
||||
alListenerfv(AL_ORIENTATION, orientation);
|
||||
}
|
||||
|
||||
bool ALSound::PlayMusic(int rank, bool bRepeat)
|
||||
|
||||
bool ALSound::PlayMusic(int rank, bool bRepeat, float fadeTime)
|
||||
{
|
||||
std::stringstream filename;
|
||||
filename << "music" << std::setfill('0') << std::setw(3) << rank << ".ogg";
|
||||
return PlayMusic(filename.str(), bRepeat);
|
||||
return PlayMusic(filename.str(), bRepeat, fadeTime);
|
||||
}
|
||||
|
||||
bool ALSound::PlayMusic(std::string filename, bool bRepeat)
|
||||
|
||||
bool operator<(const OldMusic & l, const OldMusic & r)
|
||||
{
|
||||
return l.currentTime < r.currentTime;
|
||||
}
|
||||
|
||||
|
||||
bool operator==(const OldMusic & l, const OldMusic & r)
|
||||
{
|
||||
return l.currentTime == r.currentTime;
|
||||
}
|
||||
|
||||
|
||||
bool ALSound::PlayMusic(const std::string &filename, bool bRepeat, float fadeTime)
|
||||
{
|
||||
if (!m_enabled)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
std::stringstream file;
|
||||
file << m_soundPath << "/" << filename;
|
||||
std::string file = CGameData::GetInstancePointer()->GetFilePath(DIR_MUSIC, filename);
|
||||
Buffer *buffer;
|
||||
|
||||
// check if we have music in cache
|
||||
if (m_music.find(filename) == m_music.end())
|
||||
{
|
||||
GetLogger()->Warn("Music %s was not cached!\n", filename.c_str());
|
||||
if (!boost::filesystem::exists(file.str()))
|
||||
GetLogger()->Debug("Music %s was not cached!\n", filename.c_str());
|
||||
if (!boost::filesystem::exists(file))
|
||||
{
|
||||
GetLogger()->Warn("Requested music %s was not found.\n", filename.c_str());
|
||||
GetLogger()->Debug("Requested music %s was not found.\n", filename.c_str());
|
||||
return false;
|
||||
}
|
||||
Buffer *buffer = new Buffer();
|
||||
buffer->LoadFromFile(file.str(), static_cast<Sound>(-1));
|
||||
m_currentMusic->SetBuffer(buffer);
|
||||
|
||||
buffer = new Buffer();
|
||||
if (!buffer->LoadFromFile(file, static_cast<Sound>(-1)))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
m_music[filename] = buffer;
|
||||
}
|
||||
else
|
||||
{
|
||||
GetLogger()->Debug("Music loaded from cache\n");
|
||||
m_currentMusic->SetBuffer(m_music[filename]);
|
||||
buffer = m_music[filename];
|
||||
}
|
||||
|
||||
if (m_currentMusic)
|
||||
{
|
||||
OldMusic old;
|
||||
old.music = m_currentMusic;
|
||||
old.fadeTime = fadeTime;
|
||||
old.currentTime = 0.0f;
|
||||
m_oldMusic.push_back(old);
|
||||
}
|
||||
|
||||
m_currentMusic = new Channel();
|
||||
m_currentMusic->SetBuffer(buffer);
|
||||
m_currentMusic->SetVolume(m_musicVolume);
|
||||
m_currentMusic->SetLoop(bRepeat);
|
||||
m_currentMusic->Play();
|
||||
|
@ -663,6 +680,55 @@ bool ALSound::PlayMusic(std::string filename, bool bRepeat)
|
|||
}
|
||||
|
||||
|
||||
bool ALSound::PlayPauseMusic(const std::string &filename, bool repeat)
|
||||
{
|
||||
if (m_previousMusic.fadeTime > 0.0f)
|
||||
{
|
||||
if(m_currentMusic)
|
||||
{
|
||||
OldMusic old;
|
||||
old.music = m_currentMusic;
|
||||
old.fadeTime = 2.0f;
|
||||
old.currentTime = 0.0f;
|
||||
m_oldMusic.push_back(old);
|
||||
m_currentMusic = nullptr;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (m_currentMusic)
|
||||
{
|
||||
m_previousMusic.music = m_currentMusic;
|
||||
m_previousMusic.fadeTime = 2.0f;
|
||||
m_previousMusic.currentTime = 0.0f;
|
||||
m_currentMusic = nullptr;
|
||||
}
|
||||
}
|
||||
return PlayMusic(filename, repeat);
|
||||
}
|
||||
|
||||
|
||||
void ALSound::StopPauseMusic()
|
||||
{
|
||||
if (m_previousMusic.fadeTime > 0.0f)
|
||||
{
|
||||
StopMusic();
|
||||
|
||||
m_currentMusic = m_previousMusic.music;
|
||||
m_previousMusic.music = nullptr;
|
||||
if(m_currentMusic != nullptr)
|
||||
{
|
||||
m_currentMusic->SetVolume(m_musicVolume);
|
||||
if(m_previousMusic.currentTime >= m_previousMusic.fadeTime)
|
||||
{
|
||||
m_currentMusic->Play();
|
||||
}
|
||||
}
|
||||
m_previousMusic.fadeTime = 0.0f;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
bool ALSound::RestartMusic()
|
||||
{
|
||||
if (!m_enabled || !m_currentMusic)
|
||||
|
@ -675,14 +741,21 @@ bool ALSound::RestartMusic()
|
|||
return true;
|
||||
}
|
||||
|
||||
void ALSound::StopMusic()
|
||||
|
||||
void ALSound::StopMusic(float fadeTime)
|
||||
{
|
||||
if (!m_enabled || !m_currentMusic)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
SuspendMusic();
|
||||
OldMusic old;
|
||||
old.music = m_currentMusic;
|
||||
old.fadeTime = fadeTime;
|
||||
old.currentTime = 0.0f;
|
||||
m_oldMusic.push_back(old);
|
||||
|
||||
m_currentMusic = nullptr;
|
||||
}
|
||||
|
||||
|
||||
|
@ -708,64 +781,30 @@ void ALSound::SuspendMusic()
|
|||
}
|
||||
|
||||
|
||||
void ALSound::ComputeVolumePan2D(int channel, Math::Vector &pos)
|
||||
bool ALSound::CheckChannel(int &channel)
|
||||
{
|
||||
float dist, a, g;
|
||||
m_channels[channel]->SetPosition(pos);
|
||||
int id = (channel >> 16) & 0xffff;
|
||||
channel &= 0xffff;
|
||||
|
||||
if (VectorsEqual(pos, m_eye))
|
||||
if (!m_enabled)
|
||||
{
|
||||
m_channels[channel]->SetVolumeAtrib(1.0f); // maximum volume
|
||||
m_channels[channel]->SetPan(Math::Vector()); // at the center
|
||||
return;
|
||||
return false;
|
||||
}
|
||||
|
||||
dist = Distance(pos, m_eye);
|
||||
if ( dist >= 110.0f ) // very far?
|
||||
if (m_channels.find(channel) == m_channels.end())
|
||||
{
|
||||
m_channels[channel]->SetVolumeAtrib(0.0f); // silence
|
||||
m_channels[channel]->SetPan(Math::Vector()); // at the center
|
||||
return;
|
||||
}
|
||||
else if ( dist <= 10.0f ) // very close?
|
||||
{
|
||||
m_channels[channel]->SetVolumeAtrib(1.0f); // maximum volume
|
||||
m_channels[channel]->SetPan(Math::Vector()); // at the center
|
||||
return;
|
||||
}
|
||||
m_channels[channel]->SetVolumeAtrib(1.0f - ((dist - 10.0f) / 100.0f));
|
||||
|
||||
Math::Vector one = Math::Vector(1.0f, 0.0f, 0.0f);
|
||||
float angle_a = Angle(Math::Vector(m_lookat.x - m_eye.x, m_lookat.z - m_eye.z, 0.0f), one);
|
||||
float angle_g = Angle(Math::Vector(pos.x - m_eye.x, pos.z - m_eye.z, 0.0f), one);
|
||||
|
||||
a = fmodf(angle_a, Math::PI * 2.0f);
|
||||
g = fmodf(angle_g, Math::PI * 2.0f);
|
||||
|
||||
if ( a < 0.0f )
|
||||
{
|
||||
a += Math::PI * 2.0f;
|
||||
}
|
||||
if ( g < 0.0f )
|
||||
{
|
||||
g += Math::PI * 2.0f;
|
||||
return false;
|
||||
}
|
||||
|
||||
if ( a < g )
|
||||
if (m_audioVolume == 0)
|
||||
{
|
||||
if (a + Math::PI * 2.0f - g < g - a )
|
||||
{
|
||||
a += Math::PI * 2.0f;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if ( g + Math::PI * 2.0f - a < a - g )
|
||||
{
|
||||
g += Math::PI * 2.0f;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
m_channels[channel]->SetPan( Math::Vector(0.0f, 0.0f, sinf(g - a)) );
|
||||
if (m_channels[channel]->GetId() != id)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
|
|
@ -31,73 +31,75 @@
|
|||
|
||||
#include <map>
|
||||
#include <string>
|
||||
#include <list>
|
||||
|
||||
#include <al.h>
|
||||
|
||||
|
||||
struct OldMusic {
|
||||
Channel* music;
|
||||
float fadeTime;
|
||||
float currentTime;
|
||||
};
|
||||
|
||||
class ALSound : public CSoundInterface
|
||||
{
|
||||
public:
|
||||
ALSound();
|
||||
~ALSound();
|
||||
|
||||
bool Create(bool b3D);
|
||||
bool Cache(Sound, std::string);
|
||||
bool CacheMusic(std::string);
|
||||
bool Create();
|
||||
bool Cache(Sound, const std::string &);
|
||||
bool CacheMusic(const std::string &);
|
||||
|
||||
bool GetEnable();
|
||||
|
||||
void SetSound3D(bool bMode);
|
||||
bool GetSound3D();
|
||||
bool GetSound3DCap();
|
||||
|
||||
void SetAudioVolume(int volume);
|
||||
int GetAudioVolume();
|
||||
void SetMusicVolume(int volume);
|
||||
int GetMusicVolume();
|
||||
|
||||
void SetListener(Math::Vector eye, Math::Vector lookat);
|
||||
void SetListener(const Math::Vector &eye, const 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);
|
||||
int Play(Sound sound, const 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 Position(int channel, const 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 PlayMusic(std::string filename, bool bRepeat);
|
||||
bool PlayMusic(int rank, bool bRepeat, float fadeTime=2.0f);
|
||||
bool PlayMusic(const std::string &filename, bool bRepeat, float fadeTime=2.0f);
|
||||
bool RestartMusic();
|
||||
void SuspendMusic();
|
||||
void StopMusic();
|
||||
void StopMusic(float fadeTime=2.0f);
|
||||
bool IsPlayingMusic();
|
||||
bool PlayPauseMusic(const std::string &filename, bool repeat);
|
||||
void StopPauseMusic();
|
||||
|
||||
// plugin interface
|
||||
std::string PluginName();
|
||||
int PluginVersion();
|
||||
void InstallPlugin();
|
||||
bool UninstallPlugin(std::string &);
|
||||
bool CheckChannel(int &channel);
|
||||
|
||||
private:
|
||||
void CleanUp();
|
||||
int GetPriority(Sound);
|
||||
bool SearchFreeBuffer(Sound sound, int &channel, bool &bAlreadyLoaded);
|
||||
void ComputeVolumePan2D(int channel, Math::Vector &pos);
|
||||
|
||||
bool m_enabled;
|
||||
bool m_3D;
|
||||
float m_audioVolume;
|
||||
float m_musicVolume;
|
||||
unsigned int m_channels_limit;
|
||||
ALCdevice* m_device;
|
||||
ALCcontext* m_context;
|
||||
std::map<Sound, Buffer*> m_sounds;
|
||||
std::map<std::string, Buffer*> m_music;
|
||||
std::map<int, Channel*> m_channels;
|
||||
Channel *m_currentMusic;
|
||||
std::list<OldMusic> m_oldMusic;
|
||||
OldMusic m_previousMusic;
|
||||
Math::Vector m_eye;
|
||||
Math::Vector m_lookat;
|
||||
};
|
||||
|
|
|
@ -32,7 +32,7 @@ Buffer::~Buffer()
|
|||
{
|
||||
alDeleteBuffers(1, &m_buffer);
|
||||
if (alCheck())
|
||||
GetLogger()->Warn("Failed to unload buffer. Code %d\n", alGetCode());
|
||||
GetLogger()->Debug("Failed to unload buffer. Code %d\n", alGetCode());
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -23,7 +23,7 @@ Channel::Channel()
|
|||
|
||||
if (alCheck())
|
||||
{
|
||||
GetLogger()->Warn("Failed to create sound source. Code: %d\n", alGetCode());
|
||||
GetLogger()->Debug("Failed to create sound source. Code: %d\n", alGetCode());
|
||||
m_ready = false;
|
||||
}
|
||||
else
|
||||
|
@ -40,6 +40,7 @@ Channel::Channel()
|
|||
m_startFrequency = 0.0f;
|
||||
m_changeFrequency = 0.0f;
|
||||
m_volume = 0.0f;
|
||||
m_id = 0;
|
||||
}
|
||||
|
||||
|
||||
|
@ -51,7 +52,7 @@ Channel::~Channel()
|
|||
alSourcei(m_source, AL_BUFFER, 0);
|
||||
alDeleteSources(1, &m_source);
|
||||
if (alCheck())
|
||||
GetLogger()->Warn("Failed to delete sound source. Code: %d\n", alGetCode());
|
||||
GetLogger()->Debug("Failed to delete sound source. Code: %d\n", alGetCode());
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -69,13 +70,28 @@ bool Channel::Play()
|
|||
alSourcePlay(m_source);
|
||||
if (alCheck())
|
||||
{
|
||||
GetLogger()->Warn("Could not play audio sound source. Code: %d\n", alGetCode());
|
||||
GetLogger()->Debug("Could not play audio sound source. Code: %d\n", alGetCode());
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
bool Channel::Pause()
|
||||
{
|
||||
if(!m_ready || !IsPlaying())
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
alSourcePause(m_source);
|
||||
if (alCheck())
|
||||
{
|
||||
GetLogger()->Debug("Could not pause audio sound source. Code: %d\n", alGetCode());
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
bool Channel::SetPan(Math::Vector pos)
|
||||
bool Channel::SetPosition(const Math::Vector &pos)
|
||||
{
|
||||
if (!m_ready || m_buffer == nullptr)
|
||||
{
|
||||
|
@ -85,25 +101,13 @@ bool Channel::SetPan(Math::Vector pos)
|
|||
alSource3f(m_source, AL_POSITION, pos.x, pos.y, pos.z);
|
||||
if (alCheck())
|
||||
{
|
||||
GetLogger()->Warn("Could not set sound position. Code: %d\n", alGetCode());
|
||||
GetLogger()->Debug("Could not set sound position. Code: %d\n", alGetCode());
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
void Channel::SetPosition(Math::Vector pos)
|
||||
{
|
||||
m_position = pos;
|
||||
}
|
||||
|
||||
|
||||
Math::Vector Channel::GetPosition()
|
||||
{
|
||||
return m_position;
|
||||
}
|
||||
|
||||
|
||||
bool Channel::SetFrequency(float freq)
|
||||
{
|
||||
if (!m_ready || m_buffer == nullptr)
|
||||
|
@ -114,7 +118,7 @@ bool Channel::SetFrequency(float freq)
|
|||
alSourcef(m_source, AL_PITCH, freq);
|
||||
if (alCheck())
|
||||
{
|
||||
GetLogger()->Warn("Could not set sound pitch to '%f'. Code: %d\n", freq, alGetCode());
|
||||
GetLogger()->Debug("Could not set sound pitch to '%f'. Code: %d\n", freq, alGetCode());
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
|
@ -132,7 +136,7 @@ float Channel::GetFrequency()
|
|||
alGetSourcef(m_source, AL_PITCH, &freq);
|
||||
if (alCheck())
|
||||
{
|
||||
GetLogger()->Warn("Could not get sound pitch. Code: %d\n", alGetCode());
|
||||
GetLogger()->Debug("Could not get sound pitch. Code: %d\n", alGetCode());
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -150,7 +154,7 @@ bool Channel::SetVolume(float vol)
|
|||
alSourcef(m_source, AL_GAIN, vol);
|
||||
if (alCheck())
|
||||
{
|
||||
GetLogger()->Warn("Could not set sound volume to '%f'. Code: %d\n", vol, alGetCode());
|
||||
GetLogger()->Debug("Could not set sound volume to '%f'. Code: %d\n", vol, alGetCode());
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
|
@ -168,7 +172,7 @@ float Channel::GetVolume()
|
|||
alGetSourcef(m_source, AL_GAIN, &vol);
|
||||
if (alCheck())
|
||||
{
|
||||
GetLogger()->Warn("Could not get sound volume. Code: %d\n", alGetCode());
|
||||
GetLogger()->Debug("Could not get sound volume. Code: %d\n", alGetCode());
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -431,3 +435,15 @@ bool Channel::IsMuted()
|
|||
return m_mute;
|
||||
}
|
||||
|
||||
|
||||
void Channel::Reset()
|
||||
{
|
||||
m_id++;
|
||||
}
|
||||
|
||||
|
||||
int Channel::GetId()
|
||||
{
|
||||
return m_id;
|
||||
}
|
||||
|
||||
|
|
|
@ -50,11 +50,10 @@ public:
|
|||
~Channel();
|
||||
|
||||
bool Play();
|
||||
bool Pause();
|
||||
bool Stop();
|
||||
|
||||
bool SetPan(Math::Vector);
|
||||
void SetPosition(Math::Vector);
|
||||
Math::Vector GetPosition();
|
||||
bool SetPosition(const Math::Vector &);
|
||||
|
||||
bool SetFrequency(float);
|
||||
float GetFrequency();
|
||||
|
@ -98,11 +97,15 @@ public:
|
|||
void Mute(bool);
|
||||
bool IsMuted();
|
||||
|
||||
void Reset();
|
||||
int GetId();
|
||||
|
||||
private:
|
||||
Buffer *m_buffer;
|
||||
ALuint m_source;
|
||||
|
||||
int m_priority;
|
||||
int m_id;
|
||||
float m_startAmplitude;
|
||||
float m_startFrequency;
|
||||
float m_changeFrequency;
|
||||
|
|
|
@ -36,37 +36,36 @@ CSoundInterface::~CSoundInterface()
|
|||
{
|
||||
}
|
||||
|
||||
bool CSoundInterface::Create(bool b3D)
|
||||
bool CSoundInterface::Create()
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
void CSoundInterface::CacheAll(std::string path)
|
||||
void CSoundInterface::CacheAll()
|
||||
{
|
||||
for ( int i = 1; i < SOUND_MAX; i++ )
|
||||
{
|
||||
std::stringstream filename;
|
||||
filename << path << "/sound" << std::setfill('0') << std::setw(3) << i << ".wav";
|
||||
filename << "sound" << std::setfill('0') << std::setw(3) << i << ".wav";
|
||||
if ( !Cache(static_cast<Sound>(i), filename.str()) )
|
||||
GetLogger()->Warn("Unable to load audio: %s\n", filename.str().c_str());
|
||||
}
|
||||
}
|
||||
|
||||
void CSoundInterface::AddMusicFiles(std::string path)
|
||||
void CSoundInterface::AddMusicFiles()
|
||||
{
|
||||
m_soundPath = path;
|
||||
CacheMusic("Intro1.ogg");
|
||||
CacheMusic("Intro2.ogg");
|
||||
CacheMusic("music010.ogg");
|
||||
CacheMusic("music011.ogg");
|
||||
}
|
||||
|
||||
bool CSoundInterface::Cache(Sound bSound, std::string bFile)
|
||||
bool CSoundInterface::Cache(Sound bSound, const std::string &bFile)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
bool CSoundInterface::CacheMusic(std::string bFile)
|
||||
bool CSoundInterface::CacheMusic(const std::string &bFile)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
@ -76,20 +75,6 @@ bool CSoundInterface::GetEnable()
|
|||
return true;
|
||||
}
|
||||
|
||||
void CSoundInterface::SetSound3D(bool bMode)
|
||||
{
|
||||
}
|
||||
|
||||
bool CSoundInterface::GetSound3D()
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
bool CSoundInterface::GetSound3DCap()
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
void CSoundInterface::SetAudioVolume(int volume)
|
||||
{
|
||||
}
|
||||
|
@ -108,7 +93,7 @@ int CSoundInterface::GetMusicVolume()
|
|||
return 0;
|
||||
}
|
||||
|
||||
void CSoundInterface::SetListener(Math::Vector eye, Math::Vector lookat)
|
||||
void CSoundInterface::SetListener(const Math::Vector &eye, const Math::Vector &lookat)
|
||||
{
|
||||
}
|
||||
|
||||
|
@ -121,7 +106,7 @@ int CSoundInterface::Play(Sound sound, float amplitude, float frequency, bool bL
|
|||
return 0;
|
||||
}
|
||||
|
||||
int CSoundInterface::Play(Sound sound, Math::Vector pos, float amplitude, float frequency, bool bLoop)
|
||||
int CSoundInterface::Play(Sound sound, const Math::Vector &pos, float amplitude, float frequency, bool bLoop)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
@ -136,7 +121,7 @@ bool CSoundInterface::AddEnvelope(int channel, float amplitude, float frequency,
|
|||
return true;
|
||||
}
|
||||
|
||||
bool CSoundInterface::Position(int channel, Math::Vector pos)
|
||||
bool CSoundInterface::Position(int channel, const Math::Vector &pos)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
@ -161,12 +146,12 @@ bool CSoundInterface::MuteAll(bool bMute)
|
|||
return true;
|
||||
}
|
||||
|
||||
bool CSoundInterface::PlayMusic(int rank, bool bRepeat)
|
||||
bool CSoundInterface::PlayMusic(int rank, bool bRepeat, float fadeTime)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
bool CSoundInterface::PlayMusic(std::string filename, bool bRepeat)
|
||||
bool CSoundInterface::PlayMusic(const std::string &filename, bool bRepeat, float fadeTime)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
@ -180,7 +165,7 @@ void CSoundInterface::SuspendMusic()
|
|||
{
|
||||
}
|
||||
|
||||
void CSoundInterface::StopMusic()
|
||||
void CSoundInterface::StopMusic(float fadeTime)
|
||||
{
|
||||
}
|
||||
|
||||
|
@ -189,3 +174,11 @@ bool CSoundInterface::IsPlayingMusic()
|
|||
return true;
|
||||
}
|
||||
|
||||
bool CSoundInterface::PlayPauseMusic(const std::string &filename, bool repeat)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
void CSoundInterface::StopPauseMusic()
|
||||
{
|
||||
}
|
||||
|
|
|
@ -153,17 +153,16 @@ public:
|
|||
virtual ~CSoundInterface();
|
||||
|
||||
/** Function to initialize sound device
|
||||
* \param b3D - enable support for 3D sound
|
||||
*/
|
||||
virtual bool Create(bool b3D);
|
||||
virtual bool Create();
|
||||
|
||||
/** Function called to cache all sound effect files.
|
||||
* Function calls \link CSoundInterface::Cache() \endlink for each file
|
||||
*/
|
||||
void CacheAll(std::string path);
|
||||
void CacheAll();
|
||||
|
||||
/** Function called to add all music files to list */
|
||||
void AddMusicFiles(std::string path);
|
||||
void AddMusicFiles();
|
||||
|
||||
/** Function called to cache sound effect file.
|
||||
* This function is called by plugin interface for each file.
|
||||
|
@ -171,35 +170,20 @@ public:
|
|||
* \param bFile - file to load
|
||||
* \return return true on success
|
||||
*/
|
||||
virtual bool Cache(Sound bSound, std::string bFile);
|
||||
virtual bool Cache(Sound bSound, const std::string &bFile);
|
||||
|
||||
/** Function called to cache music file.
|
||||
* This function is called by CRobotMain for each file used in the mission.
|
||||
* \param bFile - file to load
|
||||
* \return return true on success
|
||||
*/
|
||||
virtual bool CacheMusic(std::string bFile);
|
||||
virtual bool CacheMusic(const std::string &bFile);
|
||||
|
||||
/** Return if plugin is enabled
|
||||
* \return return true if plugin is enabled
|
||||
*/
|
||||
virtual bool GetEnable();
|
||||
|
||||
/** Change sound mode to 2D/3D
|
||||
* \param bMode - true to enable 3D sound
|
||||
*/
|
||||
virtual void SetSound3D(bool bMode);
|
||||
|
||||
/** Return if we use 3D sound
|
||||
* \return true if we have 3D sound enabled
|
||||
*/
|
||||
virtual bool GetSound3D();
|
||||
|
||||
/** Return if we have 3D sound capable card
|
||||
* \return true for 3D sound support
|
||||
*/
|
||||
virtual bool GetSound3DCap();
|
||||
|
||||
/** Change global sound volume
|
||||
* \param volume - range from 0 to MAXVOLUME
|
||||
*/
|
||||
|
@ -224,7 +208,7 @@ public:
|
|||
* \param eye - position of listener
|
||||
* \param lookat - direction listener is looking at
|
||||
*/
|
||||
virtual void SetListener(Math::Vector eye, Math::Vector lookat);
|
||||
virtual void SetListener(const Math::Vector &eye, const Math::Vector &lookat);
|
||||
|
||||
/** Update data each frame
|
||||
* \param rTime - time since last update
|
||||
|
@ -248,7 +232,7 @@ public:
|
|||
* \param bLoop - loop sound
|
||||
* \return identifier of channel that sound will be played on
|
||||
*/
|
||||
virtual int Play(Sound sound, Math::Vector pos, float amplitude=1.0f, float frequency=1.0f, bool bLoop = false);
|
||||
virtual int Play(Sound sound, const Math::Vector &pos, float amplitude=1.0f, float frequency=1.0f, bool bLoop = false);
|
||||
|
||||
/** Remove all operations that would be made on sound in channel.
|
||||
* \param channel - channel to work on
|
||||
|
@ -271,7 +255,7 @@ public:
|
|||
* \param pos - new positino of a sound
|
||||
* \return return true on success
|
||||
*/
|
||||
virtual bool Position(int channel, Math::Vector pos);
|
||||
virtual bool Position(int channel, const Math::Vector &pos);
|
||||
|
||||
/** Set sound frequency
|
||||
* \param channel - channel to work on
|
||||
|
@ -300,38 +284,48 @@ public:
|
|||
/** Start playing music
|
||||
* \param rank - track number
|
||||
* \param bRepeat - repeat playing
|
||||
* \param fadeTime - time of transition between music
|
||||
* \return return true on success
|
||||
*/
|
||||
virtual bool PlayMusic(int rank, bool bRepeat);
|
||||
virtual bool PlayMusic(int rank, bool bRepeat, float fadeTime=2.0f);
|
||||
|
||||
/** Start playing music
|
||||
* \param filename - name of file to play
|
||||
* \param bRepeat - repeat playing
|
||||
* \param fadeTime - time of transition between music
|
||||
* \return return true on success
|
||||
*/
|
||||
virtual bool PlayMusic(std::string filename, bool bRepeat);
|
||||
virtual bool PlayMusic(const std::string &filename, bool bRepeat, float fadeTime=2.0f);
|
||||
|
||||
/** Restart music
|
||||
* @return return true on success
|
||||
* \return return true on success
|
||||
*/
|
||||
virtual bool RestartMusic();
|
||||
|
||||
/** Susspend paying music
|
||||
* \return return true on success
|
||||
/** Susspend playing music
|
||||
* \return nothing
|
||||
*/
|
||||
virtual void SuspendMusic();
|
||||
|
||||
/** Stop playing music
|
||||
* \return return true on success
|
||||
* \return nothing
|
||||
*/
|
||||
virtual void StopMusic();
|
||||
virtual void StopMusic(float fadeTime=2.0f);
|
||||
|
||||
/** Check if music if playing
|
||||
* \return return true if music is playing
|
||||
*/
|
||||
virtual bool IsPlayingMusic();
|
||||
|
||||
protected:
|
||||
std::string m_soundPath;
|
||||
|
||||
/** Start playing pause music
|
||||
* \param filename - name of file to play
|
||||
* \return return true on success
|
||||
*/
|
||||
virtual bool PlayPauseMusic(const std::string &filename, bool repeat);
|
||||
|
||||
/** Stop playing pause music and return to the mission music
|
||||
* \return nothing
|
||||
*/
|
||||
virtual void StopPauseMusic();
|
||||
};
|
||||
|
||||
|
|
|
@ -60,12 +60,7 @@ bool CButton::Create(Math::Point pos, Math::Point dim, int icon, EventType event
|
|||
|
||||
if ( icon == -1 )
|
||||
{
|
||||
char name[100];
|
||||
char* p;
|
||||
|
||||
GetResource(RES_EVENT, eventType, name);
|
||||
p = strchr(name, '\\');
|
||||
if ( p != 0 ) *p = 0;
|
||||
std::string name = GetResourceName(eventType);
|
||||
SetName(name);
|
||||
}
|
||||
|
||||
|
|
|
@ -47,16 +47,11 @@ CCheck::~CCheck()
|
|||
|
||||
bool CCheck::Create(Math::Point pos, Math::Point dim, int icon, EventType eventType)
|
||||
{
|
||||
char name[100];
|
||||
char* p;
|
||||
|
||||
if ( eventType == EVENT_NULL ) eventType = GetUniqueEventType();
|
||||
|
||||
CControl::Create(pos, dim, icon, eventType);
|
||||
|
||||
GetResource(RES_EVENT, eventType, name);
|
||||
p = strchr(name, '\\');
|
||||
if ( p != 0 ) *p = 0;
|
||||
std::string name = GetResourceName(eventType);
|
||||
SetName(name);
|
||||
|
||||
return true;
|
||||
|
|
|
@ -64,12 +64,7 @@ bool CColor::Create(Math::Point pos, Math::Point dim, int icon, EventType eventT
|
|||
|
||||
if ( icon == -1 )
|
||||
{
|
||||
char name[100];
|
||||
char* p;
|
||||
|
||||
GetResource(RES_EVENT, eventType, name);
|
||||
p = strchr(name, '\\');
|
||||
if ( p != 0 ) *p = 0;
|
||||
std::string name = GetResourceName(eventType);
|
||||
SetName(name);
|
||||
}
|
||||
|
||||
|
@ -146,38 +141,7 @@ void CColor::Draw()
|
|||
m_engine->SetTexture("button1.png");
|
||||
m_engine->SetState(Gfx::ENG_RSTATE_NORMAL);
|
||||
CControl::Draw();
|
||||
|
||||
#if _TEEN
|
||||
// color = GetColor(m_color);
|
||||
color = GetColor();
|
||||
|
||||
m_engine->SetTexture(""); // no texture
|
||||
m_engine->SetState(Gfx::ENG_RSTATE_NORMAL);
|
||||
|
||||
device = m_engine->GetDevice();
|
||||
|
||||
p1.x = m_pos.x + (4.0f / 640.0f);
|
||||
p1.y = m_pos.y + (4.0f / 480.0f);
|
||||
p2.x = m_pos.x + m_dim.x - (4.0f / 640.0f);
|
||||
p2.y = m_pos.y + m_dim.y - (4.0f / 480.0f);
|
||||
vertex[0] = Gfx::Vertex(Math::Vector(p1.x, p1.y, 0.0f), 0x00000000,0x00000000, Math::Point( 0.0f, 0.0f));
|
||||
vertex[1] = Gfx::Vertex(Math::Vector(p1.x, p2.y, 0.0f), 0x00000000,0x00000000, Math::Point( 0.0f, 0.0f));
|
||||
vertex[2] = Gfx::Vertex(Math::Vector(p2.x, p1.y, 0.0f), 0x00000000,0x00000000, Math::Point( 0.0f, 0.0f));
|
||||
vertex[3] = Gfx::Vertex(Math::Vector(p2.x, p2.y, 0.0f), 0x00000000,0x00000000, Math::Point( 0.0f, 0.0f));
|
||||
device->DrawPrimitive(Gfx::PRIMITIVE_TRIANGLE_STRIP, vertex, 4);
|
||||
|
||||
p1.x = m_pos.x + (5.0f / 640.0f);
|
||||
p1.y = m_pos.y + (5.0f / 480.0f);
|
||||
p2.x = m_pos.x + m_dim.x - (5.0f / 640.0f);
|
||||
p2.y = m_pos.y + m_dim.y - (5.0f / 480.0f);
|
||||
vertex[0] = Gfx::Vertex(Math::Vector(p1.x, p1.y, 0.0f), color,0x00000000, Math::Point( 0.0f, 0.0f));
|
||||
vertex[1] = Gfx::Vertex(Math::Vector(p1.x, p2.y, 0.0f), color,0x00000000, Math::Point( 0.0f, 0.0f));
|
||||
vertex[2] = Gfx::Vertex(Math::Vector(p2.x, p1.y, 0.0f), color,0x00000000, Math::Point( 0.0f, 0.0f));
|
||||
vertex[3] = Gfx::Vertex(Math::Vector(p2.x, p2.y, 0.0f), color,0x00000000, Math::Point( 0.0f, 0.0f));
|
||||
device->DrawPrimitive(Gfx::PRIMITIVE_TRIANGLE_STRIP, vertex, 4);
|
||||
|
||||
m_engine->AddStatisticTriangle(4);
|
||||
#else
|
||||
|
||||
p1.x = m_pos.x + (3.0f / 640.0f);
|
||||
p1.y = m_pos.y + (3.0f / 480.0f);
|
||||
p2.x = m_pos.x + m_dim.x - (3.0f / 640.0f);
|
||||
|
@ -196,7 +160,6 @@ void CColor::Draw()
|
|||
device = m_engine->GetDevice();
|
||||
device->DrawPrimitive(Gfx::PRIMITIVE_TRIANGLE_STRIP, vertex, 4);
|
||||
m_engine->AddStatisticTriangle(2);
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -57,9 +57,6 @@ CControl::~CControl()
|
|||
|
||||
bool CControl::Create(Math::Point pos, Math::Point dim, int icon, EventType eventType)
|
||||
{
|
||||
char text[200];
|
||||
std::string str_text;
|
||||
|
||||
if ( eventType == EVENT_NULL )
|
||||
eventType = GetUniqueEventType();
|
||||
|
||||
|
@ -72,17 +69,17 @@ bool CControl::Create(Math::Point pos, Math::Point dim, int icon, EventType even
|
|||
pos.y = m_pos.y + m_dim.y;
|
||||
GlintCreate(pos);
|
||||
|
||||
std::string text;
|
||||
GetResource(RES_EVENT, m_eventType, text);
|
||||
str_text = std::string(text);
|
||||
auto p = str_text.find("\\");
|
||||
if ( p == std::string::npos )
|
||||
auto p = text.find("\\");
|
||||
if (p == std::string::npos)
|
||||
{
|
||||
if ( icon != -1 )
|
||||
m_tooltip = str_text;
|
||||
m_tooltip = text;
|
||||
}
|
||||
else
|
||||
{
|
||||
m_tooltip = str_text.substr(p + 1);
|
||||
m_tooltip = text.substr(p + 1);
|
||||
}
|
||||
|
||||
return true;
|
||||
|
@ -509,11 +506,7 @@ void CControl::Draw()
|
|||
if ( icon >= 192 )
|
||||
{
|
||||
icon -= 192;
|
||||
#if _POLISH
|
||||
m_engine->SetTexture("textp.png");
|
||||
#else
|
||||
m_engine->SetTexture("text.png");
|
||||
#endif
|
||||
m_engine->SetState(Gfx::ENG_RSTATE_TTEXTURE_WHITE);
|
||||
}
|
||||
else if ( icon >= 128 )
|
||||
|
@ -837,5 +830,18 @@ bool CControl::Detect(Math::Point pos)
|
|||
pos.y <= m_pos.y + m_dim.y );
|
||||
}
|
||||
|
||||
std::string CControl::GetResourceName(EventType eventType)
|
||||
{
|
||||
std::string name;
|
||||
GetResource(RES_EVENT, eventType, name);
|
||||
auto index = name.find('\\');
|
||||
if (index != std::string::npos)
|
||||
{
|
||||
name = name.substr(0, index);
|
||||
}
|
||||
return name;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
|
|
@ -112,6 +112,8 @@ protected:
|
|||
void DrawShadow(Math::Point pos, Math::Point dim, float deep=1.0f);
|
||||
virtual bool Detect(Math::Point pos);
|
||||
|
||||
std::string GetResourceName(EventType eventType);
|
||||
|
||||
protected:
|
||||
Gfx::CEngine* m_engine;
|
||||
Gfx::CParticle* m_particle;
|
||||
|
|
|
@ -23,6 +23,7 @@
|
|||
#include "common/iman.h"
|
||||
#include "common/misc.h"
|
||||
#include "common/restext.h"
|
||||
#include "common/stringutils.h"
|
||||
|
||||
#include "graphics/core/light.h"
|
||||
#include "graphics/engine/engine.h"
|
||||
|
@ -58,6 +59,7 @@ CDisplayInfo::CDisplayInfo()
|
|||
m_main = CRobotMain::GetInstancePointer();
|
||||
m_interface = m_main->GetInterface();
|
||||
m_camera = m_main->GetCamera();
|
||||
m_pause = CPauseManager::GetInstancePointer();
|
||||
|
||||
m_bInfoMaximized = true;
|
||||
m_bInfoMinimized = false;
|
||||
|
@ -329,13 +331,13 @@ void CDisplayInfo::HyperUpdate()
|
|||
|
||||
void CDisplayInfo::StartDisplayInfo(std::string filename, int index, bool bSoluce)
|
||||
{
|
||||
Gfx::Light light;
|
||||
Gfx::Light light;
|
||||
Math::Point pos, dim;
|
||||
Ui::CWindow* pw;
|
||||
Ui::CEdit* edit;
|
||||
Ui::CButton* button;
|
||||
Ui::CSlider* slider;
|
||||
CMotionToto* toto;
|
||||
CMotionToto* toto;
|
||||
|
||||
m_index = index;
|
||||
m_bSoluce = bSoluce;
|
||||
|
@ -354,8 +356,8 @@ void CDisplayInfo::StartDisplayInfo(std::string filename, int index, bool bSoluc
|
|||
|
||||
m_main->SetEditLock(true, false);
|
||||
m_main->SetEditFull(false);
|
||||
m_bInitPause = m_engine->GetPause();
|
||||
m_engine->SetPause(true);
|
||||
m_bInitPause = m_pause->GetPauseType();
|
||||
m_pause->SetPause(PAUSE_SATCOM);
|
||||
m_infoCamera = m_camera->GetType();
|
||||
m_camera->SetType(Gfx::CAM_TYPE_INFO);
|
||||
|
||||
|
@ -388,13 +390,7 @@ void CDisplayInfo::StartDisplayInfo(std::string filename, int index, bool bSoluc
|
|||
|
||||
button = pw->CreateButton(pos, dim, 128+57, EVENT_SATCOM_HUSTON);
|
||||
button->SetState(STATE_SHADOW);
|
||||
#if _TEEN
|
||||
#if !_ENGLISH
|
||||
button = pw->CreateButton(pos, dim, 46, EVENT_SATCOM_SAT);
|
||||
#endif
|
||||
#else
|
||||
button = pw->CreateButton(pos, dim, 128+58, EVENT_SATCOM_SAT);
|
||||
#endif
|
||||
button->SetState(STATE_SHADOW);
|
||||
//? button = pw->CreateButton(pos, dim, 128+59, EVENT_SATCOM_OBJECT);
|
||||
//? button->SetState(STATE_SHADOW);
|
||||
|
@ -838,7 +834,7 @@ void CDisplayInfo::StopDisplayInfo()
|
|||
}
|
||||
else
|
||||
{
|
||||
if ( !m_bInitPause ) m_engine->SetPause(false);
|
||||
m_pause->SetPause(m_bInitPause);
|
||||
m_main->SetEditLock(false, false);
|
||||
}
|
||||
m_camera->SetType(m_infoCamera);
|
||||
|
@ -971,31 +967,41 @@ void ObjectAdd(ObjectList list[], ObjectType type)
|
|||
|
||||
void ObjectWrite(FILE* file, ObjectList list[], int i)
|
||||
{
|
||||
char line[100];
|
||||
char res[100];
|
||||
char* p;
|
||||
std::string line;
|
||||
|
||||
if ( list[i].total < 10 )
|
||||
{
|
||||
sprintf(line, "\\c; %dx \\n;\\l;", list[i].total);
|
||||
line = StrUtils::Format("\\c; %dx \\n;\\l;", list[i].total);
|
||||
}
|
||||
else
|
||||
{
|
||||
sprintf(line, "\\c;%dx \\n;\\l;", list[i].total);
|
||||
line = StrUtils::Format("\\c;%dx \\n;\\l;", list[i].total);
|
||||
}
|
||||
|
||||
std::string res;
|
||||
GetResource(RES_OBJECT, list[i].type, res);
|
||||
if ( res[0] == 0 ) return;
|
||||
strcat(line, res);
|
||||
if (res.empty())
|
||||
return;
|
||||
|
||||
strcat(line, "\\u ");
|
||||
p = const_cast<char*>(GetHelpFilename(list[i].type).c_str());
|
||||
if ( p[0] == 0 ) return;
|
||||
strcat(line, p+7); // skip "help\?\"
|
||||
p = strstr(line, ".txt");
|
||||
if ( p != 0 ) *p = 0;
|
||||
strcat(line, ";\n");
|
||||
fputs(line, file);
|
||||
line += res;
|
||||
|
||||
line += "\\u ";
|
||||
|
||||
std::string helpFilename = GetHelpFilename(list[i].type);
|
||||
if (helpFilename.empty())
|
||||
return;
|
||||
|
||||
line += helpFilename.substr(7); // skip "help\?\"
|
||||
|
||||
auto pos = line.find(".txt");
|
||||
if (pos != std::string::npos)
|
||||
{
|
||||
line = line.substr(0, pos);
|
||||
}
|
||||
|
||||
line += ";\n";
|
||||
|
||||
fputs(line.c_str(), file);
|
||||
}
|
||||
|
||||
// Creates the file containing the list of objects.
|
||||
|
@ -1006,7 +1012,7 @@ void CDisplayInfo::CreateObjectsFile()
|
|||
CObject* pObj;
|
||||
ObjectType type;
|
||||
ObjectList list[200];
|
||||
char line[100];
|
||||
std::string line;
|
||||
int i;
|
||||
bool bRadar, bAtLeast;
|
||||
|
||||
|
@ -1038,7 +1044,7 @@ void CDisplayInfo::CreateObjectsFile()
|
|||
if ( bRadar )
|
||||
{
|
||||
GetResource(RES_TEXT, RT_SATCOM_LIST, line);
|
||||
fputs(line, file);
|
||||
fputs(line.c_str(), file);
|
||||
bAtLeast = false;
|
||||
for ( i=0 ; i<200 ; i++ )
|
||||
{
|
||||
|
@ -1054,13 +1060,12 @@ void CDisplayInfo::CreateObjectsFile()
|
|||
if ( !bAtLeast )
|
||||
{
|
||||
GetResource(RES_TEXT, RT_SATCOM_NULL, line);
|
||||
fputs(line, file);
|
||||
fputs(line.c_str(), file);
|
||||
}
|
||||
|
||||
strcpy(line, "\n");
|
||||
fputs(line, file);
|
||||
fputs("\n", file);
|
||||
GetResource(RES_TEXT, RT_SATCOM_BOT, line);
|
||||
fputs(line, file);
|
||||
fputs(line.c_str(), file);
|
||||
bAtLeast = false;
|
||||
for ( i=0 ; i<200 ; i++ )
|
||||
{
|
||||
|
@ -1101,13 +1106,12 @@ void CDisplayInfo::CreateObjectsFile()
|
|||
if ( !bAtLeast )
|
||||
{
|
||||
GetResource(RES_TEXT, RT_SATCOM_NULL, line);
|
||||
fputs(line, file);
|
||||
fputs(line.c_str(), file);
|
||||
}
|
||||
|
||||
strcpy(line, "\n");
|
||||
fputs(line, file);
|
||||
fputs("\n", file);
|
||||
GetResource(RES_TEXT, RT_SATCOM_BUILDING, line);
|
||||
fputs(line, file);
|
||||
fputs(line.c_str(), file);
|
||||
bAtLeast = false;
|
||||
for ( i=0 ; i<200 ; i++ )
|
||||
{
|
||||
|
@ -1142,13 +1146,12 @@ void CDisplayInfo::CreateObjectsFile()
|
|||
if ( !bAtLeast )
|
||||
{
|
||||
GetResource(RES_TEXT, RT_SATCOM_NULL, line);
|
||||
fputs(line, file);
|
||||
fputs(line.c_str(), file);
|
||||
}
|
||||
|
||||
strcpy(line, "\n");
|
||||
fputs(line, file);
|
||||
fputs("\n", file);
|
||||
GetResource(RES_TEXT, RT_SATCOM_FRET, line);
|
||||
fputs(line, file);
|
||||
fputs(line.c_str(), file);
|
||||
bAtLeast = false;
|
||||
for ( i=0 ; i<200 ; i++ )
|
||||
{
|
||||
|
@ -1170,13 +1173,12 @@ void CDisplayInfo::CreateObjectsFile()
|
|||
if ( !bAtLeast )
|
||||
{
|
||||
GetResource(RES_TEXT, RT_SATCOM_NULL, line);
|
||||
fputs(line, file);
|
||||
fputs(line.c_str(), file);
|
||||
}
|
||||
|
||||
strcpy(line, "\n");
|
||||
fputs(line, file);
|
||||
fputs("\n", file);
|
||||
GetResource(RES_TEXT, RT_SATCOM_ALIEN, line);
|
||||
fputs(line, file);
|
||||
fputs(line.c_str(), file);
|
||||
bAtLeast = false;
|
||||
for ( i=0 ; i<200 ; i++ )
|
||||
{
|
||||
|
@ -1195,19 +1197,18 @@ void CDisplayInfo::CreateObjectsFile()
|
|||
if ( !bAtLeast )
|
||||
{
|
||||
GetResource(RES_TEXT, RT_SATCOM_NULL, line);
|
||||
fputs(line, file);
|
||||
fputs(line.c_str(), file);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
GetResource(RES_TEXT, RT_SATCOM_ERROR1, line);
|
||||
fputs(line, file);
|
||||
fputs(line.c_str(), file);
|
||||
GetResource(RES_TEXT, RT_SATCOM_ERROR2, line);
|
||||
fputs(line, file);
|
||||
fputs(line.c_str(), file);
|
||||
}
|
||||
|
||||
strcpy(line, "\n");
|
||||
fputs(line, file);
|
||||
fputs("\n", file);
|
||||
|
||||
fclose(file);
|
||||
}
|
||||
|
|
|
@ -25,6 +25,8 @@
|
|||
|
||||
#include "graphics/engine/camera.h"
|
||||
|
||||
#include "app/pausemanager.h"
|
||||
|
||||
class CRobotMain;
|
||||
class CObject;
|
||||
class CEventQueue;
|
||||
|
@ -67,13 +69,14 @@ protected:
|
|||
void CreateObjectsFile();
|
||||
|
||||
protected:
|
||||
Gfx::CEngine* m_engine;
|
||||
CEventQueue* m_event;
|
||||
CRobotMain* m_main;
|
||||
Gfx::CCamera* m_camera;
|
||||
CInterface* m_interface;
|
||||
Gfx::CParticle* m_particle;
|
||||
Gfx::CLightManager* m_light;
|
||||
Gfx::CEngine* m_engine;
|
||||
CEventQueue* m_event;
|
||||
CRobotMain* m_main;
|
||||
Gfx::CCamera* m_camera;
|
||||
CInterface* m_interface;
|
||||
Gfx::CParticle* m_particle;
|
||||
Gfx::CLightManager* m_light;
|
||||
CPauseManager* m_pause;
|
||||
|
||||
bool m_bInfoMaximized;
|
||||
bool m_bInfoMinimized;
|
||||
|
@ -88,7 +91,7 @@ protected:
|
|||
Math::Point m_infoFinalDim;
|
||||
int m_lightSuppl;
|
||||
bool m_bEditLock;
|
||||
bool m_bInitPause;
|
||||
PauseType m_bInitPause;
|
||||
bool m_bSoluce;
|
||||
CObject* m_toto;
|
||||
};
|
||||
|
|
|
@ -127,9 +127,6 @@ void CDisplayText::DisplayError(Error err, CObject* pObj, float time)
|
|||
void CDisplayText::DisplayError(Error err, Math::Vector goal, float height,
|
||||
float dist, float time)
|
||||
{
|
||||
TextType type;
|
||||
char text[100];
|
||||
|
||||
if ( err == ERR_OK ) return;
|
||||
|
||||
#if 0
|
||||
|
@ -148,7 +145,7 @@ void CDisplayText::DisplayError(Error err, Math::Vector goal, float height,
|
|||
type = TT_WARNING;
|
||||
}
|
||||
#else
|
||||
type = TT_WARNING;
|
||||
TextType type = TT_WARNING;
|
||||
if ( err >= INFO_FIRST )
|
||||
{
|
||||
type = TT_INFO;
|
||||
|
@ -164,8 +161,9 @@ void CDisplayText::DisplayError(Error err, Math::Vector goal, float height,
|
|||
}
|
||||
#endif
|
||||
|
||||
std::string text;
|
||||
GetResource(RES_ERR, err, text);
|
||||
DisplayText(text, goal, height, dist, time, type);
|
||||
DisplayText(text.c_str(), goal, height, dist, time, type);
|
||||
}
|
||||
|
||||
// Displays text.
|
||||
|
|
|
@ -19,6 +19,7 @@
|
|||
#include "ui/edit.h"
|
||||
|
||||
#include "app/app.h"
|
||||
#include "app/gamedata.h"
|
||||
|
||||
#include "clipboard/clipboard.h"
|
||||
|
||||
|
@ -1224,11 +1225,7 @@ void CEdit::DrawPart(Math::Point pos, Math::Point dim, int icon)
|
|||
Math::Point uv1, uv2;
|
||||
float dp;
|
||||
|
||||
#if _POLISH
|
||||
m_engine->SetTexture("textp.png");
|
||||
#else
|
||||
m_engine->SetTexture("text.png");
|
||||
#endif
|
||||
m_engine->SetState(Gfx::ENG_RSTATE_NORMAL);
|
||||
|
||||
uv1.x = (16.0f/256.0f)*(icon%16);
|
||||
|
@ -1462,11 +1459,14 @@ bool CEdit::ReadText(std::string filename, int addSize)
|
|||
std::string path = filename;
|
||||
if (!fs::exists(path))
|
||||
{
|
||||
path = CApplication::GetInstancePointer()->GetDataDirPath() + "/" + filename;
|
||||
path = CGameData::GetInstancePointer()->GetDataPath(filename);
|
||||
}
|
||||
|
||||
file = fopen(fs::path(path).make_preferred().string().c_str(), "rb");
|
||||
if ( file == NULL ) return false;
|
||||
if ( file == NULL ) {
|
||||
CLogger::GetInstancePointer()->Error("Unable to read text from file \"%s\"\n", path.c_str());
|
||||
return false;
|
||||
}
|
||||
|
||||
fseek(file, 0, SEEK_END);
|
||||
len = ftell(file);
|
||||
|
@ -1669,12 +1669,14 @@ bool CEdit::ReadText(std::string filename, int addSize)
|
|||
buffer[i+6] == 'n' &&
|
||||
buffer[i+7] == ' ' )
|
||||
{
|
||||
/* TODO: \button X; isn't working. Issue #232
|
||||
if ( m_bSoluce || !bInSoluce )
|
||||
{
|
||||
m_text[j] = GetValueParam(buffer+i+8, 0);
|
||||
m_format[j] = font|Gfx::FONT_BUTTON;
|
||||
j ++;
|
||||
}
|
||||
*/
|
||||
i += strchr(buffer+i, ';')-(buffer+i)+1;
|
||||
}
|
||||
else if ( //m_format.size() > 0 &&
|
||||
|
@ -1798,8 +1800,10 @@ bool CEdit::ReadText(std::string filename, int addSize)
|
|||
res = main->GetInputBinding(slot).primary;
|
||||
if ( res != 0 )
|
||||
{
|
||||
if ( GetResource(RES_KEY, res, iName) )
|
||||
std::string iNameStr;
|
||||
if ( GetResource(RES_KEY, res, iNameStr) )
|
||||
{
|
||||
strcpy(iName, iNameStr.c_str());
|
||||
m_text[j] = ' ';
|
||||
m_format[j] = font;
|
||||
j ++;
|
||||
|
@ -1817,9 +1821,13 @@ bool CEdit::ReadText(std::string filename, int addSize)
|
|||
res = main->GetInputBinding(slot).secondary;
|
||||
if ( res != 0 )
|
||||
{
|
||||
if ( GetResource(RES_KEY, res, iName) )
|
||||
if ( GetResource(RES_KEY, res, iNameStr) )
|
||||
{
|
||||
GetResource(RES_TEXT, RT_KEY_OR, text);
|
||||
strcpy(iName, iNameStr.c_str());
|
||||
|
||||
std::string textStr;
|
||||
GetResource(RES_TEXT, RT_KEY_OR, textStr);
|
||||
strcpy(text, textStr.c_str());
|
||||
n = 0;
|
||||
while ( text[n] != 0 )
|
||||
{
|
||||
|
|
|
@ -52,12 +52,7 @@ bool CGroup::Create(Math::Point pos, Math::Point dim, int icon, EventType eventT
|
|||
|
||||
if ( icon == -1 )
|
||||
{
|
||||
char name[100];
|
||||
char* p;
|
||||
|
||||
GetResource(RES_EVENT, eventType, name);
|
||||
p = strchr(name, '\\');
|
||||
if ( p != 0 ) *p = 0;
|
||||
std::string name = GetResourceName(eventType);
|
||||
SetName(name);
|
||||
}
|
||||
|
||||
|
|
|
@ -58,12 +58,7 @@ bool CImage::Create(Math::Point pos, Math::Point dim, int icon, EventType eventT
|
|||
|
||||
if ( icon == -1 )
|
||||
{
|
||||
char name[100];
|
||||
char* p;
|
||||
|
||||
GetResource(RES_EVENT, eventType, name);
|
||||
p = strchr(name, '\\');
|
||||
if ( p != 0 ) *p = 0;
|
||||
std::string name = GetResourceName(eventType);
|
||||
SetName(name);
|
||||
}
|
||||
|
||||
|
|
|
@ -19,16 +19,19 @@
|
|||
#include "ui/key.h"
|
||||
|
||||
#include "common/global.h"
|
||||
#include "common/stringutils.h"
|
||||
|
||||
#include <cstring>
|
||||
|
||||
namespace Ui {
|
||||
|
||||
|
||||
void GetKeyName(char* name, unsigned int key)
|
||||
static void GetKeyName(std::string& name, unsigned int key)
|
||||
{
|
||||
if (!GetResource(RES_KEY, key, name))
|
||||
sprintf(name, "Code %d", key);
|
||||
{
|
||||
name = StrUtils::Format("Code %d", key);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
@ -51,9 +54,9 @@ bool CKey::Create(Math::Point pos, Math::Point dim, int icon, EventType eventMsg
|
|||
|
||||
CControl::Create(pos, dim, icon, eventMsg);
|
||||
|
||||
char name[100];
|
||||
std::string name;
|
||||
GetResource(RES_EVENT, eventMsg, name);
|
||||
SetName(std::string(name));
|
||||
SetName(name);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
@ -176,19 +179,24 @@ void CKey::Draw()
|
|||
|
||||
float h = m_engine->GetText()->GetHeight(m_fontType, m_fontSize) / 2.0f;
|
||||
|
||||
char text[100];
|
||||
GetKeyName(text, m_binding.primary);
|
||||
std::string keyName;
|
||||
GetKeyName(keyName, m_binding.primary);
|
||||
if (m_binding.secondary != KEY_INVALID)
|
||||
{
|
||||
GetResource(RES_TEXT, RT_KEY_OR, text+strlen(text));
|
||||
GetKeyName(text+strlen(text), m_binding.secondary);
|
||||
std::string orText;
|
||||
GetResource(RES_TEXT, RT_KEY_OR, orText);
|
||||
keyName.append(orText);
|
||||
|
||||
std::string secondaryKeyName;
|
||||
GetKeyName(secondaryKeyName, m_binding.secondary);
|
||||
keyName.append(secondaryKeyName);
|
||||
}
|
||||
|
||||
Math::Point pos;
|
||||
pos.x = m_pos.x + m_dim.x * 0.5f;
|
||||
pos.y = m_pos.y + m_dim.y * 0.5f;
|
||||
pos.y -= h;
|
||||
m_engine->GetText()->DrawText(std::string(text), m_fontType, m_fontSize, pos, m_dim.x, Gfx::TEXT_ALIGN_CENTER, 0);
|
||||
m_engine->GetText()->DrawText(keyName, m_fontType, m_fontSize, pos, m_dim.x, Gfx::TEXT_ALIGN_CENTER, 0);
|
||||
|
||||
m_dim = iDim;
|
||||
|
||||
|
@ -199,7 +207,7 @@ void CKey::Draw()
|
|||
pos.x = m_pos.x + (214.0f / 640.0f);
|
||||
pos.y = m_pos.y + m_dim.y * 0.5f;
|
||||
pos.y -= h;
|
||||
m_engine->GetText()->DrawText(std::string(m_name), m_fontType, m_fontSize, pos, m_dim.x, Gfx::TEXT_ALIGN_LEFT, 0);
|
||||
m_engine->GetText()->DrawText(m_name, m_fontType, m_fontSize, pos, m_dim.x, Gfx::TEXT_ALIGN_LEFT, 0);
|
||||
}
|
||||
|
||||
void CKey::SetBinding(InputBinding b)
|
||||
|
|
|
@ -18,15 +18,17 @@
|
|||
#include "ui/maindialog.h"
|
||||
|
||||
#include "app/app.h"
|
||||
#include "app/gamedata.h"
|
||||
#include "app/system.h"
|
||||
|
||||
#include "common/config.h"
|
||||
#include "common/global.h"
|
||||
#include "common/event.h"
|
||||
#include "common/logger.h"
|
||||
#include "common/misc.h"
|
||||
#include "common/profile.h"
|
||||
#include "common/restext.h"
|
||||
#include "common/logger.h"
|
||||
#include "common/stringutils.h"
|
||||
|
||||
#include "object/robotmain.h"
|
||||
|
||||
|
@ -52,6 +54,7 @@
|
|||
#include <string.h>
|
||||
#include <sstream>
|
||||
#include <iomanip>
|
||||
#include <vector>
|
||||
#include <boost/filesystem.hpp>
|
||||
#include <boost/foreach.hpp>
|
||||
|
||||
|
@ -118,6 +121,7 @@ CMainDialog::CMainDialog()
|
|||
m_camera = m_main->GetCamera();
|
||||
m_engine = Gfx::CEngine::GetInstancePointer();
|
||||
m_particle = m_engine->GetParticle();
|
||||
m_pause = CPauseManager::GetInstancePointer();
|
||||
|
||||
m_phase = PHASE_NAME;
|
||||
m_phaseSetup = PHASE_SETUPg;
|
||||
|
@ -153,9 +157,6 @@ CMainDialog::CMainDialog()
|
|||
m_bMovies = true;
|
||||
m_bNiceReset = true;
|
||||
m_bHimselfDamage = true;
|
||||
/* TODO: #if _TEEN
|
||||
m_bCameraScroll = false;
|
||||
#else*/
|
||||
m_bCameraScroll = true;
|
||||
|
||||
m_bCameraInvertX = false;
|
||||
|
@ -215,7 +216,7 @@ void CMainDialog::ChangePhase(Phase phase)
|
|||
CImage* pi;
|
||||
Math::Point pos, dim, ddim;
|
||||
float ox, oy, sx, sy;
|
||||
char name[100];
|
||||
std::string name;
|
||||
char* gamer;
|
||||
int res, i, j;
|
||||
|
||||
|
@ -243,9 +244,6 @@ void CMainDialog::ChangePhase(Phase phase)
|
|||
pos.y = 0.10f;
|
||||
ddim.x = 0.30f;
|
||||
ddim.y = 0.80f;
|
||||
/* TODO: #if _TEEN
|
||||
pw = m_interface->CreateWindows(pos, ddim, 12, EVENT_WINDOW5);
|
||||
#else*/
|
||||
pw = m_interface->CreateWindows(pos, ddim, 10, EVENT_WINDOW5);
|
||||
|
||||
GetResource(RES_TEXT, RT_TITLE_INIT, name);
|
||||
|
@ -261,22 +259,7 @@ void CMainDialog::ChangePhase(Phase phase)
|
|||
ddim.x = 0.30f;
|
||||
ddim.y = 0.30f;
|
||||
pw->CreateGroup(pos, ddim, 4, EVENT_INTERFACE_GLINTr); // blue corner
|
||||
|
||||
/* TODO: #if _SCHOOL
|
||||
ddim.x = 0.20f;
|
||||
ddim.y = dim.y*2.4f;
|
||||
pos.x = 0.40f;
|
||||
pos.y = oy+sy*7.9f;
|
||||
pg = pw->CreateGroup(pos, ddim, 24, EVENT_LABEL1); // orange
|
||||
pg->SetState(STATE_SHADOW);
|
||||
pos.y = oy+sy*3.9f;
|
||||
pg = pw->CreateGroup(pos, ddim, 25, EVENT_LABEL1); // orange
|
||||
pg->SetState(STATE_SHADOW);
|
||||
ddim.y = dim.y*1.2f;
|
||||
pos.y = oy+sy*1.9f;
|
||||
pg = pw->CreateGroup(pos, ddim, 26, EVENT_LABEL1); // red
|
||||
pg->SetState(STATE_SHADOW);
|
||||
#else */
|
||||
|
||||
ddim.x = 0.20f;
|
||||
ddim.y = dim.y*2.4f;
|
||||
pos.x = 0.40f;
|
||||
|
@ -296,26 +279,7 @@ void CMainDialog::ChangePhase(Phase phase)
|
|||
pos.y = oy+sy*1.9f;
|
||||
pg = pw->CreateGroup(pos, ddim, 26, EVENT_LABEL1); // red
|
||||
pg->SetState(STATE_SHADOW);
|
||||
|
||||
/* TODO: #if _SCHOOL
|
||||
ddim.x = 0.18f;
|
||||
ddim.y = dim.y*1;
|
||||
pos.x = 0.41f;
|
||||
pos.y = oy+sy*9.1f;
|
||||
pb = pw->CreateButton(pos, ddim, -1, EVENT_INTERFACE_TRAINER);
|
||||
pb->SetState(STATE_SHADOW);
|
||||
|
||||
pos.y = oy+sy*8.0f;
|
||||
#if _TEEN
|
||||
pb = pw->CreateButton(pos, ddim, -1, EVENT_INTERFACE_TEEN);
|
||||
#else
|
||||
pb = pw->CreateButton(pos, ddim, -1, EVENT_INTERFACE_DEFI);
|
||||
#endif
|
||||
#if _CEEBOTDEMO
|
||||
pb->ClearState(STATE_ENABLE);
|
||||
#endif
|
||||
pb->SetState(STATE_SHADOW);
|
||||
#else */
|
||||
|
||||
ddim.x = 0.18f;
|
||||
ddim.y = dim.y*1;
|
||||
pos.x = 0.41f;
|
||||
|
@ -351,30 +315,22 @@ pb->SetState(STATE_SHADOW);
|
|||
pb = pw->CreateButton(pos, ddim, -1, EVENT_INTERFACE_QUIT);
|
||||
pb->SetState(STATE_SHADOW);
|
||||
|
||||
// TODO: #if !_DEMO & !_SCHOOL
|
||||
#if DEV_BUILD
|
||||
if ( m_accessEnable && m_accessUser )
|
||||
{
|
||||
pos.x = 447.0f/640.0f;
|
||||
pos.y = 313.0f/480.0f;
|
||||
ddim.x = 0.09f;
|
||||
/*#if _POLISH
|
||||
pos.x -= 5.0f/640.0f;
|
||||
ddim.x += 10.0f/640.0f;
|
||||
#endif*/
|
||||
pb = pw->CreateButton(pos, ddim, -1, EVENT_INTERFACE_USER);
|
||||
pb->SetState(STATE_SHADOW);
|
||||
}
|
||||
// #endif
|
||||
#endif
|
||||
|
||||
// TODO: remove?
|
||||
if (m_app->GetProtoMode())
|
||||
{
|
||||
pos.x = 139.0f/640.0f;
|
||||
pos.y = 313.0f/480.0f;
|
||||
ddim.x = 0.09f;
|
||||
pb = pw->CreateButton(pos, ddim, -1, EVENT_INTERFACE_PROTO);
|
||||
pb->SetState(STATE_SHADOW);
|
||||
}
|
||||
/*pos.x = 139.0f/640.0f;
|
||||
pos.y = 313.0f/480.0f;
|
||||
ddim.x = 0.09f;
|
||||
pb = pw->CreateButton(pos, ddim, -1, EVENT_INTERFACE_PROTO);
|
||||
pb->SetState(STATE_SHADOW);*/
|
||||
|
||||
pos.x = 0.40f;
|
||||
ddim.x = 0.20f;
|
||||
|
@ -406,19 +362,6 @@ pb->SetState(STATE_SHADOW);
|
|||
GetResource(RES_TEXT, RT_TITLE_NAME, name);
|
||||
pw->SetName(name);
|
||||
|
||||
/* TODO: #if _NEWLOOK
|
||||
pos.x = 80.0f/640.0f;
|
||||
pos.y = 93.0f/480.0f;
|
||||
ddim.x = 285.0f/640.0f;
|
||||
ddim.y = 266.0f/480.0f;
|
||||
pg = pw->CreateGroup(pos, ddim, 23, EVENT_LABEL1); // blue
|
||||
pg->SetState(STATE_SHADOW);
|
||||
pos.x = 372.0f/640.0f;
|
||||
ddim.x = 188.0f/640.0f;
|
||||
pg = pw->CreateGroup(pos, ddim, 26, EVENT_LABEL1); // violet
|
||||
pg->SetState(STATE_SHADOW);
|
||||
#endif*/
|
||||
|
||||
pos.x = 0.10f;
|
||||
pos.y = 0.40f;
|
||||
ddim.x = 0.50f;
|
||||
|
@ -458,10 +401,10 @@ pb->SetState(STATE_SHADOW);
|
|||
}
|
||||
else
|
||||
{
|
||||
strcpy(name, gamer);
|
||||
name = gamer;
|
||||
}
|
||||
pe->SetText(name);
|
||||
pe->SetCursor(strlen(name), 0);
|
||||
pe->SetText(name.c_str());
|
||||
pe->SetCursor(name.length(), 0);
|
||||
pe->SetFocus(true);
|
||||
|
||||
pos.x = 380.0f/640.0f;
|
||||
|
@ -526,15 +469,6 @@ pb->SetState(STATE_SHADOW);
|
|||
GetResource(RES_TEXT, RT_TITLE_PERSO, name);
|
||||
pw->SetName(name);
|
||||
|
||||
/* TODO: #if _NEWLOOK
|
||||
pos.x = 95.0f/640.0f;
|
||||
pos.y = 66.0f/480.0f;
|
||||
ddim.x = 443.0f/640.0f;
|
||||
ddim.y = 42.0f/480.0f;
|
||||
pg = pw->CreateGroup(pos, ddim, 26, EVENT_LABEL1); // violet
|
||||
pg->SetState(STATE_SHADOW);
|
||||
#endif*/
|
||||
|
||||
pos.x = 0.10f;
|
||||
pos.y = 0.40f;
|
||||
ddim.x = 0.50f;
|
||||
|
@ -770,15 +704,13 @@ pb->SetState(STATE_SHADOW);
|
|||
m_phase == PHASE_MISSION ||
|
||||
m_phase == PHASE_FREE ||
|
||||
m_phase == PHASE_TEEN ||
|
||||
m_phase == PHASE_USER ||
|
||||
m_phase == PHASE_PROTO )
|
||||
m_phase == PHASE_USER )
|
||||
{
|
||||
if ( m_phase == PHASE_TRAINER ) m_index = 0;
|
||||
if ( m_phase == PHASE_DEFI ) m_index = 1;
|
||||
if ( m_phase == PHASE_MISSION ) m_index = 2;
|
||||
if ( m_phase == PHASE_FREE ) m_index = 3;
|
||||
if ( m_phase == PHASE_USER ) m_index = 4;
|
||||
if ( m_phase == PHASE_PROTO ) m_index = 5;
|
||||
if ( m_phase == PHASE_TEEN ) m_index = 6;
|
||||
|
||||
if ( m_phase == PHASE_FREE )
|
||||
|
@ -794,7 +726,6 @@ pb->SetState(STATE_SHADOW);
|
|||
if ( m_phase == PHASE_FREE ) strcpy(m_sceneName, "free");
|
||||
if ( m_phase == PHASE_TEEN ) strcpy(m_sceneName, "teen");
|
||||
if ( m_phase == PHASE_USER ) strcpy(m_sceneName, "user");
|
||||
if ( m_phase == PHASE_PROTO ) strcpy(m_sceneName, "proto");
|
||||
|
||||
ReadGamerInfo();
|
||||
|
||||
|
@ -810,33 +741,9 @@ pb->SetState(STATE_SHADOW);
|
|||
if ( m_phase == PHASE_FREE ) res = RT_TITLE_FREE;
|
||||
if ( m_phase == PHASE_TEEN ) res = RT_TITLE_TEEN;
|
||||
if ( m_phase == PHASE_USER ) res = RT_TITLE_USER;
|
||||
if ( m_phase == PHASE_PROTO ) res = RT_TITLE_PROTO;
|
||||
GetResource(RES_TEXT, res, name);
|
||||
pw->SetName(name);
|
||||
|
||||
/* TODO: #if _NEWLOOK
|
||||
pos.x = 100.0f/640.0f;
|
||||
pos.y = 226.0f/480.0f;
|
||||
ddim.x = 216.0f/640.0f;
|
||||
ddim.y = 160.0f/480.0f;
|
||||
pg = pw->CreateGroup(pos, ddim, 23, EVENT_LABEL1); // blue
|
||||
pg->SetState(STATE_SHADOW);
|
||||
pos.x = 322.0f/640.0f;
|
||||
pg = pw->CreateGroup(pos, ddim, 24, EVENT_LABEL1); // cyan
|
||||
pg->SetState(STATE_SHADOW);
|
||||
|
||||
pos.x = 100.0f/640.0f;
|
||||
pos.y = 122.0f/480.0f;
|
||||
ddim.x = 438.0f/640.0f;
|
||||
ddim.y = 98.0f/480.0f;
|
||||
pg = pw->CreateGroup(pos, ddim, 25, EVENT_LABEL1); // green
|
||||
pg->SetState(STATE_SHADOW);
|
||||
pos.y = 66.0f/480.0f;
|
||||
ddim.y = 42.0f/480.0f;
|
||||
pg = pw->CreateGroup(pos, ddim, 26, EVENT_LABEL1); // violet
|
||||
pg->SetState(STATE_SHADOW);
|
||||
#endif */
|
||||
|
||||
pos.x = 0.10f;
|
||||
pos.y = 0.40f;
|
||||
ddim.x = 0.50f;
|
||||
|
@ -859,7 +766,6 @@ pb->SetState(STATE_SHADOW);
|
|||
if ( m_phase == PHASE_FREE ) res = RT_PLAY_CHAPf;
|
||||
if ( m_phase == PHASE_TEEN ) res = RT_PLAY_CHAPte;
|
||||
if ( m_phase == PHASE_USER ) res = RT_PLAY_CHAPu;
|
||||
if ( m_phase == PHASE_PROTO ) res = RT_PLAY_CHAPp;
|
||||
GetResource(RES_TEXT, res, name);
|
||||
pl = pw->CreateLabel(pos, ddim, 0, EVENT_LABEL11, name);
|
||||
pl->SetTextAlign(Gfx::TEXT_ALIGN_LEFT);
|
||||
|
@ -883,7 +789,6 @@ pb->SetState(STATE_SHADOW);
|
|||
if ( m_phase == PHASE_FREE ) res = RT_PLAY_LISTf;
|
||||
if ( m_phase == PHASE_TEEN ) res = RT_PLAY_LISTk;
|
||||
if ( m_phase == PHASE_USER ) res = RT_PLAY_LISTu;
|
||||
if ( m_phase == PHASE_PROTO ) res = RT_PLAY_LISTp;
|
||||
GetResource(RES_TEXT, res, name);
|
||||
pl = pw->CreateLabel(pos, ddim, 0, EVENT_LABEL12, name);
|
||||
pl->SetTextAlign(Gfx::TEXT_ALIGN_LEFT);
|
||||
|
@ -1049,80 +954,6 @@ pb->SetState(STATE_SHADOW);
|
|||
ddim.y = 0.05f;
|
||||
pw->CreateGroup(pos, ddim, 3, EVENT_NULL); // transparent -> gray
|
||||
|
||||
/* TODO: #if _NEWLOOK
|
||||
if ( m_phase == PHASE_SETUPd || // setup/display ?
|
||||
m_phase == PHASE_SETUPds )
|
||||
{
|
||||
pos.x = 100.0f/640.0f;
|
||||
pos.y = 130.0f/480.0f;
|
||||
ddim.x = 216.0f/640.0f;
|
||||
ddim.y = 212.0f/480.0f;
|
||||
pg = pw->CreateGroup(pos, ddim, 23, EVENT_LABEL1); // blue
|
||||
pg->SetState(STATE_SHADOW);
|
||||
pos.x = 324.0f/640.0f;
|
||||
pg = pw->CreateGroup(pos, ddim, 24, EVENT_LABEL1); // cyan
|
||||
pg->SetState(STATE_SHADOW);
|
||||
}
|
||||
if ( m_phase == PHASE_SETUPg || // setup/graphic ?
|
||||
m_phase == PHASE_SETUPgs )
|
||||
{
|
||||
pos.x = 100.0f/640.0f;
|
||||
pos.y = 130.0f/480.0f;
|
||||
ddim.x = 174.0f/640.0f;
|
||||
ddim.y = 212.0f/480.0f;
|
||||
pg = pw->CreateGroup(pos, ddim, 23, EVENT_LABEL1); // blue
|
||||
pg->SetState(STATE_SHADOW);
|
||||
pos.x = 282.0f/640.0f;
|
||||
ddim.x = 258.0f/640.0f;
|
||||
pg = pw->CreateGroup(pos, ddim, 24, EVENT_LABEL1); // cyan
|
||||
pg->SetState(STATE_SHADOW);
|
||||
}
|
||||
if ( m_phase == PHASE_SETUPp || // setup/game ?
|
||||
m_phase == PHASE_SETUPps )
|
||||
{
|
||||
pos.x = 100.0f/640.0f;
|
||||
pos.y = 130.0f/480.0f;
|
||||
ddim.x = 226.0f/640.0f;
|
||||
ddim.y = 212.0f/480.0f;
|
||||
pg = pw->CreateGroup(pos, ddim, 23, EVENT_LABEL1); // blue
|
||||
pg->SetState(STATE_SHADOW);
|
||||
pos.x = 334.0f/640.0f;
|
||||
ddim.x = 206.0f/640.0f;
|
||||
pg = pw->CreateGroup(pos, ddim, 24, EVENT_LABEL1); // cyan
|
||||
pg->SetState(STATE_SHADOW);
|
||||
}
|
||||
if ( m_phase == PHASE_SETUPc || // setup/command ?
|
||||
m_phase == PHASE_SETUPcs )
|
||||
{
|
||||
pos.x = 100.0f/640.0f;
|
||||
pos.y = 125.0f/480.0f;
|
||||
ddim.x = 440.0f/640.0f;
|
||||
ddim.y = 222.0f/480.0f;
|
||||
pg = pw->CreateGroup(pos, ddim, 23, EVENT_LABEL1); // blue
|
||||
pg->SetState(STATE_SHADOW);
|
||||
}
|
||||
if ( m_phase == PHASE_SETUPs || // setup/sound ?
|
||||
m_phase == PHASE_SETUPss )
|
||||
{
|
||||
pos.x = 100.0f/640.0f;
|
||||
pos.y = 130.0f/480.0f;
|
||||
ddim.x = 216.0f/640.0f;
|
||||
ddim.y = 212.0f/480.0f;
|
||||
pg = pw->CreateGroup(pos, ddim, 23, EVENT_LABEL1); // blue
|
||||
pg->SetState(STATE_SHADOW);
|
||||
pos.x = 324.0f/640.0f;
|
||||
pg = pw->CreateGroup(pos, ddim, 24, EVENT_LABEL1); // cyan
|
||||
pg->SetState(STATE_SHADOW);
|
||||
}
|
||||
|
||||
pos.x = 100.0f/640.0f;
|
||||
pos.y = 66.0f/480.0f;
|
||||
ddim.x = 440.0f/640.0f;
|
||||
ddim.y = 42.0f/480.0f;
|
||||
pg = pw->CreateGroup(pos, ddim, 26, EVENT_LABEL1); // violet
|
||||
pg->SetState(STATE_SHADOW);
|
||||
#endif */
|
||||
|
||||
ddim.x = 0.78f/5-0.01f;
|
||||
ddim.y = 0.06f;
|
||||
pos.x = 0.115f;
|
||||
|
@ -1353,10 +1184,7 @@ pb->SetState(STATE_SHADOW);
|
|||
ddim.y = dim.y*1;
|
||||
pos.x = ox+sx*10;
|
||||
pos.y = oy+sy*2;
|
||||
/* TODO: #if _POLISH
|
||||
ddim.x += 20.0f/640.0f;
|
||||
pos.x -= 20.0f/640.0f*3.0f;
|
||||
#endif*/
|
||||
|
||||
pb = pw->CreateButton(pos, ddim, -1, EVENT_INTERFACE_MIN);
|
||||
pb->SetState(STATE_SHADOW);
|
||||
pos.x += ddim.x;
|
||||
|
@ -1379,13 +1207,7 @@ pb->SetState(STATE_SHADOW);
|
|||
//? pc = pw->CreateCheck(pos, ddim, -1, EVENT_INTERFACE_TOTO);
|
||||
//? pc->SetState(STATE_SHADOW);
|
||||
//? pos.y -= 0.048f;
|
||||
/*TODO: #if _SCHOOL
|
||||
#if _EDU
|
||||
pc = pw->CreateCheck(pos, ddim, -1, EVENT_INTERFACE_SOLUCE4);
|
||||
pc->SetState(STATE_SHADOW);
|
||||
pos.y -= 0.048f;
|
||||
#endif
|
||||
#else*/
|
||||
|
||||
pc = pw->CreateCheck(pos, ddim, -1, EVENT_INTERFACE_MOVIES);
|
||||
pc->SetState(STATE_SHADOW);
|
||||
pos.y -= 0.048f;
|
||||
|
@ -1507,7 +1329,6 @@ pos.y -= 0.048f;
|
|||
pl = pw->CreateLabel(pos, ddim, 0, EVENT_LABEL1, name);
|
||||
pl->SetTextAlign(Gfx::TEXT_ALIGN_LEFT);
|
||||
|
||||
// TODO: #if (_FULL | _NET) & _SOUNDTRACKS
|
||||
pos.x = ox+sx*3;
|
||||
pos.y = 0.40f;
|
||||
ddim.x = dim.x*4.0f;
|
||||
|
@ -1520,14 +1341,6 @@ pos.y -= 0.048f;
|
|||
GetResource(RES_EVENT, EVENT_INTERFACE_VOLMUSIC, name);
|
||||
pl = pw->CreateLabel(pos, ddim, 0, EVENT_LABEL2, name);
|
||||
pl->SetTextAlign(Gfx::TEXT_ALIGN_LEFT);
|
||||
// #endif
|
||||
|
||||
ddim.x = dim.x*6;
|
||||
ddim.y = dim.y*0.5f;
|
||||
pos.x = ox+sx*10;
|
||||
pos.y = 0.55f;
|
||||
pc = pw->CreateCheck(pos, ddim, -1, EVENT_INTERFACE_SOUND3D);
|
||||
pc->SetState(STATE_SHADOW);
|
||||
|
||||
ddim.x = dim.x*3;
|
||||
ddim.y = dim.y*1;
|
||||
|
@ -1565,15 +1378,6 @@ pos.y -= 0.048f;
|
|||
ddim.y = 0.50f;
|
||||
pw->CreateGroup(pos, ddim, 4, EVENT_INTERFACE_GLINTr); // blue corner
|
||||
|
||||
/* TODO: #if _NEWLOOK
|
||||
pos.x = 100.0f/640.0f;
|
||||
pos.y = 66.0f/480.0f;
|
||||
ddim.x = 438.0f/640.0f;
|
||||
ddim.y = 42.0f/480.0f;
|
||||
pg = pw->CreateGroup(pos, ddim, 26, EVENT_LABEL1); // violet
|
||||
pg->SetState(STATE_SHADOW);
|
||||
#endif */
|
||||
|
||||
pos.x = 290.0f/640.0f;
|
||||
ddim.x = 245.0f/640.0f;
|
||||
|
||||
|
@ -1649,15 +1453,6 @@ pos.y -= 0.048f;
|
|||
ddim.y = 0.50f;
|
||||
pw->CreateGroup(pos, ddim, 4, EVENT_INTERFACE_GLINTr); // blue corner
|
||||
|
||||
/* TODO: #if _NEWLOOK
|
||||
pos.x = 100.0f/640.0f;
|
||||
pos.y = 66.0f/480.0f;
|
||||
ddim.x = 438.0f/640.0f;
|
||||
ddim.y = 42.0f/480.0f;
|
||||
pg = pw->CreateGroup(pos, ddim, 26, EVENT_LABEL1); // violet
|
||||
pg->SetState(STATE_SHADOW);
|
||||
#endif*/
|
||||
|
||||
pos.x = 290.0f/640.0f;
|
||||
ddim.x = 245.0f/640.0f;
|
||||
|
||||
|
@ -1717,9 +1512,6 @@ pos.y -= 0.048f;
|
|||
pos.y = 0.10f;
|
||||
ddim.x = 0.30f;
|
||||
ddim.y = 0.80f;
|
||||
/*TODO: #if _TEEN
|
||||
pw = m_interface->CreateWindows(pos, ddim, 12, EVENT_WINDOW5);
|
||||
#else*/
|
||||
pw = m_interface->CreateWindows(pos, ddim, 10, EVENT_WINDOW5);
|
||||
|
||||
pw->SetName(" ");
|
||||
|
@ -1828,7 +1620,6 @@ pos.y -= 0.048f;
|
|||
ddim.y = 0.0f;
|
||||
pw = m_interface->CreateWindows(pos, ddim, -1, EVENT_WINDOW5);
|
||||
|
||||
// TODO: #if _FULL | _NET
|
||||
pos.x = 80.0f/640.0f;
|
||||
pos.y = 240.0f/480.0f;
|
||||
ddim.x = 490.0f/640.0f;
|
||||
|
@ -1841,54 +1632,6 @@ pos.y -= 0.048f;
|
|||
pe->SetFontSize(Gfx::FONT_SIZE_SMALL);
|
||||
pe->ReadText(std::string("help/") + m_app->GetLanguageChar() + std::string("/authors.txt"));
|
||||
|
||||
// #endif
|
||||
/* TODO: #if _SCHOOL
|
||||
#if _CEEBOTDEMO
|
||||
pos.x = 80.0f/640.0f;
|
||||
pos.y = 210.0f/480.0f;
|
||||
ddim.x = 490.0f/640.0f;
|
||||
ddim.y = 150.0f/480.0f;
|
||||
#else
|
||||
pos.x = 80.0f/640.0f;
|
||||
pos.y = 200.0f/480.0f;
|
||||
ddim.x = 490.0f/640.0f;
|
||||
ddim.y = 150.0f/480.0f;
|
||||
#endif
|
||||
pe = pw->CreateEdit(pos, ddim, 0, EVENT_EDIT1);
|
||||
pe->SetGenericMode(true);
|
||||
pe->SetEditCap(false);
|
||||
pe->SetHighlightCap(false);
|
||||
pe->SetFontType(Gfx::FONT_COURIER);
|
||||
pe->SetFontSize(Gfx::FONT_SIZE_SMALL);
|
||||
pe->ReadText("help/authors.txt");*/
|
||||
|
||||
/* #if _DEMO
|
||||
//? pos.x = 80.0f/640.0f;
|
||||
//? pos.y = 240.0f/480.0f;
|
||||
//? ddim.x = 490.0f/640.0f;
|
||||
//? ddim.y = 110.0f/480.0f;
|
||||
//? pe = pw->CreateEdit(pos, ddim, 0, EVENT_EDIT1);
|
||||
//? pe->SetGenericMode(true);
|
||||
//? pe->SetEditCap(false);
|
||||
//? pe->SetHiliteCap(false);
|
||||
//? pe->SetFontType(Gfx::FONT_COURIER);
|
||||
//? pe->SetFontSize(Gfx::FONT_SIZE_SMALL);
|
||||
//? pe->ReadText("help/demo.txt");
|
||||
|
||||
//? pos.x = 80.0f/640.0f;
|
||||
//? pos.y = 140.0f/480.0f;
|
||||
//? ddim.x = 490.0f/640.0f;
|
||||
//? ddim.y = 100.0f/480.0f;
|
||||
//? pe = pw->CreateEdit(pos, ddim, 0, EVENT_EDIT2);
|
||||
//? pe->SetGenericMode(true);
|
||||
//? pe->SetEditCap(false);
|
||||
//? pe->SetHiliteCap(false);
|
||||
//? pe->SetFontType(Gfx::FONT_COURIER);
|
||||
//? pe->SetFontSize(Gfx::FONT_SIZE_SMALL);
|
||||
//? pe->ReadText("help/authors.txt");
|
||||
#endif */
|
||||
|
||||
// TODO: #if !_DEMO
|
||||
pos.x = 40.0f/640.0f;
|
||||
pos.y = 83.0f/480.0f;
|
||||
ddim.x = 246.0f/640.0f;
|
||||
|
@ -1918,23 +1661,13 @@ pos.y -= 0.048f;
|
|||
pl = pw->CreateLabel(pos, ddim, 0, EVENT_LABEL4, name);
|
||||
pl->SetFontType(Gfx::FONT_COURIER);
|
||||
pl->SetFontSize(Gfx::FONT_SIZE_SMALL);
|
||||
// #endif
|
||||
|
||||
/* TODO: #if _DEMO
|
||||
pos.x = 481.0f/640.0f;
|
||||
pos.y = 51.0f/480.0f;
|
||||
ddim.x = 30.0f/640.0f;
|
||||
ddim.y = 30.0f/480.0f;
|
||||
pb = pw->CreateButton(pos, ddim, 49, EVENT_INTERFACE_ABORT);
|
||||
pb->SetState(STATE_SHADOW);
|
||||
#else */
|
||||
|
||||
pos.x = 306.0f/640.0f;
|
||||
pos.y = 17.0f/480.0f;
|
||||
ddim.x = 30.0f/640.0f;
|
||||
ddim.y = 30.0f/480.0f;
|
||||
pb = pw->CreateButton(pos, ddim, 49, EVENT_INTERFACE_ABORT);
|
||||
pb->SetState(STATE_SHADOW);
|
||||
// #endif
|
||||
|
||||
m_engine->SetBackground("generico.png",
|
||||
Gfx::Color(0.0f, 0.0f, 0.0f, 0.0f),
|
||||
|
@ -1953,7 +1686,6 @@ pos.y -= 0.048f;
|
|||
m_phase == PHASE_FREE ||
|
||||
m_phase == PHASE_TEEN ||
|
||||
m_phase == PHASE_USER ||
|
||||
m_phase == PHASE_PROTO ||
|
||||
m_phase == PHASE_SETUPd ||
|
||||
m_phase == PHASE_SETUPg ||
|
||||
m_phase == PHASE_SETUPp ||
|
||||
|
@ -1962,26 +1694,12 @@ pos.y -= 0.048f;
|
|||
m_phase == PHASE_READ ||
|
||||
m_phase == PHASE_LOADING )
|
||||
{
|
||||
/*TODO: #if _SCHOOL
|
||||
#if _TEEN
|
||||
pos.x = 50.0f/640.0f;
|
||||
pos.y = 430.0f/480.0f;
|
||||
ddim.x = 200.0f/640.0f;
|
||||
ddim.y = 10.0f/480.0f;
|
||||
#else
|
||||
pos.x = 450.0f/640.0f;
|
||||
pos.y = 0.0f/480.0f;
|
||||
ddim.x = 170.0f/640.0f;
|
||||
ddim.y = 9.0f/480.0f;
|
||||
#endif
|
||||
#else */
|
||||
pos.x = 540.0f/640.0f;
|
||||
pos.y = 9.0f/480.0f;
|
||||
ddim.x = 90.0f/640.0f;
|
||||
ddim.y = 10.0f/480.0f;
|
||||
//#endif
|
||||
//GetResource(RES_TEXT, RT_VERSION_ID, name);
|
||||
pl = pw->CreateLabel(pos, ddim, 0, EVENT_LABEL1, __DATE__);
|
||||
pl = pw->CreateLabel(pos, ddim, 0, EVENT_LABEL1, COLOBOT_VERSION_DISPLAY);
|
||||
pl->SetFontType(Gfx::FONT_COURIER);
|
||||
pl->SetFontSize(9.0f);
|
||||
}
|
||||
|
@ -2087,9 +1805,10 @@ bool CMainDialog::EventProcess(const Event &event)
|
|||
{
|
||||
m_shotDelay --;
|
||||
if ( m_shotDelay == 0 )
|
||||
{
|
||||
m_engine->WriteScreenShot(m_shotName, 320, 240);
|
||||
//? m_engine->WriteScreenShot(m_shotName, 160, 120);
|
||||
{
|
||||
Math::IntPoint windowSize = m_engine->GetWindowSize();
|
||||
|
||||
m_engine->WriteScreenShot(m_shotName, windowSize.x, windowSize.y);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -2237,10 +1956,6 @@ bool CMainDialog::EventProcess(const Event &event)
|
|||
m_main->ChangePhase(PHASE_USER);
|
||||
break;
|
||||
|
||||
case EVENT_INTERFACE_PROTO:
|
||||
m_main->ChangePhase(PHASE_PROTO);
|
||||
break;
|
||||
|
||||
case EVENT_INTERFACE_SETUP:
|
||||
m_main->ChangePhase(m_phaseSetup);
|
||||
break;
|
||||
|
@ -2444,8 +2159,7 @@ bool CMainDialog::EventProcess(const Event &event)
|
|||
m_phase == PHASE_MISSION ||
|
||||
m_phase == PHASE_FREE ||
|
||||
m_phase == PHASE_TEEN ||
|
||||
m_phase == PHASE_USER ||
|
||||
m_phase == PHASE_PROTO )
|
||||
m_phase == PHASE_USER )
|
||||
{
|
||||
pw = static_cast<CWindow*>(m_interface->SearchControl(EVENT_WINDOW5));
|
||||
if ( pw == 0 ) return false;
|
||||
|
@ -2464,8 +2178,7 @@ bool CMainDialog::EventProcess(const Event &event)
|
|||
m_phase == PHASE_MISSION ||
|
||||
m_phase == PHASE_FREE ||
|
||||
m_phase == PHASE_TEEN ||
|
||||
m_phase == PHASE_USER ||
|
||||
m_phase == PHASE_PROTO )
|
||||
m_phase == PHASE_USER )
|
||||
{
|
||||
switch( event.type )
|
||||
{
|
||||
|
@ -2492,11 +2205,6 @@ bool CMainDialog::EventProcess(const Event &event)
|
|||
break;
|
||||
|
||||
case EVENT_INTERFACE_PLAY:
|
||||
if ( m_phase == PHASE_PROTO && m_chap[m_index] == 0 && m_sel[m_index] == 0 )
|
||||
{
|
||||
m_main->ChangePhase(PHASE_MODEL);
|
||||
break;
|
||||
}
|
||||
m_sceneRank = (m_chap[m_index]+1)*100+(m_sel[m_index]+1);
|
||||
m_phaseTerm = m_phase;
|
||||
m_main->ChangePhase(PHASE_LOADING);
|
||||
|
@ -2888,7 +2596,7 @@ bool CMainDialog::EventProcess(const Event &event)
|
|||
break;
|
||||
|
||||
case EVENT_INTERFACE_KDEF:
|
||||
m_app->ResetKeyStates();
|
||||
m_main->SetDefaultInputBindings();
|
||||
UpdateKey();
|
||||
break;
|
||||
|
||||
|
@ -2913,12 +2621,6 @@ bool CMainDialog::EventProcess(const Event &event)
|
|||
ChangeSetupButtons();
|
||||
break;
|
||||
|
||||
case EVENT_INTERFACE_SOUND3D:
|
||||
m_sound->SetSound3D(!m_sound->GetSound3D());
|
||||
ChangeSetupButtons();
|
||||
UpdateSetupButtons();
|
||||
break;
|
||||
|
||||
case EVENT_INTERFACE_SILENT:
|
||||
m_sound->SetAudioVolume(0);
|
||||
m_sound->SetMusicVolume(0);
|
||||
|
@ -3119,8 +2821,7 @@ void CMainDialog::GlintMove()
|
|||
m_phase == PHASE_MISSION ||
|
||||
m_phase == PHASE_FREE ||
|
||||
m_phase == PHASE_TEEN ||
|
||||
m_phase == PHASE_USER ||
|
||||
m_phase == PHASE_PROTO )
|
||||
m_phase == PHASE_USER )
|
||||
{
|
||||
pg = static_cast<CGroup*>(pw->SearchControl(EVENT_INTERFACE_GLINTl));
|
||||
if ( pg != 0 )
|
||||
|
@ -3256,8 +2957,6 @@ Math::Vector SoundRand()
|
|||
|
||||
void CMainDialog::FrameParticle(float rTime)
|
||||
{
|
||||
/* TODO: #if _NEWLOOK
|
||||
#else */
|
||||
Math::Vector pos, speed;
|
||||
Math::Point dim;
|
||||
float *pParti, *pGlint;
|
||||
|
@ -3348,7 +3047,6 @@ void CMainDialog::FrameParticle(float rTime)
|
|||
m_phase == PHASE_FREE ||
|
||||
m_phase == PHASE_TEEN ||
|
||||
m_phase == PHASE_USER ||
|
||||
m_phase == PHASE_PROTO ||
|
||||
m_phase == PHASE_SETUPd ||
|
||||
m_phase == PHASE_SETUPg ||
|
||||
m_phase == PHASE_SETUPp ||
|
||||
|
@ -3620,7 +3318,7 @@ void CMainDialog::BuildSceneName(std::string &filename, char *base, int rank)
|
|||
{
|
||||
rankStream << std::setfill('0') << std::setw(3) << rank;
|
||||
filename = base + rankStream.str() + ".txt";
|
||||
filename = CApplication::GetInstance().GetDataFilePath(DIR_LEVEL, filename);
|
||||
filename = CGameData::GetInstancePointer()->GetFilePath(DIR_LEVEL, filename);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -4019,7 +3717,7 @@ void CMainDialog::UpdatePerso()
|
|||
CColor* pc;
|
||||
CSlider* ps;
|
||||
Gfx::Color color;
|
||||
char name[100];
|
||||
std::string name;
|
||||
int i;
|
||||
|
||||
pw = static_cast<CWindow*>(m_interface->SearchControl(EVENT_WINDOW5));
|
||||
|
@ -4366,8 +4064,8 @@ void CMainDialog::IOReadName()
|
|||
}
|
||||
|
||||
time(&now);
|
||||
TimeToAscii(now, line);
|
||||
sprintf(name, "%s %d - %s", resume, m_sel[m_index]+1, line);
|
||||
TimeToAsciiClean(now, line);
|
||||
sprintf(name, "%s - %s %d", line, resume, m_sel[m_index]+1);
|
||||
pe->SetText(name);
|
||||
pe->SetCursor(strlen(name), 0);
|
||||
pe->SetFocus(true);
|
||||
|
@ -4383,7 +4081,7 @@ void CMainDialog::IOReadList()
|
|||
char line[500];
|
||||
char name[100];
|
||||
int i;
|
||||
fs::directory_iterator end_iter;
|
||||
std::vector<fs::path> v;
|
||||
|
||||
pw = static_cast<CWindow*>(m_interface->SearchControl(EVENT_WINDOW5));
|
||||
if ( pw == 0 ) return;
|
||||
|
@ -4397,12 +4095,14 @@ void CMainDialog::IOReadList()
|
|||
|
||||
if (fs::exists(saveDir) && fs::is_directory(saveDir))
|
||||
{
|
||||
for( fs::directory_iterator dir_iter(saveDir) ; dir_iter != end_iter ; ++dir_iter)
|
||||
copy(fs::directory_iterator(saveDir), fs::directory_iterator(), back_inserter(v));
|
||||
std::sort(v.begin(), v.end());
|
||||
for( std::vector<fs::path>::iterator iter = v.begin(); iter != v.end(); ++iter)
|
||||
{
|
||||
if ( fs::is_directory(dir_iter->status()) && fs::exists(dir_iter->path() / "data.sav") )
|
||||
if ( fs::is_directory(*iter) && fs::exists(*iter / "data.sav") )
|
||||
{
|
||||
|
||||
file = fopen((dir_iter->path() / "data.sav").make_preferred().string().c_str(), "r");
|
||||
file = fopen((*iter / "data.sav").make_preferred().string().c_str(), "r");
|
||||
if ( file == NULL ) continue;
|
||||
|
||||
while ( fgets(line, 500, file) != NULL )
|
||||
|
@ -4426,7 +4126,7 @@ void CMainDialog::IOReadList()
|
|||
fclose(file);
|
||||
|
||||
pl->SetItemName(m_saveList.size(), name);
|
||||
m_saveList.push_back(dir_iter->path());
|
||||
m_saveList.push_back(*iter);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -4434,8 +4134,9 @@ void CMainDialog::IOReadList()
|
|||
// invalid index
|
||||
if ( m_phase == PHASE_WRITE || m_phase == PHASE_WRITEs )
|
||||
{
|
||||
GetResource(RES_TEXT, RT_IO_NEW, name);
|
||||
pl->SetItemName(m_saveList.size(), name);
|
||||
std::string nameStr;
|
||||
GetResource(RES_TEXT, RT_IO_NEW, nameStr);
|
||||
pl->SetItemName(m_saveList.size(), nameStr.c_str());
|
||||
}
|
||||
|
||||
pl->SetSelect(m_saveList.size());
|
||||
|
@ -4694,8 +4395,7 @@ void CMainDialog::AllMissionUpdate()
|
|||
m_phase == PHASE_MISSION ||
|
||||
m_phase == PHASE_FREE ||
|
||||
m_phase == PHASE_TEEN ||
|
||||
m_phase == PHASE_USER ||
|
||||
m_phase == PHASE_PROTO )
|
||||
m_phase == PHASE_USER )
|
||||
{
|
||||
UpdateSceneChap(m_chap[m_index]);
|
||||
UpdateSceneList(m_chap[m_index], m_sel[m_index]);
|
||||
|
@ -4793,17 +4493,6 @@ void CMainDialog::UpdateSceneChap(int &chap)
|
|||
{
|
||||
for ( j=0 ; j<9 ; j++ )
|
||||
{
|
||||
/* TODO: #if _SCHOOL
|
||||
if ( m_phase == PHASE_MISSION ) break;
|
||||
if ( m_phase == PHASE_FREE ) break;
|
||||
#if _CEEBOTDEMO
|
||||
if ( m_phase == PHASE_TRAINER && j >= 2 ) break;
|
||||
#endif
|
||||
#endif
|
||||
#if _DEMO
|
||||
if ( m_phase == PHASE_MISSION && j >= 4 ) break;
|
||||
if ( m_phase == PHASE_TRAINER && j >= 1 ) break;
|
||||
#endif */
|
||||
BuildSceneName(fileName, m_sceneName, (j+1)*100);
|
||||
file = fopen(fileName.c_str(), "r");
|
||||
if ( file == NULL ) break;
|
||||
|
@ -4848,14 +4537,6 @@ void CMainDialog::UpdateSceneChap(int &chap)
|
|||
break;
|
||||
}
|
||||
|
||||
/* TODO: #if _TEEN
|
||||
if ( m_phase == PHASE_TRAINER && !m_main->GetShowAll() && !bPassed )
|
||||
{
|
||||
j ++;
|
||||
break;
|
||||
}
|
||||
#endif*/
|
||||
|
||||
if ( m_phase == PHASE_FREE && j == m_accessChap )
|
||||
{
|
||||
j ++;
|
||||
|
@ -4899,21 +4580,6 @@ void CMainDialog::UpdateSceneList(int chap, int &sel)
|
|||
|
||||
for ( j=0 ; j<99 ; j++ )
|
||||
{
|
||||
/* TODO: #if _SCHOOL
|
||||
if ( m_phase == PHASE_MISSION ) break;
|
||||
if ( m_phase == PHASE_FREE ) break;
|
||||
#if _CEEBOTDEMO
|
||||
#if _TEEN
|
||||
if ( m_phase == PHASE_TRAINER && j >= 5 ) break;
|
||||
#else
|
||||
if ( m_phase == PHASE_TRAINER && j >= 3 ) break;
|
||||
#endif
|
||||
#endif
|
||||
#endif
|
||||
#if _DEMO
|
||||
if ( m_phase == PHASE_MISSION && j >= 3 ) break;
|
||||
if ( m_phase == PHASE_TRAINER && j >= 5 ) break;
|
||||
#endif */
|
||||
BuildSceneName(fileName, m_sceneName, (chap+1)*100+(j+1));
|
||||
file = fopen(fileName.c_str(), "r");
|
||||
if ( file == NULL ) break;
|
||||
|
@ -4957,14 +4623,6 @@ void CMainDialog::UpdateSceneList(int chap, int &sel)
|
|||
j ++;
|
||||
break;
|
||||
}
|
||||
|
||||
/* TODO: #if _TEEN
|
||||
if ( m_phase == PHASE_TRAINER && !m_main->GetShowAll() && !bPassed )
|
||||
{
|
||||
j ++;
|
||||
break;
|
||||
}
|
||||
#endif*/
|
||||
}
|
||||
|
||||
BuildSceneName(fileName, m_sceneName, (chap+1)*100+(j+1));
|
||||
|
@ -4998,8 +4656,7 @@ void CMainDialog::ShowSoluceUpdate()
|
|||
m_phase == PHASE_MISSION ||
|
||||
m_phase == PHASE_FREE ||
|
||||
m_phase == PHASE_TEEN ||
|
||||
m_phase == PHASE_USER ||
|
||||
m_phase == PHASE_PROTO )
|
||||
m_phase == PHASE_USER )
|
||||
{
|
||||
m_bSceneSoluce = false;
|
||||
|
||||
|
@ -5456,13 +5113,6 @@ void CMainDialog::UpdateSetupButtons()
|
|||
value = static_cast<float>(m_sound->GetMusicVolume());
|
||||
ps->SetVisibleValue(value);
|
||||
}
|
||||
|
||||
pc = static_cast<CCheck*>(pw->SearchControl(EVENT_INTERFACE_SOUND3D));
|
||||
if ( pc != 0 )
|
||||
{
|
||||
pc->SetState(STATE_CHECK, m_sound->GetSound3D());
|
||||
pc->SetState(STATE_ENABLE, m_sound->GetSound3DCap());
|
||||
}
|
||||
}
|
||||
|
||||
// Updates the engine function of the buttons after the setup phase.
|
||||
|
@ -5564,7 +5214,6 @@ void CMainDialog::SetupMemorize()
|
|||
GetProfile().SetLocalProfileInt("Setup", "TotoMode", m_engine->GetTotoMode());
|
||||
GetProfile().SetLocalProfileInt("Setup", "AudioVolume", m_sound->GetAudioVolume());
|
||||
GetProfile().SetLocalProfileInt("Setup", "MusicVolume", m_sound->GetMusicVolume());
|
||||
GetProfile().SetLocalProfileInt("Setup", "Sound3D", m_sound->GetSound3D());
|
||||
GetProfile().SetLocalProfileInt("Setup", "EditIndentMode", m_engine->GetEditIndentMode());
|
||||
GetProfile().SetLocalProfileInt("Setup", "EditIndentValue", m_engine->GetEditIndentValue());
|
||||
|
||||
|
@ -5601,21 +5250,7 @@ void CMainDialog::SetupMemorize()
|
|||
|
||||
GetProfile().SetLocalProfileString("Setup", "KeyMap", key.str());
|
||||
|
||||
#if _NET
|
||||
if ( m_accessEnable )
|
||||
{
|
||||
iValue = m_accessMission;
|
||||
SetLocalProfileInt("Setup", "AccessMission", iValue);
|
||||
|
||||
iValue = m_accessUser;
|
||||
SetLocalProfileInt("Setup", "AccessUser", iValue);
|
||||
}
|
||||
#endif
|
||||
|
||||
GetProfile().SetLocalProfileInt("Setup", "DeleteGamer", m_bDeleteGamer);
|
||||
|
||||
// TODO: write graphic engine profile
|
||||
//m_engine->WriteProfile();
|
||||
}
|
||||
|
||||
// Remember all the settings.
|
||||
|
@ -5802,11 +5437,6 @@ void CMainDialog::SetupRecall()
|
|||
m_sound->SetMusicVolume(iValue);
|
||||
}
|
||||
|
||||
if ( GetProfile().GetLocalProfileInt("Setup", "Sound3D", iValue) )
|
||||
{
|
||||
m_sound->SetSound3D(iValue == 1);
|
||||
}
|
||||
|
||||
if ( GetProfile().GetLocalProfileInt("Setup", "EditIndentMode", iValue) )
|
||||
{
|
||||
m_engine->SetEditIndentMode(iValue);
|
||||
|
@ -5830,21 +5460,6 @@ void CMainDialog::SetupRecall()
|
|||
}
|
||||
}
|
||||
|
||||
#if _NET
|
||||
if ( m_accessEnable )
|
||||
{
|
||||
if ( GetProfile().GetLocalProfileInt("Setup", "AccessMission", iValue) )
|
||||
{
|
||||
m_accessMission = iValue;
|
||||
}
|
||||
|
||||
if ( GetProfile().GetLocalProfileInt("Setup", "AccessUser", iValue) )
|
||||
{
|
||||
m_accessUser = iValue;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
if ( GetProfile().GetLocalProfileInt("Setup", "DeleteGamer", iValue) )
|
||||
{
|
||||
m_bDeleteGamer = iValue;
|
||||
|
@ -6026,7 +5641,7 @@ void CMainDialog::StartAbort()
|
|||
CWindow* pw;
|
||||
CButton* pb;
|
||||
Math::Point pos, dim;
|
||||
char name[100];
|
||||
std::string name;
|
||||
|
||||
StartDialog(Math::Point(0.3f, 0.8f), true, false, false);
|
||||
m_bDialogDelete = false;
|
||||
|
@ -6047,10 +5662,6 @@ void CMainDialog::StartAbort()
|
|||
|
||||
pos.x = 0.40f;
|
||||
dim.x = 0.20f;
|
||||
/* TODO: #if _POLISH
|
||||
pos.x -= 7.0f/640.0f;
|
||||
dim.x += 14.0f/640.0f;
|
||||
#endif*/
|
||||
dim.y = 32.0f/480.0f;
|
||||
|
||||
pos.y = 0.74f;
|
||||
|
@ -6105,7 +5716,7 @@ void CMainDialog::StartDeleteObject()
|
|||
CWindow* pw;
|
||||
CButton* pb;
|
||||
Math::Point pos, dim;
|
||||
char name[100];
|
||||
std::string name;
|
||||
|
||||
StartDialog(Math::Point(0.7f, 0.3f), false, true, true);
|
||||
m_bDialogDelete = true;
|
||||
|
@ -6139,21 +5750,22 @@ void CMainDialog::StartDeleteGame(char *gamer)
|
|||
CWindow* pw;
|
||||
CButton* pb;
|
||||
Math::Point pos, dim;
|
||||
char name[100];
|
||||
char text[100];
|
||||
|
||||
StartDialog(Math::Point(0.7f, 0.3f), false, true, true);
|
||||
m_bDialogDelete = true;
|
||||
|
||||
pw = static_cast<CWindow*>(m_interface->SearchControl(EVENT_WINDOW9));
|
||||
if ( pw == 0 ) return;
|
||||
if (pw == nullptr)
|
||||
return;
|
||||
|
||||
std::string name;
|
||||
|
||||
pos.x = 0.00f;
|
||||
pos.y = 0.50f;
|
||||
dim.x = 1.00f;
|
||||
dim.y = 0.05f;
|
||||
GetResource(RES_TEXT, RT_DIALOG_DELGAME, name);
|
||||
sprintf(text, name, gamer);
|
||||
std::string text = StrUtils::Format(name.c_str(), gamer);
|
||||
pw->CreateLabel(pos, dim, -1, EVENT_DIALOG_LABEL, text);
|
||||
|
||||
pb = static_cast<CButton*>(pw->SearchControl(EVENT_DIALOG_OK));
|
||||
|
@ -6175,12 +5787,14 @@ void CMainDialog::StartQuit()
|
|||
CWindow* pw;
|
||||
CButton* pb;
|
||||
Math::Point pos, dim;
|
||||
char name[100];
|
||||
|
||||
StartDialog(Math::Point(0.6f, 0.3f), false, true, true);
|
||||
|
||||
pw = static_cast<CWindow*>(m_interface->SearchControl(EVENT_WINDOW9));
|
||||
if ( pw == 0 ) return;
|
||||
if (pw == nullptr)
|
||||
return;
|
||||
|
||||
std::string name;
|
||||
|
||||
pos.x = 0.00f;
|
||||
pos.y = 0.50f;
|
||||
|
@ -6208,7 +5822,6 @@ void CMainDialog::StartDialog(Math::Point dim, bool bFire, bool bOK, bool bCance
|
|||
CWindow* pw;
|
||||
CButton* pb;
|
||||
Math::Point pos, ddim;
|
||||
char name[100];
|
||||
|
||||
StartSuspend();
|
||||
|
||||
|
@ -6247,6 +5860,8 @@ void CMainDialog::StartDialog(Math::Point dim, bool bFire, bool bOK, bool bCance
|
|||
|
||||
m_bDialogFire = bFire;
|
||||
|
||||
std::string name;
|
||||
|
||||
pos.x = (1.0f-dim.x)/2.0f;
|
||||
pos.y = (1.0f-dim.y)/2.0f;
|
||||
pw = m_interface->CreateWindows(pos, dim, bFire?12:8, EVENT_WINDOW9);
|
||||
|
@ -6442,8 +6057,8 @@ void CMainDialog::StartSuspend()
|
|||
{
|
||||
m_sound->MuteAll(true);
|
||||
m_main->ClearInterface();
|
||||
m_bInitPause = m_engine->GetPause();
|
||||
m_engine->SetPause(true);
|
||||
m_bInitPause = m_pause->GetPauseType();
|
||||
m_pause->SetPause(PAUSE_DIALOG);
|
||||
m_engine->SetOverFront(false); // over flat behind
|
||||
m_main->CreateShortcuts();
|
||||
m_main->StartSuspend();
|
||||
|
@ -6457,7 +6072,7 @@ void CMainDialog::StopSuspend()
|
|||
{
|
||||
m_sound->MuteAll(false);
|
||||
m_main->ClearInterface();
|
||||
if ( !m_bInitPause ) m_engine->SetPause(false);
|
||||
m_pause->SetPause(m_bInitPause);
|
||||
m_engine->SetOverFront(true); // over flat front
|
||||
m_main->CreateShortcuts();
|
||||
m_main->StopSuspend();
|
||||
|
|
|
@ -23,6 +23,8 @@
|
|||
|
||||
#include "object/robotmain.h"
|
||||
|
||||
#include "app/pausemanager.h"
|
||||
|
||||
#include <boost/filesystem.hpp>
|
||||
#include <boost/algorithm/string.hpp>
|
||||
|
||||
|
@ -186,6 +188,7 @@ protected:
|
|||
Gfx::CParticle* m_particle;
|
||||
Gfx::CCamera* m_camera;
|
||||
CSoundInterface* m_sound;
|
||||
CPauseManager* m_pause;
|
||||
|
||||
Phase m_phase; // copy of CRobotMain
|
||||
Phase m_phaseSetup; // tab selected
|
||||
|
@ -242,26 +245,26 @@ protected:
|
|||
bool m_bCameraInvertY; // for CCamera
|
||||
bool m_bEffect; // for CCamera
|
||||
|
||||
Math::Point m_glintMouse;
|
||||
float m_glintTime;
|
||||
Math::Point m_glintMouse;
|
||||
float m_glintTime;
|
||||
|
||||
int m_loadingCounter;
|
||||
int m_loadingCounter;
|
||||
|
||||
bool m_bDialog; // this dialogue?
|
||||
bool m_bDialogFire; // setting on fire?
|
||||
bool m_bDialogDelete;
|
||||
Math::Point m_dialogPos;
|
||||
Math::Point m_dialogDim;
|
||||
float m_dialogParti;
|
||||
float m_dialogTime;
|
||||
bool m_bInitPause;
|
||||
bool m_bDialog; // this dialogue?
|
||||
bool m_bDialogFire; // setting on fire?
|
||||
bool m_bDialogDelete;
|
||||
Math::Point m_dialogPos;
|
||||
Math::Point m_dialogDim;
|
||||
float m_dialogParti;
|
||||
float m_dialogTime;
|
||||
PauseType m_bInitPause;
|
||||
Gfx::CameraType m_initCamera;
|
||||
|
||||
int m_partiPhase[10];
|
||||
float m_partiTime[10];
|
||||
Math::Point m_partiPos[10];
|
||||
int m_partiPhase[10];
|
||||
float m_partiTime[10];
|
||||
Math::Point m_partiPos[10];
|
||||
|
||||
SceneInfo m_sceneInfo[MAXSCENE];
|
||||
SceneInfo m_sceneInfo[MAXSCENE];
|
||||
|
||||
std::vector<fs::path> m_saveList;
|
||||
};
|
||||
|
|
|
@ -97,7 +97,6 @@ bool CMainShort::CreateShortcuts()
|
|||
ObjectType type;
|
||||
Math::Point pos, dim;
|
||||
int i, rank, icon;
|
||||
char name[100];
|
||||
|
||||
if ( m_main->GetFixScene() ) return false;
|
||||
|
||||
|
@ -208,10 +207,11 @@ bool CMainShort::CreateShortcuts()
|
|||
m_shortcuts[rank] = pObj;
|
||||
|
||||
pc = m_interface->SearchControl(table_sc_em[rank]);
|
||||
if ( pc != 0 )
|
||||
if ( pc != nullptr )
|
||||
{
|
||||
pObj->GetTooltipName(name);
|
||||
pc->SetTooltip(name);
|
||||
std::string tooltipName;
|
||||
pObj->GetTooltipName(tooltipName);
|
||||
pc->SetTooltip(tooltipName);
|
||||
}
|
||||
rank ++;
|
||||
|
||||
|
|
|
@ -71,6 +71,7 @@ CStudio::CStudio()
|
|||
m_main = CRobotMain::GetInstancePointer();
|
||||
m_interface = m_main->GetInterface();
|
||||
m_camera = m_main->GetCamera();
|
||||
m_pause = CPauseManager::GetInstancePointer();
|
||||
|
||||
m_bEditMaximized = false;
|
||||
m_bEditMinimized = false;
|
||||
|
@ -97,7 +98,6 @@ bool CStudio::EventProcess(const Event &event)
|
|||
CWindow* pw;
|
||||
CEdit* edit;
|
||||
CSlider* slider;
|
||||
char res[100];
|
||||
|
||||
if ( m_dialog != SD_NULL ) // dialogue exists?
|
||||
{
|
||||
|
@ -184,17 +184,17 @@ bool CStudio::EventProcess(const Event &event)
|
|||
|
||||
if ( event.type == EVENT_STUDIO_COMPILE ) // compile?
|
||||
{
|
||||
char buffer[100];
|
||||
|
||||
if ( m_script->GetScript(edit) ) // compile
|
||||
{
|
||||
std::string res;
|
||||
GetResource(RES_TEXT, RT_STUDIO_COMPOK, res);
|
||||
SetInfoText(res, false);
|
||||
}
|
||||
else
|
||||
{
|
||||
m_script->GetError(buffer);
|
||||
SetInfoText(buffer, false);
|
||||
std::string error;
|
||||
m_script->GetError(error);
|
||||
SetInfoText(error, false);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -218,9 +218,9 @@ bool CStudio::EventProcess(const Event &event)
|
|||
}
|
||||
else
|
||||
{
|
||||
char buffer[100];
|
||||
m_script->GetError(buffer);
|
||||
SetInfoText(buffer, false);
|
||||
std::string error;
|
||||
m_script->GetError(error);
|
||||
SetInfoText(error, false);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -344,7 +344,6 @@ bool CStudio::EventFrame(const Event &event)
|
|||
CList* list;
|
||||
float time;
|
||||
int cursor1, cursor2, iCursor1, iCursor2;
|
||||
char res[100];
|
||||
|
||||
m_time += event.rTime;
|
||||
m_fixInfoTextTime -= event.rTime;
|
||||
|
@ -363,6 +362,7 @@ bool CStudio::EventFrame(const Event &event)
|
|||
m_bRunning = false;
|
||||
UpdateFlux(); // stop
|
||||
AdjustEditScript();
|
||||
std::string res;
|
||||
GetResource(RES_TEXT, RT_STUDIO_PROGSTOP, res);
|
||||
SetInfoText(res, false);
|
||||
|
||||
|
@ -558,14 +558,13 @@ void CStudio::StartEditScript(CScript *script, std::string name, int rank)
|
|||
CButton* button;
|
||||
CSlider* slider;
|
||||
CList* list;
|
||||
char res[100];
|
||||
|
||||
m_script = script;
|
||||
m_rank = rank;
|
||||
|
||||
m_main->SetEditLock(true, true);
|
||||
m_main->SetEditFull(false);
|
||||
m_bInitPause = m_engine->GetPause();
|
||||
m_bInitPause = m_pause->GetPauseType();
|
||||
m_main->SetSpeed(1.0f);
|
||||
m_editCamera = m_camera->GetType();
|
||||
m_camera->SetType(Gfx::CAM_TYPE_EDIT);
|
||||
|
@ -575,28 +574,33 @@ void CStudio::StartEditScript(CScript *script, std::string name, int rank)
|
|||
m_script->SetStepMode(!m_bRealTime);
|
||||
|
||||
button = static_cast< CButton* >(m_interface->SearchControl(EVENT_BUTTON_QUIT));
|
||||
if ( button != 0 )
|
||||
{
|
||||
if (button != nullptr)
|
||||
button->ClearState(STATE_VISIBLE);
|
||||
}
|
||||
|
||||
pos = m_editFinalPos = m_editActualPos = m_main->GetWindowPos();
|
||||
dim = m_editFinalDim = m_editActualDim = m_main->GetWindowDim();
|
||||
pw = m_interface->CreateWindows(pos, dim, 8, EVENT_WINDOW3);
|
||||
if ( pw == nullptr ) return;
|
||||
if (pw == nullptr)
|
||||
return;
|
||||
|
||||
pw->SetState(STATE_SHADOW);
|
||||
pw->SetRedim(true); // before SetName!
|
||||
pw->SetMovable(true);
|
||||
pw->SetClosable(true);
|
||||
|
||||
std::string res;
|
||||
GetResource(RES_TEXT, RT_STUDIO_TITLE, res);
|
||||
pw->SetName(res);
|
||||
|
||||
pw->SetMinDim(Math::Point(0.49f, 0.50f));
|
||||
pw->SetMaximized(m_bEditMaximized);
|
||||
pw->SetMinimized(m_bEditMinimized);
|
||||
m_main->SetEditFull(m_bEditMaximized);
|
||||
|
||||
edit = pw->CreateEdit(pos, dim, 0, EVENT_STUDIO_EDIT);
|
||||
if ( edit == 0 ) return;
|
||||
if (edit == nullptr)
|
||||
return;
|
||||
|
||||
edit->SetState(STATE_SHADOW);
|
||||
edit->SetInsideScroll(false);
|
||||
//? if ( m_bRunning ) edit->SetEdit(false);
|
||||
|
@ -851,7 +855,6 @@ bool CStudio::StopEditScript(bool bCancel)
|
|||
CWindow* pw;
|
||||
CEdit* edit;
|
||||
CButton* button;
|
||||
char buffer[100];
|
||||
|
||||
pw = static_cast< CWindow* >(m_interface->SearchControl(EVENT_WINDOW3));
|
||||
if ( pw == nullptr ) return false;
|
||||
|
@ -863,8 +866,9 @@ bool CStudio::StopEditScript(bool bCancel)
|
|||
{
|
||||
if ( !m_script->GetScript(edit) ) // compile
|
||||
{
|
||||
m_script->GetError(buffer);
|
||||
SetInfoText(buffer, false);
|
||||
std::string error;
|
||||
m_script->GetError(error);
|
||||
SetInfoText(error, false);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
@ -879,7 +883,7 @@ bool CStudio::StopEditScript(bool bCancel)
|
|||
button->SetState(STATE_VISIBLE);
|
||||
}
|
||||
|
||||
if ( !m_bInitPause ) m_engine->SetPause(false);
|
||||
m_pause->SetPause(m_bInitPause);
|
||||
m_sound->MuteAll(false);
|
||||
m_main->SetEditLock(false, true);
|
||||
m_camera->SetType(m_editCamera);
|
||||
|
@ -892,8 +896,6 @@ bool CStudio::StopEditScript(bool bCancel)
|
|||
|
||||
void CStudio::SetInfoText(std::string text, bool bClickable)
|
||||
{
|
||||
char res[100];
|
||||
|
||||
if ( bClickable && m_fixInfoTextTime > 0.0f ) return;
|
||||
if ( !bClickable ) m_fixInfoTextTime = 8.0f;
|
||||
|
||||
|
@ -911,6 +913,7 @@ void CStudio::SetInfoText(std::string text, bool bClickable)
|
|||
|
||||
if ( bClickable )
|
||||
{
|
||||
std::string res;
|
||||
GetResource(RES_TEXT, RT_STUDIO_LISTTT, res);
|
||||
list->SetTooltip(res);
|
||||
list->SetState(STATE_ENABLE);
|
||||
|
@ -952,22 +955,22 @@ void CStudio::UpdateFlux()
|
|||
#if 1
|
||||
if ( m_bRealTime ) // run?
|
||||
{
|
||||
m_engine->SetPause(false);
|
||||
m_pause->ClearPause();
|
||||
m_sound->MuteAll(false);
|
||||
}
|
||||
else // step by step?
|
||||
{
|
||||
m_engine->SetPause(true);
|
||||
m_pause->SetPause(PAUSE_EDITOR);
|
||||
m_sound->MuteAll(true);
|
||||
}
|
||||
#else
|
||||
m_engine->SetPause(false);
|
||||
m_pause->ClearPause();
|
||||
m_sound->MuteAll(false);
|
||||
#endif
|
||||
}
|
||||
else // stop?
|
||||
{
|
||||
m_engine->SetPause(true);
|
||||
m_pause->SetPause(PAUSE_EDITOR);
|
||||
m_sound->MuteAll(true);
|
||||
}
|
||||
}
|
||||
|
@ -1029,7 +1032,7 @@ void CStudio::StartDialog(StudioDialog type)
|
|||
CList* pli;
|
||||
CEdit* pe;
|
||||
Math::Point pos, dim;
|
||||
char name[100];
|
||||
std::string name;
|
||||
|
||||
m_dialog = type;
|
||||
|
||||
|
@ -1108,17 +1111,11 @@ void CStudio::StartDialog(StudioDialog type)
|
|||
GetResource(RES_TEXT, RT_IO_PRIVATE, name);
|
||||
pc->SetName(name);
|
||||
pc->SetState(STATE_SHADOW);
|
||||
#if _POLISH
|
||||
pc->SetFontSize(8.0f);
|
||||
#endif
|
||||
|
||||
pc = pw->CreateCheck(pos, dim, 0, EVENT_DIALOG_CHECK2);
|
||||
GetResource(RES_TEXT, RT_IO_PUBLIC, name);
|
||||
pc->SetName(name);
|
||||
pc->SetState(STATE_SHADOW);
|
||||
#if _POLISH
|
||||
pc->SetFontSize(8.0f);
|
||||
#endif
|
||||
|
||||
pb = pw->CreateButton(pos, dim, -1, EVENT_DIALOG_OK);
|
||||
pb->SetState(STATE_SHADOW);
|
||||
|
@ -1476,8 +1473,6 @@ void CStudio::UpdateDialogPublic()
|
|||
CWindow* pw;
|
||||
CCheck* pc;
|
||||
CLabel* pl;
|
||||
char name[100];
|
||||
//char text[MAX_FNAME+100];
|
||||
|
||||
pw = static_cast< CWindow* >(m_interface->SearchControl(EVENT_WINDOW9));
|
||||
if ( pw == nullptr ) return;
|
||||
|
@ -1497,7 +1492,7 @@ void CStudio::UpdateDialogPublic()
|
|||
pl = static_cast< CLabel* >(pw->SearchControl(EVENT_DIALOG_LABEL1));
|
||||
if ( pl != 0 )
|
||||
{
|
||||
GetResource(RES_TEXT, RT_IO_LIST, name);
|
||||
// GetResource(RES_TEXT, RT_IO_LIST, name); // TODO: unused?
|
||||
pl->SetName(SearchDirectory(false).c_str(), false);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -22,6 +22,8 @@
|
|||
|
||||
#include "graphics/engine/camera.h"
|
||||
|
||||
#include "app/pausemanager.h"
|
||||
|
||||
#include <boost/filesystem.hpp>
|
||||
|
||||
namespace fs = boost::filesystem;
|
||||
|
@ -96,6 +98,7 @@ protected:
|
|||
CSoundInterface* m_sound;
|
||||
CInterface* m_interface;
|
||||
CApplication* m_app;
|
||||
CPauseManager* m_pause;
|
||||
|
||||
int m_rank;
|
||||
CScript* m_script;
|
||||
|
@ -109,11 +112,11 @@ protected:
|
|||
Math::Point m_editFinalPos;
|
||||
Math::Point m_editFinalDim;
|
||||
|
||||
float m_time;
|
||||
float m_fixInfoTextTime;
|
||||
bool m_bRunning;
|
||||
bool m_bRealTime;
|
||||
bool m_bInitPause;
|
||||
float m_time;
|
||||
float m_fixInfoTextTime;
|
||||
bool m_bRunning;
|
||||
bool m_bRealTime;
|
||||
PauseType m_bInitPause;
|
||||
std::string m_helpFilename;
|
||||
|
||||
StudioDialog m_dialog;
|
||||
|
|
|
@ -788,7 +788,7 @@ bool CWindow::GetFixed()
|
|||
|
||||
void CWindow::AdjustButtons()
|
||||
{
|
||||
char res[100];
|
||||
std::string res;
|
||||
|
||||
if ( m_buttonFull != 0 )
|
||||
{
|
||||
|
@ -796,13 +796,13 @@ void CWindow::AdjustButtons()
|
|||
{
|
||||
m_buttonFull->SetIcon(54);
|
||||
GetResource(RES_TEXT, RT_WINDOW_STANDARD, res);
|
||||
m_buttonFull->SetTooltip(std::string(res));
|
||||
m_buttonFull->SetTooltip(res);
|
||||
}
|
||||
else
|
||||
{
|
||||
m_buttonFull->SetIcon(52);
|
||||
GetResource(RES_TEXT, RT_WINDOW_MAXIMIZED, res);
|
||||
m_buttonFull->SetTooltip(std::string(res));
|
||||
m_buttonFull->SetTooltip(res);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -812,13 +812,13 @@ void CWindow::AdjustButtons()
|
|||
{
|
||||
m_buttonReduce->SetIcon(54);
|
||||
GetResource(RES_TEXT, RT_WINDOW_STANDARD, res);
|
||||
m_buttonReduce->SetTooltip(std::string(res));
|
||||
m_buttonReduce->SetTooltip(res);
|
||||
}
|
||||
else
|
||||
{
|
||||
m_buttonReduce->SetIcon(51);
|
||||
GetResource(RES_TEXT, RT_WINDOW_MINIMIZED, res);
|
||||
m_buttonReduce->SetTooltip(std::string(res));
|
||||
m_buttonReduce->SetTooltip(res);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -826,7 +826,7 @@ void CWindow::AdjustButtons()
|
|||
{
|
||||
m_buttonClose->SetIcon(11); // x
|
||||
GetResource(RES_TEXT, RT_WINDOW_CLOSE, res);
|
||||
m_buttonClose->SetTooltip(std::string(res));
|
||||
m_buttonClose->SetTooltip(res);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1536,8 +1536,6 @@ void CWindow::DrawVertex(Math::Point pos, Math::Point dim, int icon)
|
|||
|
||||
void CWindow::DrawHach(Math::Point pos, Math::Point dim)
|
||||
{
|
||||
#if _NEWLOOK
|
||||
#else
|
||||
Math::Point ppos, ddim, uv1, uv2;
|
||||
float dp, max, ndim;
|
||||
bool bStop;
|
||||
|
@ -1575,7 +1573,6 @@ void CWindow::DrawHach(Math::Point pos, Math::Point dim)
|
|||
ppos.x += ddim.x;
|
||||
}
|
||||
while ( !bStop );
|
||||
#endif
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
# Compile flags as defined in global CMakeLists
|
||||
set(CMAKE_CXX_FLAGS "${COLOBOT_CXX_FLAGS} ${MXE_CFLAGS}")
|
||||
set(CMAKE_CXX_FLAGS "${COLOBOT_CXX_FLAGS} ${MXE_CFLAGS} ${COLOBOT_GTEST_CXX_FLAGS}")
|
||||
set(CMAKE_CXX_FLAGS_RELEASE ${COLOBOT_CXX_FLAGS_RELEASE})
|
||||
set(CMAKE_CXX_FLAGS_DEBUG ${COLOBOT_CXX_FLAGS_DEBUG})
|
||||
|
||||
|
|
|
@ -78,7 +78,7 @@ void Render(Gfx::CGLDevice *device)
|
|||
worldMat.LoadIdentity();
|
||||
device->SetTransform(Gfx::TRANSFORM_WORLD, worldMat);
|
||||
|
||||
Gfx::VertexCol line[2] = { Gfx::VertexCol() };
|
||||
Gfx::VertexCol line[2] = {};
|
||||
|
||||
for (int x = -40; x <= 40; ++x)
|
||||
{
|
||||
|
@ -103,7 +103,7 @@ void Render(Gfx::CGLDevice *device)
|
|||
}
|
||||
|
||||
|
||||
Gfx::VertexCol quad[6] = { Gfx::VertexCol() };
|
||||
Gfx::VertexCol quad[6] = {};
|
||||
|
||||
quad[0].coord = Math::Vector(-1.0f, -1.0f, 0.0f);
|
||||
quad[1].coord = Math::Vector( 1.0f, -1.0f, 0.0f);
|
||||
|
|
|
@ -73,7 +73,7 @@ void Render(Gfx::CGLDevice *device)
|
|||
worldMat.LoadIdentity();
|
||||
device->SetTransform(Gfx::TRANSFORM_WORLD, worldMat);
|
||||
|
||||
Gfx::VertexCol line[2] = { Gfx::VertexCol() };
|
||||
Gfx::VertexCol line[2] = {};
|
||||
|
||||
for (int x = -40; x <= 40; ++x)
|
||||
{
|
||||
|
@ -98,7 +98,7 @@ void Render(Gfx::CGLDevice *device)
|
|||
}
|
||||
|
||||
|
||||
Gfx::VertexCol quad[6] = { Gfx::VertexCol() };
|
||||
Gfx::VertexCol quad[6] = {};
|
||||
|
||||
for (int i = 0; i < 6; ++i)
|
||||
quad[i].color = Gfx::Color(1.0f, 1.0f, 0.0f);
|
||||
|
|
|
@ -6,6 +6,8 @@ if(MXE) # MXE requires special treatment
|
|||
elseif(PLATFORM_WINDOWS)
|
||||
# because it isn't included in standard linking libraries
|
||||
set(PLATFORM_LIBS "-lintl")
|
||||
elseif(PLATFORM_GNU)
|
||||
set(PLATFORM_LIBS "-lX11")
|
||||
elseif(PLATFORM_LINUX)
|
||||
# for clock_gettime
|
||||
set(PLATFORM_LIBS "-lrt -lX11")
|
||||
|
@ -21,6 +23,8 @@ configure_file(${SRC_DIR}/common/config.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/comm
|
|||
# Code sources
|
||||
set(COLOBOT_SOURCES
|
||||
${SRC_DIR}/app/app.cpp
|
||||
${SRC_DIR}/app/gamedata.cpp
|
||||
${SRC_DIR}/app/pausemanager.cpp
|
||||
${SRC_DIR}/app/system.cpp
|
||||
${SRC_DIR}/app/${SYSTEM_CPP_MODULE}
|
||||
${SRC_DIR}/app/system_other.cpp
|
||||
|
|
|
@ -105,4 +105,6 @@ public:
|
|||
|
||||
MOCK_METHOD1(SetFillMode, void(Gfx::FillMode mode));
|
||||
MOCK_METHOD0(GetFillMode, Gfx::FillMode());
|
||||
|
||||
MOCK_CONST_METHOD0(GetFrameBufferPixels, void*());
|
||||
};
|
||||
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue