Merge branch 'dev' into dev-graphics-overhaul
commit
4531dc432e
|
@ -9,7 +9,7 @@ jobs:
|
|||
strategy:
|
||||
matrix:
|
||||
target_os: [linux]
|
||||
host_os: [ubuntu-18.04, ubuntu-20.04]
|
||||
host_os: [ubuntu-20.04]
|
||||
container: ['']
|
||||
fail-fast: false
|
||||
steps:
|
||||
|
@ -45,7 +45,7 @@ jobs:
|
|||
with:
|
||||
name: ${{matrix.target_os}}-debug
|
||||
path: build/install
|
||||
if: matrix.host_os == 'ubuntu-18.04'
|
||||
if: matrix.host_os == 'ubuntu-20.04'
|
||||
- name: Create AppImage
|
||||
working-directory: build
|
||||
run: |
|
||||
|
@ -69,7 +69,7 @@ jobs:
|
|||
with:
|
||||
name: ${{matrix.target_os}}-debug-AppImage
|
||||
path: build/appimage
|
||||
if: matrix.target_os == 'linux' && matrix.host_os == 'ubuntu-18.04'
|
||||
if: matrix.target_os == 'linux' && matrix.host_os == 'ubuntu-20.04'
|
||||
- name: Run tests
|
||||
# TODO: Maybe run Windows tests using wine as well?
|
||||
working-directory: build
|
||||
|
@ -81,6 +81,42 @@ jobs:
|
|||
name: Test results (${{ matrix.target_os }}, ${{ matrix.host_os }})
|
||||
path: build/gtestresults.xml
|
||||
if: matrix.target_os == 'linux'
|
||||
build-macos:
|
||||
runs-on: ${{ matrix.host_os }}
|
||||
container: ${{ matrix.container }}
|
||||
strategy:
|
||||
matrix:
|
||||
target_os: [macos]
|
||||
host_os: [macos-11, macos-12]
|
||||
container: ['']
|
||||
fail-fast: false
|
||||
steps:
|
||||
- name: Install Colobot dependencies
|
||||
run: brew install cmake sdl2 sdl2_image sdl2_ttf boost glew physfs flac libsndfile libvorbis vorbis-tools gettext libicns librsvg wget xmlstarlet
|
||||
if: matrix.container == ''
|
||||
- uses: actions/checkout@v2
|
||||
- name: Checkout the Google Test submodule
|
||||
run: git submodule update --init -- lib/googletest
|
||||
- name: Create build directory
|
||||
run: cmake -E make_directory build
|
||||
- name: Run CMake (for Mac)
|
||||
working-directory: build
|
||||
run: cmake -DCMAKE_INSTALL_PREFIX=./install -DCMAKE_SKIP_INSTALL_RPATH=ON -DCMAKE_BUILD_TYPE=RelWithDebInfo -DDEV_BUILD=1 -DPORTABLE=1 -DTESTS=1 -DDESKTOP=1 -DOPENAL_LIBRARY=/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/System/Library/Frameworks/OpenAL.framework/OpenAL.tbd ..
|
||||
if: matrix.target_os == 'macos'
|
||||
- name: Build
|
||||
working-directory: build
|
||||
run: make -j `nproc`
|
||||
- name: Run tests
|
||||
# TODO: Maybe run Windows tests using wine as well?
|
||||
working-directory: build
|
||||
run: ./colobot_ut --gtest_output=xml:gtestresults.xml
|
||||
if: matrix.target_os == 'macos'
|
||||
- name: Upload test results
|
||||
uses: actions/upload-artifact@v2
|
||||
with:
|
||||
name: Test results (${{ matrix.target_os }}, ${{ matrix.host_os }})
|
||||
path: build/gtestresults.xml
|
||||
if: matrix.target_os == 'macos'
|
||||
build-windows:
|
||||
runs-on: windows-2019
|
||||
strategy:
|
||||
|
@ -105,11 +141,12 @@ jobs:
|
|||
- name: Install Colobot dependencies
|
||||
uses: lukka/run-vcpkg@v7
|
||||
with:
|
||||
vcpkgGitCommitId: '6f7ffeb18f99796233b958aaaf14ec7bd4fb64b2'
|
||||
setupOnly: true
|
||||
vcpkgGitCommitId: '69efe9cc2df0015f0bb2d37d55acde4a75c9a25b'
|
||||
vcpkgTriplet: ${{ matrix.vcpkg_triplet }}
|
||||
vcpkgArguments: 'boost-system boost-filesystem boost-regex boost-lexical-cast boost-bimap boost-algorithm boost-property-tree boost-optional boost-range sdl2 sdl2-ttf sdl2-image glew libpng libwebp tiff gettext libsndfile libvorbis libogg openal-soft physfs glm mpg123'
|
||||
# SHA-256 hash of the list of packages above, for caching purposes
|
||||
appendedCacheKey: '79bfe00dc99b9da12e57ab30397ba444a8d68e7030c247cf813121111e37cabf'
|
||||
# SHA-256 hash of the vcpkg.json file, recalculated automatically when it changes
|
||||
appendedCacheKey: ${{ hashFiles( '**/vcpkg.json' ) }}
|
||||
additionalCachedPaths: ${{ github.workspace }}/build/vcpkg_installed
|
||||
- name: Install external tools
|
||||
working-directory: ${{ github.workspace }}
|
||||
run: |
|
||||
|
|
|
@ -48,3 +48,6 @@ CMakeLists.txt.user.*
|
|||
/CMakeSettings.json
|
||||
/.vs
|
||||
/out
|
||||
|
||||
# Ignore CMakeUserPresets.json
|
||||
CMakeUserPresets.json
|
||||
|
|
|
@ -106,6 +106,8 @@ elseif("${CMAKE_SYSTEM_NAME}" MATCHES "Darwin")
|
|||
# Platform-dependent implementation of system.h
|
||||
set(SYSTEM_CPP_MODULE "system_macosx.cpp")
|
||||
set(SYSTEM_H_MODULE "system_macosx.h")
|
||||
# Fix compilation errors in MacOS SDK files
|
||||
set(CMAKE_CXX_FLAGS "${NORMAL_CXX_FLAGS} -Wno-nullability-extension -Wno-nullability-completeness -Wno-expansion-to-defined -Wno-four-char-constants -Wno-gnu-zero-variadic-macro-arguments -Wno-variadic-macros -Wno-zero-length-array")
|
||||
# To avoid CMake warning
|
||||
set(CMAKE_MACOSX_RPATH 1)
|
||||
elseif("${CMAKE_SYSTEM_NAME}" MATCHES "FreeBSD")
|
||||
|
@ -307,21 +309,14 @@ include("${colobot_SOURCE_DIR}/cmake/colobot-lint.cmake")
|
|||
##
|
||||
|
||||
find_package(OpenGL 1.4 REQUIRED)
|
||||
find_package(SDL2 REQUIRED)
|
||||
find_package(SDL2_image REQUIRED)
|
||||
find_package(SDL2_ttf REQUIRED)
|
||||
find_package(PNG 1.2 REQUIRED)
|
||||
find_package(Gettext REQUIRED)
|
||||
find_package(PhysFS REQUIRED)
|
||||
find_package(glm CONFIG REQUIRED)
|
||||
|
||||
if(PLATFORM_WINDOWS)
|
||||
find_package(SDL2 CONFIG REQUIRED)
|
||||
find_package(SDL2_image CONFIG REQUIRED)
|
||||
find_package(SDL2_ttf CONFIG REQUIRED)
|
||||
else()
|
||||
find_package(SDL2 REQUIRED)
|
||||
find_package(SDL2_image REQUIRED)
|
||||
find_package(SDL2_ttf REQUIRED)
|
||||
endif()
|
||||
|
||||
# Add target alias glm::glm for older versions of the library
|
||||
if(NOT TARGET glm::glm)
|
||||
add_library(glm::glm ALIAS glm)
|
||||
|
@ -351,9 +346,6 @@ endif()
|
|||
|
||||
find_package(SndFile REQUIRED)
|
||||
|
||||
find_package(mpg123 QUIET)
|
||||
find_package(mp3lame QUIET)
|
||||
|
||||
if(NOT ASSERTS)
|
||||
add_definitions(-DNDEBUG)
|
||||
endif()
|
||||
|
|
|
@ -4,7 +4,7 @@ To compile Colobot on MacOS X, you need to first get Developer Command Line Tool
|
|||
|
||||
After installing Developer Command Line Tools, you should have basic tools like clang and git installed. After that, you can grab other required packages with Homebrew. So as in instructions on [the project page](http://brew.sh/):
|
||||
```bash
|
||||
ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
|
||||
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
|
||||
```
|
||||
And then:
|
||||
```bash
|
||||
|
@ -20,7 +20,7 @@ If you've installed everything correctly, the simple way of compiling Colobot wi
|
|||
git clone --recursive https://github.com/colobot/colobot.git
|
||||
mkdir colobot/build
|
||||
cd colobot/build
|
||||
cmake ../
|
||||
cmake -DOPENAL_LIBRARY=/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/System/Library/Frameworks/OpenAL.framework/OpenAL.tbd ../
|
||||
make
|
||||
```
|
||||
|
||||
|
|
|
@ -186,7 +186,7 @@ endif()
|
|||
# SDL-2.0 is the name used by FreeBSD ports...
|
||||
# don't confuse it for the version number.
|
||||
find_library(SDL2_LIBRARY
|
||||
NAMES SDL2 SDL-2.0
|
||||
NAMES SDL2 SDL-2.0 SDL2-static
|
||||
HINTS
|
||||
ENV SDL2DIR
|
||||
${SDL2_NO_DEFAULT_PATH_CMD}
|
||||
|
@ -223,7 +223,7 @@ if(NOT SDL2_BUILDING_LIBRARY)
|
|||
HINTS
|
||||
ENV SDL2DIR
|
||||
${SDL2_NO_DEFAULT_PATH_CMD}
|
||||
PATH_SUFFIXES lib ${VC_LIB_PATH_SUFFIX}
|
||||
PATH_SUFFIXES lib lib/manual-link ${VC_LIB_PATH_SUFFIX}
|
||||
PATHS ${SDL2MAIN_LIBRARY_PATHS}
|
||||
DOC "Where the SDL2main library can be found"
|
||||
)
|
||||
|
|
|
@ -166,7 +166,7 @@ endif()
|
|||
|
||||
# Search for the SDL2_image library
|
||||
find_library(SDL2_IMAGE_LIBRARY
|
||||
NAMES SDL2_image
|
||||
NAMES SDL2_image SDL2_image-static
|
||||
HINTS
|
||||
ENV SDL2IMAGEDIR
|
||||
ENV SDL2DIR
|
||||
|
|
2
po/pl.po
2
po/pl.po
|
@ -86,7 +86,7 @@ msgid "Access to solution\\Shows the solution (detailed instructions for mission
|
|||
msgstr "Dostęp do rozwiązania\\Pokazuje rozwiązanie (szczegółowe instrukcje dotyczące misji)"
|
||||
|
||||
msgid "Access to solutions\\Show program \"4: Solution\" in the exercises"
|
||||
msgstr "Accčs aux solutions\\Programme \"4: Solution\" dans les exercices"
|
||||
msgstr "Dostęp do rozwiązań\\Pokaż program \"4: Rozwiązanie\" w ćwiczeniach"
|
||||
|
||||
msgid "Add new program"
|
||||
msgstr "Dodaj nowy program"
|
||||
|
|
|
@ -19,6 +19,7 @@
|
|||
|
||||
#pragma once
|
||||
|
||||
#include <cstdint>
|
||||
#include <iostream>
|
||||
#include <string>
|
||||
|
||||
|
|
|
@ -21,6 +21,8 @@
|
|||
|
||||
#include "CBot/CBotInstr/CBotInstr.h"
|
||||
|
||||
#include <cstdint>
|
||||
|
||||
namespace CBot
|
||||
{
|
||||
|
||||
|
|
|
@ -23,6 +23,8 @@
|
|||
|
||||
#include "CBot/CBotVar/CBotVar.h"
|
||||
|
||||
#include <cmath>
|
||||
|
||||
namespace CBot
|
||||
{
|
||||
|
||||
|
@ -41,9 +43,9 @@ bool CBotExprLitNan::Execute(CBotStack* &pj)
|
|||
CBotStack* pile = pj->AddStack(this);
|
||||
|
||||
if (pile->IfStep()) return false;
|
||||
CBotVar* var = CBotVar::Create("", CBotTypInt);
|
||||
CBotVar* var = CBotVar::Create("", CBotTypFloat);
|
||||
|
||||
var->SetInit(CBotVar::InitType::IS_NAN); // nan
|
||||
var->SetValFloat(nanf(""));
|
||||
pile->SetVar(var); // put on the stack
|
||||
return pj->Return(pile); // forward below
|
||||
}
|
||||
|
|
|
@ -206,12 +206,6 @@ bool CBotExpression::Execute(CBotStack* &pj)
|
|||
if (m_token.GetType() != ID_ASS)
|
||||
{
|
||||
pVar = pile1->GetVar(); // recovers if interrupted
|
||||
initKind = pVar->GetInit();
|
||||
if (initKind == CBotVar::InitType::IS_NAN)
|
||||
{
|
||||
pile2->SetError(CBotErrNan, m_leftop->GetToken());
|
||||
return pj->Return(pile2);
|
||||
}
|
||||
result = CBotVar::Create("", pVar->GetTypResult(CBotVar::GetTypeMode::CLASS_AS_INTRINSIC));
|
||||
}
|
||||
|
||||
|
|
|
@ -38,6 +38,8 @@
|
|||
|
||||
#include "CBot/CBotCStack.h"
|
||||
|
||||
#include <cmath>
|
||||
|
||||
namespace CBot
|
||||
{
|
||||
|
||||
|
@ -217,8 +219,8 @@ CBotInstr* CBotParExpr::CompileLitExpr(CBotToken* &p, CBotCStack* pStack)
|
|||
{
|
||||
CBotInstr* inst = new CBotExprLitNan();
|
||||
inst->SetToken(pp);
|
||||
CBotVar* var = CBotVar::Create("", CBotTypInt);
|
||||
var->SetInit(CBotVar::InitType::IS_NAN);
|
||||
CBotVar* var = CBotVar::Create("", CBotTypFloat);
|
||||
var->SetValFloat(nanf(""));
|
||||
pStk->SetVar(var);
|
||||
return pStack->Return(inst, pStk);
|
||||
}
|
||||
|
|
|
@ -56,11 +56,6 @@ bool CBotPostIncExpr::Execute(CBotStack* &pj)
|
|||
CBotStack* pile3 = pile2->AddStack(this);
|
||||
if (pile3->IfStep()) return false;
|
||||
|
||||
if (var1->IsNAN())
|
||||
{
|
||||
pile1->SetError(CBotErrNan, &m_token);
|
||||
}
|
||||
|
||||
if (!var1->IsDefined())
|
||||
{
|
||||
pile1->SetError(CBotErrNotInit, &m_token);
|
||||
|
|
|
@ -55,12 +55,6 @@ bool CBotPreIncExpr::Execute(CBotStack* &pj)
|
|||
// pile2 is modified on return
|
||||
if (!(static_cast<CBotExprVar*>(m_instr))->ExecuteVar(var1, pile2, nullptr, true)) return false;
|
||||
|
||||
if (var1->IsNAN())
|
||||
{
|
||||
pile->SetError(CBotErrNan, &m_token);
|
||||
return pj->Return(pile); // operation performed
|
||||
}
|
||||
|
||||
if (!var1->IsDefined())
|
||||
{
|
||||
pile->SetError(CBotErrNotInit, &m_token);
|
||||
|
|
|
@ -31,6 +31,7 @@
|
|||
#include "CBot/CBotVar/CBotVar.h"
|
||||
|
||||
#include <cassert>
|
||||
#include <cmath>
|
||||
#include <algorithm>
|
||||
|
||||
namespace CBot
|
||||
|
@ -305,7 +306,13 @@ CBotInstr* CBotTwoOpExpr::Compile(CBotToken* &p, CBotCStack* pStack, int* pOpera
|
|||
|
||||
static bool VarIsNAN(const CBotVar* var)
|
||||
{
|
||||
return var->GetInit() > CBotVar::InitType::DEF;
|
||||
if (var->GetType() == CBotTypFloat)
|
||||
return std::isnan(var->GetValFloat());
|
||||
|
||||
if (var->GetType() == CBotTypDouble)
|
||||
return std::isnan(var->GetValDouble());
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
static bool IsNan(CBotVar* left, CBotVar* right, CBotError* err = nullptr)
|
||||
|
@ -475,13 +482,13 @@ bool CBotTwoOpExpr::Execute(CBotStack* &pStack)
|
|||
break;
|
||||
case ID_EQ:
|
||||
if ( IsNan(left, right) )
|
||||
result->SetValInt(left->GetInit() == right->GetInit()) ;
|
||||
result->SetValInt(VarIsNAN(left) == VarIsNAN(right));
|
||||
else
|
||||
result->SetValInt(temp->Eq(left , right)); // equal
|
||||
break;
|
||||
case ID_NE:
|
||||
if ( IsNan(left, right) )
|
||||
result->SetValInt(left ->GetInit() != right->GetInit()) ;
|
||||
result->SetValInt(VarIsNAN(left) != VarIsNAN(right));
|
||||
else
|
||||
result->SetValInt(temp->Ne(left , right)); // different
|
||||
break;
|
||||
|
|
|
@ -30,6 +30,7 @@
|
|||
#include "CBot/CBotExternalCall.h"
|
||||
|
||||
#include <cassert>
|
||||
#include <cstdint>
|
||||
#include <cstdlib>
|
||||
#include <cstring>
|
||||
|
||||
|
|
|
@ -355,7 +355,7 @@ CBotTypResult CBotVar::GetTypResult(GetTypeMode mode)
|
|||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
CBotType CBotVar::GetType(GetTypeMode mode)
|
||||
CBotType CBotVar::GetType(GetTypeMode mode) const
|
||||
{
|
||||
if ( mode == GetTypeMode::CLASS_AS_POINTER && m_type.Eq(CBotTypClass) )
|
||||
return CBotTypPointer;
|
||||
|
@ -584,43 +584,43 @@ CBotVarClass* CBotVar::GetPointer()
|
|||
// All these functions must be defined in the subclasses
|
||||
// derived from class CBotVar
|
||||
|
||||
signed char CBotVar::GetValByte()
|
||||
signed char CBotVar::GetValByte() const
|
||||
{
|
||||
assert(0);
|
||||
return 0;
|
||||
}
|
||||
|
||||
short CBotVar::GetValShort()
|
||||
short CBotVar::GetValShort() const
|
||||
{
|
||||
assert(0);
|
||||
return 0;
|
||||
}
|
||||
|
||||
uint32_t CBotVar::GetValChar()
|
||||
uint32_t CBotVar::GetValChar() const
|
||||
{
|
||||
assert(0);
|
||||
return 0;
|
||||
}
|
||||
|
||||
int CBotVar::GetValInt()
|
||||
int CBotVar::GetValInt() const
|
||||
{
|
||||
assert(0);
|
||||
return 0;
|
||||
}
|
||||
|
||||
long CBotVar::GetValLong()
|
||||
long CBotVar::GetValLong() const
|
||||
{
|
||||
assert(0);
|
||||
return 0;
|
||||
}
|
||||
|
||||
float CBotVar::GetValFloat()
|
||||
float CBotVar::GetValFloat() const
|
||||
{
|
||||
assert(0);
|
||||
return 0;
|
||||
}
|
||||
|
||||
double CBotVar::GetValDouble()
|
||||
double CBotVar::GetValDouble() const
|
||||
{
|
||||
assert(0);
|
||||
return 0;
|
||||
|
@ -822,7 +822,7 @@ void CBotVar::SetValString(const std::string& val)
|
|||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
std::string CBotVar::GetValString()
|
||||
std::string CBotVar::GetValString() const
|
||||
{
|
||||
assert(0);
|
||||
return std::string();
|
||||
|
|
|
@ -24,6 +24,7 @@
|
|||
#include "CBot/CBotEnums.h"
|
||||
#include "CBot/CBotUtils.h"
|
||||
|
||||
#include <cstdint>
|
||||
#include <string>
|
||||
|
||||
namespace CBot
|
||||
|
@ -199,7 +200,7 @@ public:
|
|||
* \brief GetType Returns the base type of the variable (::CBotType)
|
||||
* \param mode Mode, see GetTypeMode enum
|
||||
*/
|
||||
CBotType GetType(GetTypeMode mode = GetTypeMode::NORMAL);
|
||||
CBotType GetType(GetTypeMode mode = GetTypeMode::NORMAL) const;
|
||||
|
||||
/**
|
||||
* \brief Returns the complete type of the variable (CBotTypResult)
|
||||
|
@ -243,7 +244,6 @@ public:
|
|||
UNDEF = 0, //!< the variable value is currently not defined
|
||||
DEF = 1, //!< the variable value is defined
|
||||
IS_POINTER = 2, //!< the variable value is as a pointer
|
||||
IS_NAN = 999 //!< the variable value is NAN
|
||||
};
|
||||
|
||||
/**
|
||||
|
@ -269,12 +269,6 @@ public:
|
|||
*/
|
||||
bool IsDefined() const { return GetInit() == InitType::DEF; }
|
||||
|
||||
/**
|
||||
* \brief Checks if the variable is currently NAN
|
||||
* \return InitType::NAN
|
||||
*/
|
||||
bool IsNAN() const { return GetInit() == InitType::IS_NAN; }
|
||||
|
||||
//@}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
@ -508,27 +502,27 @@ public:
|
|||
*/
|
||||
virtual void SetValString(const std::string& val);
|
||||
|
||||
virtual signed char GetValByte();
|
||||
virtual signed char GetValByte() const;
|
||||
|
||||
virtual short GetValShort();
|
||||
virtual short GetValShort() const;
|
||||
|
||||
virtual uint32_t GetValChar();
|
||||
virtual uint32_t GetValChar() const;
|
||||
|
||||
/**
|
||||
* \brief Get value as integer
|
||||
* \return Current value
|
||||
*/
|
||||
virtual int GetValInt();
|
||||
virtual int GetValInt() const;
|
||||
|
||||
virtual long GetValLong();
|
||||
virtual long GetValLong() const;
|
||||
|
||||
/**
|
||||
* \brief Get value as float
|
||||
* \return Current value
|
||||
*/
|
||||
virtual float GetValFloat();
|
||||
virtual float GetValFloat() const;
|
||||
|
||||
virtual double GetValDouble();
|
||||
virtual double GetValDouble() const;
|
||||
|
||||
/**
|
||||
* \brief Get value as string
|
||||
|
@ -539,7 +533,7 @@ public:
|
|||
*
|
||||
* \return Current value
|
||||
*/
|
||||
virtual std::string GetValString();
|
||||
virtual std::string GetValString() const;
|
||||
|
||||
/**
|
||||
* \brief Set value for pointer types
|
||||
|
|
|
@ -129,7 +129,7 @@ CBotVar* CBotVarArray::GetItemList()
|
|||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
std::string CBotVarArray::GetValString()
|
||||
std::string CBotVarArray::GetValString() const
|
||||
{
|
||||
if ( m_pInstance == nullptr ) return ( std::string( "Null pointer" ) ) ;
|
||||
return m_pInstance->GetValString();
|
||||
|
|
|
@ -49,7 +49,7 @@ public:
|
|||
CBotVar* GetItem(int n, bool grow = false) override;
|
||||
CBotVar* GetItemList() override;
|
||||
|
||||
std::string GetValString() override;
|
||||
std::string GetValString() const override;
|
||||
|
||||
bool Save1State(std::ostream &ostr) override;
|
||||
|
||||
|
|
|
@ -32,12 +32,10 @@ class CBotVarChar : public CBotVarInteger<uint32_t, CBotTypChar>
|
|||
public:
|
||||
CBotVarChar(const CBotToken &name) : CBotVarInteger(name) {}
|
||||
|
||||
std::string GetValString() override
|
||||
std::string GetValString() const override
|
||||
{
|
||||
if (m_binit == CBotVar::InitType::UNDEF)
|
||||
return LoadString(TX_UNDEF);
|
||||
if (m_binit == CBotVar::InitType::IS_NAN)
|
||||
return LoadString(TX_NAN);
|
||||
|
||||
if (0x10FFFF < m_val || (0xD7FF < m_val && m_val < 0xE000))
|
||||
return "\xEF\xBF\xBD"; // replacement character U+FFFD
|
||||
|
|
|
@ -291,7 +291,7 @@ CBotVar* CBotVarClass::GetItemList()
|
|||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
std::string CBotVarClass::GetValString()
|
||||
std::string CBotVarClass::GetValString() const
|
||||
{
|
||||
std::string res;
|
||||
|
||||
|
|
|
@ -52,7 +52,7 @@ public:
|
|||
CBotVar* GetItemRef(int nIdent) override;
|
||||
CBotVar* GetItem(int n, bool bExtend) override;
|
||||
CBotVar* GetItemList() override;
|
||||
std::string GetValString() override;
|
||||
std::string GetValString() const override;
|
||||
|
||||
bool Save1State(std::ostream &ostr) override;
|
||||
|
||||
|
|
|
@ -35,7 +35,7 @@ void CBotVarInt::SetValInt(int val, const std::string& defnum)
|
|||
m_defnum = defnum;
|
||||
}
|
||||
|
||||
std::string CBotVarInt::GetValString()
|
||||
std::string CBotVarInt::GetValString() const
|
||||
{
|
||||
if (!m_defnum.empty()) return m_defnum;
|
||||
return CBotVarValue::GetValString();
|
||||
|
|
|
@ -33,7 +33,7 @@ public:
|
|||
CBotVarInt(const CBotToken &name) : CBotVarInteger(name) {}
|
||||
|
||||
void SetValInt(int val, const std::string& s = "") override;
|
||||
std::string GetValString() override;
|
||||
std::string GetValString() const override;
|
||||
|
||||
void Copy(CBotVar* pSrc, bool bName = true) override;
|
||||
|
||||
|
|
|
@ -90,7 +90,7 @@ CBotVar* CBotVarPointer::GetItemList()
|
|||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
std::string CBotVarPointer::GetValString()
|
||||
std::string CBotVarPointer::GetValString() const
|
||||
{
|
||||
std::string s = "Pointer to ";
|
||||
if ( m_pVarClass == nullptr ) s = "Null pointer" ;
|
||||
|
|
|
@ -47,7 +47,7 @@ public:
|
|||
CBotVar* GetItem(const std::string& name) override;
|
||||
CBotVar* GetItemRef(int nIdent) override;
|
||||
CBotVar* GetItemList() override;
|
||||
std::string GetValString() override;
|
||||
std::string GetValString() const override;
|
||||
|
||||
void SetPointer(CBotVar* p) override;
|
||||
CBotVarClass* GetPointer() override;
|
||||
|
|
|
@ -48,12 +48,12 @@ public:
|
|||
SetValString(ToString(val));
|
||||
}
|
||||
|
||||
int GetValInt() override
|
||||
int GetValInt() const override
|
||||
{
|
||||
return FromString<int>(GetValString());
|
||||
}
|
||||
|
||||
float GetValFloat() override
|
||||
float GetValFloat() const override
|
||||
{
|
||||
return FromString<float>(GetValString());
|
||||
}
|
||||
|
|
|
@ -62,15 +62,13 @@ public:
|
|||
m_binit = CBotVar::InitType::DEF;
|
||||
}
|
||||
|
||||
std::string GetValString() override
|
||||
std::string GetValString() const override
|
||||
{
|
||||
if (m_binit == CBotVar::InitType::UNDEF)
|
||||
return LoadString(TX_UNDEF);
|
||||
if (m_binit == CBotVar::InitType::IS_NAN)
|
||||
return LoadString(TX_NAN);
|
||||
|
||||
std::ostringstream s;
|
||||
s << m_val;
|
||||
s << std::boolalpha << m_val;
|
||||
return s.str();
|
||||
}
|
||||
|
||||
|
@ -133,37 +131,37 @@ public:
|
|||
this->SetValue(static_cast<T>(val));
|
||||
}
|
||||
|
||||
signed char GetValByte() override
|
||||
signed char GetValByte() const override
|
||||
{
|
||||
return static_cast<signed char>(this->m_val);
|
||||
}
|
||||
|
||||
short GetValShort() override
|
||||
short GetValShort() const override
|
||||
{
|
||||
return static_cast<short>(this->m_val);
|
||||
}
|
||||
|
||||
uint32_t GetValChar() override
|
||||
uint32_t GetValChar() const override
|
||||
{
|
||||
return static_cast<uint32_t>(this->m_val);
|
||||
}
|
||||
|
||||
int GetValInt() override
|
||||
int GetValInt() const override
|
||||
{
|
||||
return static_cast<int>(this->m_val);
|
||||
}
|
||||
|
||||
long GetValLong() override
|
||||
long GetValLong() const override
|
||||
{
|
||||
return static_cast<long>(this->m_val);
|
||||
}
|
||||
|
||||
float GetValFloat() override
|
||||
float GetValFloat() const override
|
||||
{
|
||||
return static_cast<float>(this->m_val);
|
||||
}
|
||||
|
||||
double GetValDouble() override
|
||||
double GetValDouble() const override
|
||||
{
|
||||
return static_cast<double>(this->m_val);
|
||||
}
|
||||
|
|
|
@ -133,7 +133,7 @@ bool rfdestruct (CBotVar* pThis, CBotVar* pVar, CBotVar* pResult, int& Exception
|
|||
if (!pVar->IsDefined()) return true; // file not opened
|
||||
g_files.erase(pVar->GetValInt());
|
||||
|
||||
pVar->SetInit(CBotVar::InitType::IS_NAN);
|
||||
pVar->SetInit(CBotVar::InitType::UNDEF);
|
||||
return true;
|
||||
}
|
||||
|
||||
|
@ -203,7 +203,7 @@ bool rfclose (CBotVar* pThis, CBotVar* pVar, CBotVar* pResult, int& Exception, v
|
|||
|
||||
g_files.erase(handleIter);
|
||||
|
||||
pVar->SetInit(CBotVar::InitType::IS_NAN);
|
||||
pVar->SetInit(CBotVar::InitType::UNDEF);
|
||||
return true;
|
||||
}
|
||||
|
||||
|
|
|
@ -218,6 +218,37 @@ bool rTrunc(CBotVar* var, CBotVar* result, int& exception, void* user)
|
|||
return true;
|
||||
}
|
||||
|
||||
// Instruction "isnan()"
|
||||
|
||||
CBotTypResult cIsNAN(CBotVar*& var, void* user)
|
||||
{
|
||||
if (var == nullptr) return CBotTypResult(CBotErrLowParam);
|
||||
|
||||
if (var->GetType() > CBotTypDouble) return CBotTypResult(CBotErrBadNum);
|
||||
|
||||
var = var->GetNext();
|
||||
if (var != nullptr) return CBotTypResult(CBotErrOverParam);
|
||||
|
||||
return CBotTypResult(CBotTypBoolean);
|
||||
}
|
||||
|
||||
bool rIsNAN(CBotVar* var, CBotVar* result, int& exception, void* user)
|
||||
{
|
||||
bool isnan = false;
|
||||
|
||||
if (var->GetType() == CBotTypFloat)
|
||||
{
|
||||
if (std::isnan(var->GetValFloat())) isnan = true;
|
||||
}
|
||||
else if (var->GetType() == CBotTypDouble)
|
||||
{
|
||||
if (std::isnan(var->GetValDouble())) isnan = true;
|
||||
}
|
||||
|
||||
result->SetValInt(isnan);
|
||||
return true;
|
||||
}
|
||||
|
||||
} // namespace
|
||||
|
||||
void InitMathFunctions()
|
||||
|
@ -237,6 +268,7 @@ void InitMathFunctions()
|
|||
CBotProgram::AddFunction("ceil", rCeil, cOneFloat);
|
||||
CBotProgram::AddFunction("round", rRound, cOneFloat);
|
||||
CBotProgram::AddFunction("trunc", rTrunc, cOneFloat);
|
||||
CBotProgram::AddFunction("isnan", rIsNAN, cIsNAN);
|
||||
}
|
||||
|
||||
} // namespace CBot
|
||||
|
|
|
@ -233,7 +233,7 @@ bool rStrFind( CBotVar* pVar, CBotVar* pResult, int& ex, void* pUser )
|
|||
}
|
||||
else
|
||||
{
|
||||
pResult->SetInit(CBotVar::InitType::IS_NAN);
|
||||
pResult->SetValInt(-1);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
# Compile flags as defined in global CMakeLists
|
||||
set(CMAKE_CXX_FLAGS "${COLOBOT_CXX_FLAGS}")
|
||||
set(CMAKE_CXX_FLAGS ${COLOBOT_CXX_FLAGS})
|
||||
set(CMAKE_CXX_FLAGS_RELEASE ${COLOBOT_CXX_FLAGS_RELEASE})
|
||||
set(CMAKE_CXX_FLAGS_DEBUG ${COLOBOT_CXX_FLAGS_DEBUG})
|
||||
|
||||
|
@ -487,6 +487,9 @@ target_include_directories(colobotbase PUBLIC
|
|||
target_link_libraries(colobotbase PUBLIC
|
||||
CBot
|
||||
localename
|
||||
SDL2::Core
|
||||
SDL2::Image
|
||||
SDL2::TTF
|
||||
OpenGL::GL
|
||||
PNG::PNG
|
||||
GLEW::GLEW
|
||||
|
@ -499,34 +502,6 @@ target_link_libraries(colobotbase PUBLIC
|
|||
nlohmann_json::nlohmann_json
|
||||
)
|
||||
|
||||
if(PLATFORM_WINDOWS)
|
||||
target_link_libraries(colobotbase PUBLIC
|
||||
$<IF:$<TARGET_EXISTS:SDL2::SDL2>,SDL2::SDL2,SDL2::SDL2-static>
|
||||
$<IF:$<TARGET_EXISTS:SDL2_image::SDL2_image>,SDL2_image::SDL2_image,SDL2_image::SDL2_image-static>
|
||||
$<IF:$<TARGET_EXISTS:SDL2_ttf::SDL2_ttf>,SDL2_ttf::SDL2_ttf,SDL2_ttf::SDL2_ttf-static>
|
||||
)
|
||||
elseif()
|
||||
target_link_libraries(colobotbase PUBLIC
|
||||
SDL2::Core
|
||||
SDL2::Image
|
||||
SDL2::TTF
|
||||
)
|
||||
endif()
|
||||
|
||||
if(mpg123_FOUND)
|
||||
target_link_libraries(colobotbase PUBLIC
|
||||
MPG123::libmpg123
|
||||
MPG123::libout123
|
||||
MPG123::libsyn123
|
||||
)
|
||||
endif()
|
||||
|
||||
if(mp3lame_FOUND)
|
||||
target_link_libraries(colobotbase PUBLIC
|
||||
mp3lame::mp3lame
|
||||
)
|
||||
endif()
|
||||
|
||||
# Optional libraries
|
||||
if(OPENAL_SOUND)
|
||||
target_sources(colobotbase PRIVATE
|
||||
|
@ -556,9 +531,6 @@ if(PLATFORM_WINDOWS)
|
|||
find_package(Intl REQUIRED)
|
||||
|
||||
find_library(BZ2_LIBRARY NAMES bz2)
|
||||
find_library(JPEG_LIBRARY NAMES jpeg)
|
||||
find_library(TIFF_LIBRARY NAMES tiff)
|
||||
find_library(LZMA_LIBRARY NAMES lzma)
|
||||
find_library(FREETYPE_LIBRARY NAMES freetype)
|
||||
find_library(ICONV_LIBRARY NAMES iconv)
|
||||
find_library(CHARSET_LIBRARY NAMES charset)
|
||||
|
@ -568,10 +540,7 @@ if(PLATFORM_WINDOWS)
|
|||
|
||||
target_link_libraries(colobotbase PUBLIC
|
||||
Gettext::Intl
|
||||
${JPEG_LIBRARY}
|
||||
${TIFF_LIBRARY}
|
||||
${BZ2_LIBRARY}
|
||||
${LZMA_LIBRARY}
|
||||
${FREETYPE_LIBRARY}
|
||||
${ICONV_LIBRARY}
|
||||
${CHARSET_LIBRARY}
|
||||
|
@ -622,11 +591,7 @@ if(PLATFORM_WINDOWS)
|
|||
target_sources(colobot PRIVATE ../desktop/colobot.rc)
|
||||
endif()
|
||||
|
||||
if(PLATFORM_WINDOWS)
|
||||
target_link_libraries(colobot colobotbase SDL2::SDL2main)
|
||||
elseif()
|
||||
target_link_libraries(colobot colobotbase SDL2::Main)
|
||||
endif()
|
||||
target_link_libraries(colobot colobotbase SDL2::Main)
|
||||
|
||||
# Install
|
||||
install(TARGETS colobot RUNTIME DESTINATION ${COLOBOT_INSTALL_BIN_DIR})
|
||||
|
|
|
@ -3242,7 +3242,8 @@ void CEngine::Capture3DScene()
|
|||
|
||||
// create SDL surface and final texture
|
||||
ImageData image;
|
||||
image.surface = SDL_CreateRGBSurfaceFrom(blured.get(), newWidth, newHeight, 32, 0, 0, 0, 0, 0xFF000000);
|
||||
image.surface = SDL_CreateRGBSurfaceFrom(blured.get(), newWidth, newHeight,
|
||||
32, 4 * newWidth, 0x000000FF, 0x0000FF00, 0x00FF0000, 0xFF000000);
|
||||
|
||||
TextureCreateParams params;
|
||||
params.filter = TextureFilter::BILINEAR;
|
||||
|
|
|
@ -112,6 +112,8 @@ private:
|
|||
|
||||
if (variant < other.variant)
|
||||
return true;
|
||||
if (variant > other.variant)
|
||||
return false;
|
||||
|
||||
return !mirrored && mirrored != other.mirrored;
|
||||
}
|
||||
|
|
|
@ -113,6 +113,7 @@
|
|||
#include <algorithm>
|
||||
#include <iomanip>
|
||||
#include <stdexcept>
|
||||
#include <cmath>
|
||||
#include <ctime>
|
||||
|
||||
#include <boost/lexical_cast.hpp>
|
||||
|
@ -4136,70 +4137,66 @@ float SearchNearestObject(CObjectManager* objMan, glm::vec3 center, CObject* exc
|
|||
}
|
||||
return min;
|
||||
}
|
||||
|
||||
bool BlockedByObject(CObjectManager* objMan, const glm::vec3& center, float space, CObject* exclu)
|
||||
{
|
||||
for (CObject* obj : objMan->GetAllObjects())
|
||||
{
|
||||
if (!obj->GetDetectable()) continue; // inactive?
|
||||
if (IsObjectBeingTransported(obj)) continue;
|
||||
|
||||
if (obj == exclu) continue;
|
||||
|
||||
for (const auto &crashSphere : obj->GetAllCrashSpheres())
|
||||
{
|
||||
const glm::vec3 oPos = crashSphere.sphere.pos;
|
||||
const float oRadius = crashSphere.sphere.radius;
|
||||
const float minDist = oRadius + space;
|
||||
|
||||
if (glm::distance(center, oPos) < minDist)
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
//! Calculates a free space
|
||||
bool CRobotMain::FreeSpace(glm::vec3 ¢er, float minRadius, float maxRadius,
|
||||
float space, CObject *exclu)
|
||||
{
|
||||
if (minRadius < maxRadius) // from internal to external?
|
||||
for (float radius = minRadius; radius <= maxRadius; radius += space)
|
||||
{
|
||||
for (float radius = minRadius; radius <= maxRadius; radius += space)
|
||||
float ia = space/radius;
|
||||
for (float angle = 0.0f; angle < Math::PI*2.0f; angle += ia)
|
||||
{
|
||||
float ia = space/radius;
|
||||
for (float angle = 0.0f; angle < Math::PI*2.0f; angle += ia)
|
||||
glm::vec2 p;
|
||||
p.x = center.x+radius;
|
||||
p.y = center.z;
|
||||
p = Math::RotatePoint(glm::vec2(center.x, center.z), angle, p);
|
||||
|
||||
glm::vec3 pos;
|
||||
pos.x = p.x;
|
||||
pos.z = p.y;
|
||||
pos.y = 0.0f;
|
||||
pos.y = m_terrain->GetFloorLevel(pos);
|
||||
|
||||
if (!BlockedByObject(m_objMan.get(), pos, space, exclu))
|
||||
{
|
||||
glm::vec2 p;
|
||||
p.x = center.x+radius;
|
||||
p.y = center.z;
|
||||
p = Math::RotatePoint({ center.x, center.z }, angle, p);
|
||||
glm::vec3 pos;
|
||||
pos.x = p.x;
|
||||
pos.z = p.y;
|
||||
pos.y = 0.0f;
|
||||
m_terrain->AdjustToFloor(pos, true);
|
||||
float dist = SearchNearestObject(m_objMan.get(), pos, exclu);
|
||||
if (dist >= space)
|
||||
float flat = m_terrain->GetFlatZoneRadius(pos, space);
|
||||
if (flat >= space)
|
||||
{
|
||||
float flat = m_terrain->GetFlatZoneRadius(pos, dist/2.0f);
|
||||
if (flat >= dist/2.0f)
|
||||
{
|
||||
center = pos;
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else // from external to internal?
|
||||
{
|
||||
for (float radius=maxRadius; radius >= minRadius; radius -= space)
|
||||
{
|
||||
float ia = space/radius;
|
||||
for (float angle=0.0f ; angle<Math::PI*2.0f ; angle+=ia )
|
||||
{
|
||||
glm::vec2 p;
|
||||
p.x = center.x+radius;
|
||||
p.y = center.z;
|
||||
p = Math::RotatePoint({ center.x, center.z }, angle, p);
|
||||
glm::vec3 pos;
|
||||
pos.x = p.x;
|
||||
pos.z = p.y;
|
||||
pos.y = 0.0f;
|
||||
m_terrain->AdjustToFloor(pos, true);
|
||||
float dist = SearchNearestObject(m_objMan.get(), pos, exclu);
|
||||
if (dist >= space)
|
||||
{
|
||||
float flat = m_terrain->GetFlatZoneRadius(pos, dist/2.0f);
|
||||
if (flat >= dist/2.0f)
|
||||
{
|
||||
center = pos;
|
||||
return true;
|
||||
}
|
||||
center = pos;
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
float nan = nanf("");
|
||||
|
||||
center = glm::vec3{ nan, nan, nan };
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
|
|
|
@ -33,6 +33,8 @@
|
|||
|
||||
#include <glm/glm.hpp>
|
||||
|
||||
#include <string>
|
||||
|
||||
class CLevelParserLine;
|
||||
class CObject;
|
||||
|
||||
|
|
|
@ -100,7 +100,7 @@ float HaltToFloat(uint16_t value)
|
|||
// NaN
|
||||
else if ((exponent == 31) && (mantissa != 0))
|
||||
{
|
||||
result = std::nanf("");
|
||||
result = nanf("");
|
||||
}
|
||||
// Normal number
|
||||
else
|
||||
|
|
|
@ -24,6 +24,7 @@
|
|||
#include <glm/glm.hpp>
|
||||
|
||||
#include <array>
|
||||
#include <cstdint>
|
||||
#include <memory>
|
||||
#include <vector>
|
||||
|
||||
|
|
|
@ -301,6 +301,7 @@ std::string GetHelpFilename(const char *token)
|
|||
if ( strcmp(token, "ceil" ) == 0 ) helpfile = "cbot/ceil";
|
||||
if ( strcmp(token, "round" ) == 0 ) helpfile = "cbot/round";
|
||||
if ( strcmp(token, "trunc" ) == 0 ) helpfile = "cbot/trunc";
|
||||
if ( strcmp(token, "isnan" ) == 0 ) helpfile = "cbot/isnan";
|
||||
if ( strcmp(token, "retobject" ) == 0 ) helpfile = "cbot/retobj";
|
||||
if ( strcmp(token, "errmode" ) == 0 ) helpfile = "cbot/errmode";
|
||||
if ( strcmp(token, "isbusy" ) == 0 ) helpfile = "cbot/isbusy";
|
||||
|
@ -463,9 +464,10 @@ bool IsFunction(const char *token)
|
|||
if ( strcmp(token, "ceil" ) == 0 ) return true;
|
||||
if ( strcmp(token, "round" ) == 0 ) return true;
|
||||
if ( strcmp(token, "trunc" ) == 0 ) return true;
|
||||
if ( strcmp(token, "isnan" ) == 0 ) return true;
|
||||
if ( strcmp(token, "retobjectbyid") == 0 ) return true;
|
||||
if ( strcmp(token, "retobject" ) == 0 ) return true;
|
||||
if ( strcmp(token, "isbusy" ) == 0 ) return true;
|
||||
if ( strcmp(token, "isbusy" ) == 0 ) return true;
|
||||
if ( strcmp(token, "factory" ) == 0 ) return true;
|
||||
if ( strcmp(token, "research" ) == 0 ) return true;
|
||||
if ( strcmp(token, "takeoff" ) == 0 ) return true;
|
||||
|
@ -571,6 +573,7 @@ const char* GetHelpText(const char *token)
|
|||
if ( strcmp(token, "ceil" ) == 0 ) return "ceil ( value );";
|
||||
if ( strcmp(token, "round" ) == 0 ) return "round ( value );";
|
||||
if ( strcmp(token, "trunc" ) == 0 ) return "trunc ( value );";
|
||||
if ( strcmp(token, "isnan" ) == 0 ) return "isnan ( value );";
|
||||
if ( strcmp(token, "retobject" ) == 0 ) return "retobject ( rank );";
|
||||
if ( strcmp(token, "retobjectbyid") == 0 ) return "retobjectbyid ( rank );";
|
||||
if ( strcmp(token, "progfunc" ) == 0 ) return "progfunc ( funcname );";
|
||||
|
|
|
@ -67,6 +67,8 @@
|
|||
|
||||
#include "ui/displaytext.h"
|
||||
|
||||
#include <cmath>
|
||||
|
||||
using namespace CBot;
|
||||
|
||||
CBotTypResult CScriptFunctions::cClassNull(CBotVar* thisclass, CBotVar* &var)
|
||||
|
@ -1836,18 +1838,30 @@ bool CScriptFunctions::rSpace(CBotVar* var, CBotVar* result, int& exception, voi
|
|||
}
|
||||
}
|
||||
}
|
||||
script->m_main->FreeSpace(center, rMin, rMax, dist, pThis);
|
||||
|
||||
bool success = script->m_main->FreeSpace(center, rMin, rMax, dist, pThis);
|
||||
|
||||
if ( result != nullptr )
|
||||
{
|
||||
pSub = result->GetItemList();
|
||||
if ( pSub != nullptr )
|
||||
{
|
||||
pSub->SetValFloat(center.x/g_unit);
|
||||
pSub = pSub->GetNext(); // "y"
|
||||
pSub->SetValFloat(center.z/g_unit);
|
||||
pSub = pSub->GetNext(); // "z"
|
||||
pSub->SetValFloat(center.y/g_unit);
|
||||
if (success)
|
||||
{
|
||||
pSub->SetValFloat(center.x / g_unit);
|
||||
pSub = pSub->GetNext(); // "y"
|
||||
pSub->SetValFloat(center.z / g_unit);
|
||||
pSub = pSub->GetNext(); // "z"
|
||||
pSub->SetValFloat(center.y / g_unit);
|
||||
}
|
||||
else
|
||||
{
|
||||
pSub->SetValFloat(center.x);
|
||||
pSub = pSub->GetNext(); // "y"
|
||||
pSub->SetValFloat(center.y);
|
||||
pSub = pSub->GetNext(); // "z"
|
||||
pSub->SetValFloat(center.z);
|
||||
}
|
||||
}
|
||||
}
|
||||
return true;
|
||||
|
@ -2313,7 +2327,7 @@ bool CScriptFunctions::rReceive(CBotVar* var, CBotVar* result, int& exception, v
|
|||
if ( err != ERR_OK )
|
||||
{
|
||||
script->m_taskExecutor->StopForegroundTask();
|
||||
result->SetInit(CBotVar::InitType::IS_NAN);
|
||||
result->SetValFloat(nanf(""));
|
||||
return true;
|
||||
}
|
||||
|
||||
|
@ -2324,7 +2338,7 @@ bool CScriptFunctions::rReceive(CBotVar* var, CBotVar* result, int& exception, v
|
|||
|
||||
if ( script->m_returnValue == boost::none )
|
||||
{
|
||||
result->SetInit(CBotVar::InitType::IS_NAN);
|
||||
result->SetValFloat(nanf(""));
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -2859,6 +2873,7 @@ CBotTypResult CScriptFunctions::cMessage(CBotVar* &var, void* user)
|
|||
{
|
||||
if ( var == nullptr ) return CBotTypResult(CBotErrLowParam);
|
||||
if ( var->GetType() != CBotTypString &&
|
||||
var->GetType() != CBotTypBoolean &&
|
||||
var->GetType() > CBotTypDouble ) return CBotTypResult(CBotErrBadNum);
|
||||
var = var->GetNext();
|
||||
|
||||
|
@ -3644,11 +3659,11 @@ void CScriptFunctions::uObject(CBotVar* botThis, void* user)
|
|||
if (IsObjectBeingTransported(object))
|
||||
{
|
||||
pSub = pVar->GetItemList(); // "x"
|
||||
pSub->SetInit(CBotVar::InitType::IS_NAN);
|
||||
pSub->SetValFloat(nanf(""));
|
||||
pSub = pSub->GetNext(); // "y"
|
||||
pSub->SetInit(CBotVar::InitType::IS_NAN);
|
||||
pSub->SetValFloat(nanf(""));
|
||||
pSub = pSub->GetNext(); // "z"
|
||||
pSub->SetInit(CBotVar::InitType::IS_NAN);
|
||||
pSub->SetValFloat(nanf(""));
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -3749,11 +3764,11 @@ void CScriptFunctions::uObject(CBotVar* botThis, void* user)
|
|||
if (IsObjectBeingTransported(object) || physics == nullptr)
|
||||
{
|
||||
pSub = pVar->GetItemList(); // "x"
|
||||
pSub->SetInit(CBotVar::InitType::IS_NAN);
|
||||
pSub->SetValFloat(nanf(""));
|
||||
pSub = pSub->GetNext(); // "y"
|
||||
pSub->SetInit(CBotVar::InitType::IS_NAN);
|
||||
pSub->SetValFloat(nanf(""));
|
||||
pSub = pSub->GetNext(); // "z"
|
||||
pSub->SetInit(CBotVar::InitType::IS_NAN);
|
||||
pSub->SetValFloat(nanf(""));
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
|
@ -0,0 +1,49 @@
|
|||
{
|
||||
"name": "colobot",
|
||||
"version-string": "0.1.0",
|
||||
"builtin-baseline": "e809a42f87565e803b2178a0c11263f462d1800a",
|
||||
"dependencies": [
|
||||
"boost-algorithm",
|
||||
"boost-bimap",
|
||||
"boost-filesystem",
|
||||
"boost-lexical-cast",
|
||||
"boost-optional",
|
||||
"boost-property-tree",
|
||||
"boost-range",
|
||||
"boost-regex",
|
||||
"boost-system",
|
||||
{
|
||||
"name": "freetype",
|
||||
"default-features": false
|
||||
},
|
||||
"glew",
|
||||
"glm",
|
||||
"gettext",
|
||||
"libogg",
|
||||
"libpng",
|
||||
{
|
||||
"name": "libsndfile",
|
||||
"default-features": false,
|
||||
"features": [ "external-libs" ]
|
||||
},
|
||||
"libvorbis",
|
||||
"openal-soft",
|
||||
"opus",
|
||||
"physfs",
|
||||
"sdl2",
|
||||
{
|
||||
"name": "sdl2-image",
|
||||
"default-features": false
|
||||
},
|
||||
{
|
||||
"name": "sdl2-ttf",
|
||||
"default-features": false
|
||||
},
|
||||
"zlib"
|
||||
],
|
||||
"overrides": [
|
||||
{
|
||||
"name": "zlib", "version": "1.2.13"
|
||||
}
|
||||
]
|
||||
}
|
Loading…
Reference in New Issue