diff --git a/source/maths/FixedVector2D.h b/source/maths/FixedVector2D.h index d2728f412a..70513f769c 100644 --- a/source/maths/FixedVector2D.h +++ b/source/maths/FixedVector2D.h @@ -1,4 +1,4 @@ -/* Copyright (C) 2013 Wildfire Games. +/* Copyright (C) 2017 Wildfire Games. * This file is part of 0 A.D. * * 0 A.D. is free software: you can redistribute it and/or modify @@ -220,7 +220,7 @@ public: /** * Rotate the vector by the given angle (anticlockwise). */ - CFixedVector2D Rotate(fixed angle) + CFixedVector2D Rotate(fixed angle) const { fixed s, c; sincos_approx(angle, s, c); diff --git a/source/ps/TemplateLoader.cpp b/source/ps/TemplateLoader.cpp index a556a513a8..06952c5788 100644 --- a/source/ps/TemplateLoader.cpp +++ b/source/ps/TemplateLoader.cpp @@ -212,7 +212,7 @@ bool CTemplateLoader::TemplateExists(const std::string& templateName) const return VfsFileExists(VfsPath(TEMPLATE_ROOT) / wstring_from_utf8(baseName + ".xml")); } -std::vector CTemplateLoader::FindPlaceableTemplates(const std::string& path, bool includeSubdirectories, ETemplatesType templatesType, ScriptInterface& scriptInterface) +std::vector CTemplateLoader::FindPlaceableTemplates(const std::string& path, bool includeSubdirectories, ETemplatesType templatesType, ScriptInterface& scriptInterface) const { if (templatesType != SIMULATION_TEMPLATES && templatesType != ACTOR_TEMPLATES && templatesType != ALL_TEMPLATES) { @@ -295,7 +295,7 @@ std::vector CTemplateLoader::FindPlaceableTemplates(const std::stri return templates; } -std::vector CTemplateLoader::FindTemplates(const std::string& path, bool includeSubdirectories, ETemplatesType templatesType) +std::vector CTemplateLoader::FindTemplates(const std::string& path, bool includeSubdirectories, ETemplatesType templatesType) const { std::vector templates; diff --git a/source/ps/TemplateLoader.h b/source/ps/TemplateLoader.h index a22e35415b..1ec94ddd06 100644 --- a/source/ps/TemplateLoader.h +++ b/source/ps/TemplateLoader.h @@ -1,4 +1,4 @@ -/* Copyright (C) 2015 Wildfire Games. +/* Copyright (C) 2017 Wildfire Games. * This file is part of 0 A.D. * * 0 A.D. is free software: you can redistribute it and/or modify @@ -63,9 +63,9 @@ public: * Returns a list of strings that could be validly passed as @c templateName to LoadTemplateFile. * (This includes "actor|foo" etc names). */ - std::vector FindTemplates(const std::string& path, bool includeSubdirectories, ETemplatesType templatesType); + std::vector FindTemplates(const std::string& path, bool includeSubdirectories, ETemplatesType templatesType) const; - std::vector FindPlaceableTemplates(const std::string& path, bool includeSubdirectories, ETemplatesType templatesType, ScriptInterface& scriptInterface); + std::vector FindPlaceableTemplates(const std::string& path, bool includeSubdirectories, ETemplatesType templatesType, ScriptInterface& scriptInterface) const; private: /** diff --git a/source/scriptinterface/NativeWrapperDecls.h b/source/scriptinterface/NativeWrapperDecls.h index 2df4cac1b2..c45486e6ef 100644 --- a/source/scriptinterface/NativeWrapperDecls.h +++ b/source/scriptinterface/NativeWrapperDecls.h @@ -1,4 +1,4 @@ -/* Copyright (C) 2016 Wildfire Games. +/* Copyright (C) 2017 Wildfire Games. * This file is part of 0 A.D. * * 0 A.D. is free software: you can redistribute it and/or modify @@ -33,7 +33,7 @@ template struct MaybeRef; // Some other things #define TYPED_ARGS(z, i, data) , T##i a##i #define TYPED_ARGS_MAYBE_REF(z, i, data) , typename MaybeRef::Type a##i -#define TYPED_ARGS_CONST_REF(z, i, data) const T##i& a##i, +#define TYPED_ARGS_CONST_REF(z, i, data) , const T##i& a##i // TODO: We allow optional parameters when the C++ type can be converted from JS::UndefinedValue. // FromJSVal is expected to either set a##i or return false (otherwise we could get undefined @@ -62,7 +62,7 @@ template struct MaybeRef; #define T0_TAIL_MAYBE_REF(z, i) BOOST_PP_REPEAT_##z (i, NUMBERED_LIST_TAIL_MAYBE_REF, T) // ", const T0&, T1" #define T0_A0(z, i) BOOST_PP_REPEAT_##z (i, TYPED_ARGS, ~) // ",T0 a0, T1 a1" #define T0_A0_MAYBE_REF(z, i) BOOST_PP_REPEAT_##z (i, TYPED_ARGS_MAYBE_REF, ~) // ",const T0& a0, T1 a1" -#define T0_A0_CONST_REF(z, i) BOOST_PP_REPEAT_##z (i, TYPED_ARGS_CONST_REF, ~) // ", const T0& a0, const T1& a1, " +#define T0_A0_TAIL_CONST_REF(z, i) BOOST_PP_REPEAT_##z (i, TYPED_ARGS_CONST_REF, ~) // ", const T0& a0, const T1& a1" #define A0(z, i) BOOST_PP_REPEAT_##z (i, NUMBERED_LIST_BALANCED, a) // "a0, a1" #define A0_TAIL(z, i) BOOST_PP_REPEAT_##z (i, NUMBERED_LIST_TAIL, a) // ", a0, a1" @@ -90,6 +90,13 @@ BOOST_PP_REPEAT(SCRIPT_INTERFACE_MAX_ARGS, OVERLOADS, ~) BOOST_PP_REPEAT(SCRIPT_INTERFACE_MAX_ARGS, OVERLOADS, ~) #undef OVERLOADS +// const methods +#define OVERLOADS(z, i, data) \ + template \ + static bool callMethodConst(JSContext* cx, uint argc, jsval* vp); +BOOST_PP_REPEAT(SCRIPT_INTERFACE_MAX_ARGS, OVERLOADS, ~) +#undef OVERLOADS + // Argument-number counter #define OVERLOADS(z, i, data) \ template /* add a dummy parameter so we still compile with 0 template args */ \ @@ -100,7 +107,7 @@ BOOST_PP_REPEAT(SCRIPT_INTERFACE_MAX_ARGS, OVERLOADS, ~) // Call the named property on the given object #define OVERLOADS(z, i, data) \ template \ - bool CallFunction(JS::HandleValue val, const char* name, T0_A0_CONST_REF(z,i) R& ret); + bool CallFunction(JS::HandleValue val, const char* name T0_A0_TAIL_CONST_REF(z,i), R& ret) const; BOOST_PP_REPEAT(SCRIPT_INTERFACE_MAX_ARGS, OVERLOADS, ~) #undef OVERLOADS @@ -109,7 +116,7 @@ BOOST_PP_REPEAT(SCRIPT_INTERFACE_MAX_ARGS, OVERLOADS, ~) // (as people would expect it to work based on the SpiderMonkey rooting guide). #define OVERLOADS(z, i, data) \ template \ - bool CallFunction(JS::HandleValue val, const char* name, T0_A0_CONST_REF(z,i) JS::Rooted* ret); + bool CallFunction(JS::HandleValue val, const char* name T0_A0_TAIL_CONST_REF(z,i), JS::Rooted* ret) const; BOOST_PP_REPEAT(SCRIPT_INTERFACE_MAX_ARGS, OVERLOADS, ~) #undef OVERLOADS @@ -117,7 +124,7 @@ BOOST_PP_REPEAT(SCRIPT_INTERFACE_MAX_ARGS, OVERLOADS, ~) // without requiring implicit conversion. #define OVERLOADS(z, i, data) \ template \ - bool CallFunction(JS::HandleValue val, const char* name, T0_A0_CONST_REF(z,i) JS::MutableHandle ret); + bool CallFunction(JS::HandleValue val, const char* name T0_A0_TAIL_CONST_REF(z,i), JS::MutableHandle ret) const; BOOST_PP_REPEAT(SCRIPT_INTERFACE_MAX_ARGS, OVERLOADS, ~) #undef OVERLOADS diff --git a/source/scriptinterface/NativeWrapperDefns.h b/source/scriptinterface/NativeWrapperDefns.h index aeff275f12..ab73b3762a 100644 --- a/source/scriptinterface/NativeWrapperDefns.h +++ b/source/scriptinterface/NativeWrapperDefns.h @@ -1,4 +1,4 @@ -/* Copyright (C) 2016 Wildfire Games. +/* Copyright (C) 2017 Wildfire Games. * This file is part of 0 A.D. * * 0 A.D. is free software: you can redistribute it and/or modify @@ -120,7 +120,8 @@ struct ScriptInterface_NativeMethodWrapper { // JSFastNative-compatible function that wraps the function identified in the template argument list #define OVERLOADS(z, i, data) \ template \ - bool ScriptInterface::call(JSContext* cx, uint argc, jsval* vp) { \ + bool ScriptInterface::call(JSContext* cx, uint argc, jsval* vp) \ + { \ JS::CallArgs args = JS::CallArgsFromVp(argc, vp); \ JSAutoRequest rq(cx); \ BOOST_PP_REPEAT_##z (i, CONVERT_ARG, ~) \ @@ -135,7 +136,8 @@ BOOST_PP_REPEAT(SCRIPT_INTERFACE_MAX_ARGS, OVERLOADS, ~) // Same idea but for methods #define OVERLOADS(z, i, data) \ template \ - bool ScriptInterface::callMethod(JSContext* cx, uint argc, jsval* vp) { \ + bool ScriptInterface::callMethod(JSContext* cx, uint argc, jsval* vp) \ + { \ JS::CallArgs args = JS::CallArgsFromVp(argc, vp); \ JSAutoRequest rq(cx); \ JS::RootedObject thisObj(cx, JS_THIS_OBJECT(cx, vp)); \ @@ -151,11 +153,31 @@ BOOST_PP_REPEAT(SCRIPT_INTERFACE_MAX_ARGS, OVERLOADS, ~) BOOST_PP_REPEAT(SCRIPT_INTERFACE_MAX_ARGS, OVERLOADS, ~) #undef OVERLOADS +// const methods +#define OVERLOADS(z, i, data) \ + template \ + bool ScriptInterface::callMethodConst(JSContext* cx, uint argc, jsval* vp) \ + { \ + JS::CallArgs args = JS::CallArgsFromVp(argc, vp); \ + JSAutoRequest rq(cx); \ + JS::RootedObject thisObj(cx, JS_THIS_OBJECT(cx, vp)); \ + if (ScriptInterface::GetClass(thisObj) != CLS) return false; \ + TC* c = static_cast(ScriptInterface::GetPrivate(thisObj)); \ + if (! c) return false; \ + BOOST_PP_REPEAT_##z (i, CONVERT_ARG, ~) \ + JS::RootedValue rval(cx); \ + ScriptInterface_NativeMethodWrapper::template call(cx, &rval, c, fptr A0_TAIL(z,i)); \ + args.rval().set(rval); \ + return !ScriptInterface::IsExceptionPending(cx); \ + } +BOOST_PP_REPEAT(SCRIPT_INTERFACE_MAX_ARGS, OVERLOADS, ~) +#undef OVERLOADS + #define ASSIGN_OR_TO_JS_VAL(z, i, data) AssignOrToJSVal(cx, argv[i], a##i); #define OVERLOADS(z, i, data) \ template \ -bool ScriptInterface::CallFunction(JS::HandleValue val, const char* name, T0_A0_CONST_REF(z,i) R& ret) \ +bool ScriptInterface::CallFunction(JS::HandleValue val, const char* name T0_A0_TAIL_CONST_REF(z,i), R& ret) const \ { \ JSContext* cx = GetContext(); \ JSAutoRequest rq(cx); \ @@ -173,7 +195,7 @@ BOOST_PP_REPEAT(SCRIPT_INTERFACE_MAX_ARGS, OVERLOADS, ~) #define OVERLOADS(z, i, data) \ template \ -bool ScriptInterface::CallFunction(JS::HandleValue val, const char* name, T0_A0_CONST_REF(z,i) JS::Rooted* ret) \ +bool ScriptInterface::CallFunction(JS::HandleValue val, const char* name T0_A0_TAIL_CONST_REF(z,i), JS::Rooted* ret) const \ { \ JSContext* cx = GetContext(); \ JSAutoRequest rq(cx); \ @@ -181,17 +203,14 @@ bool ScriptInterface::CallFunction(JS::HandleValue val, const char* name, T0_A0_ JS::AutoValueVector argv(cx); \ argv.resize(i); \ BOOST_PP_REPEAT_##z (i, ASSIGN_OR_TO_JS_VAL, ~) \ - bool ok = CallFunction_(val, name, argv, jsRet); \ - if (!ok) \ - return false; \ - return true; \ + return CallFunction_(val, name, argv, jsRet); \ } BOOST_PP_REPEAT(SCRIPT_INTERFACE_MAX_ARGS, OVERLOADS, ~) #undef OVERLOADS #define OVERLOADS(z, i, data) \ template \ -bool ScriptInterface::CallFunction(JS::HandleValue val, const char* name, T0_A0_CONST_REF(z,i) JS::MutableHandle ret) \ +bool ScriptInterface::CallFunction(JS::HandleValue val, const char* name T0_A0_TAIL_CONST_REF(z,i), JS::MutableHandle ret) const \ { \ JSContext* cx = GetContext(); \ JSAutoRequest rq(cx); \ @@ -226,6 +245,6 @@ BOOST_PP_REPEAT(SCRIPT_INTERFACE_MAX_ARGS, OVERLOADS, ~) #undef T0_TAIL_MAYBE_REF #undef T0_A0 #undef T0_A0_MAYBE_REF -#undef T0_A0_CONST_REF +#undef T0_A0_TAIL_CONST_REF #undef A0 #undef A0_TAIL diff --git a/source/scriptinterface/ScriptInterface.cpp b/source/scriptinterface/ScriptInterface.cpp index 2f51207e91..8e348bed3f 100644 --- a/source/scriptinterface/ScriptInterface.cpp +++ b/source/scriptinterface/ScriptInterface.cpp @@ -569,7 +569,8 @@ bool ScriptInterface::CallFunctionVoid(JS::HandleValue val, const char* name) return CallFunction_(val, name, JS::HandleValueArray::empty(), &jsRet); } -bool ScriptInterface::CallFunction_(JS::HandleValue val, const char* name, JS::HandleValueArray argv, JS::MutableHandleValue ret) + +bool ScriptInterface::CallFunction_(JS::HandleValue val, const char* name, JS::HandleValueArray argv, JS::MutableHandleValue ret) const { JSAutoRequest rq(m->m_cx); JS::RootedObject obj(m->m_cx); diff --git a/source/scriptinterface/ScriptInterface.h b/source/scriptinterface/ScriptInterface.h index 6f66c48d2d..966093fada 100644 --- a/source/scriptinterface/ScriptInterface.h +++ b/source/scriptinterface/ScriptInterface.h @@ -1,4 +1,4 @@ -/* Copyright (C) 2016 Wildfire Games. +/* Copyright (C) 2017 Wildfire Games. * This file is part of 0 A.D. * * 0 A.D. is free software: you can redistribute it and/or modify @@ -379,7 +379,7 @@ public: private: - bool CallFunction_(JS::HandleValue val, const char* name, JS::HandleValueArray argv, JS::MutableHandleValue ret); + bool CallFunction_(JS::HandleValue val, const char* name, JS::HandleValueArray argv, JS::MutableHandleValue ret) const; bool Eval_(const char* code, JS::MutableHandleValue ret); bool Eval_(const wchar_t* code, JS::MutableHandleValue ret); bool SetGlobal_(const char* name, JS::HandleValue value, bool replace); @@ -440,6 +440,9 @@ public: // template // static JSNative callMethod; // + // template + // static JSNative callMethodConst; + // // template // static size_t nargs(); }; diff --git a/source/simulation2/components/CCmpFootprint.cpp b/source/simulation2/components/CCmpFootprint.cpp index f91fa01da7..2b25858001 100644 --- a/source/simulation2/components/CCmpFootprint.cpp +++ b/source/simulation2/components/CCmpFootprint.cpp @@ -1,4 +1,4 @@ -/* Copyright (C) 2015 Wildfire Games. +/* Copyright (C) 2017 Wildfire Games. * This file is part of 0 A.D. * * 0 A.D. is free software: you can redistribute it and/or modify @@ -119,7 +119,7 @@ public: Init(paramNode); } - virtual void GetShape(EShape& shape, entity_pos_t& size0, entity_pos_t& size1, entity_pos_t& height) + virtual void GetShape(EShape& shape, entity_pos_t& size0, entity_pos_t& size1, entity_pos_t& height) const { shape = m_Shape; size0 = m_Size0; @@ -127,7 +127,7 @@ public: height = m_Height; } - virtual CFixedVector3D PickSpawnPoint(entity_id_t spawned) + virtual CFixedVector3D PickSpawnPoint(entity_id_t spawned) const { // Try to find a free space around the building's footprint. // (Note that we use the footprint, not the obstruction shape - this might be a bit dodgy @@ -257,7 +257,7 @@ public: return error; } - virtual CFixedVector3D PickSpawnPointBothPass(entity_id_t spawned) + virtual CFixedVector3D PickSpawnPointBothPass(entity_id_t spawned) const { // Try to find a free space inside and around this footprint // at the intersection between the footprint passability and the unit passability. diff --git a/source/simulation2/components/CCmpMinimap.cpp b/source/simulation2/components/CCmpMinimap.cpp index 045573db38..385a282fca 100644 --- a/source/simulation2/components/CCmpMinimap.cpp +++ b/source/simulation2/components/CCmpMinimap.cpp @@ -1,4 +1,4 @@ -/* Copyright (C) 2013 Wildfire Games. +/* Copyright (C) 2017 Wildfire Games. * This file is part of 0 A.D. * * 0 A.D. is free software: you can redistribute it and/or modify @@ -207,7 +207,7 @@ public: } } - virtual bool GetRenderData(u8& r, u8& g, u8& b, entity_pos_t& x, entity_pos_t& z) + virtual bool GetRenderData(u8& r, u8& g, u8& b, entity_pos_t& x, entity_pos_t& z) const { if (!m_Active) return false; diff --git a/source/simulation2/components/CCmpObstruction.cpp b/source/simulation2/components/CCmpObstruction.cpp index 3c56d5fbbb..0366b94bf4 100644 --- a/source/simulation2/components/CCmpObstruction.cpp +++ b/source/simulation2/components/CCmpObstruction.cpp @@ -1,4 +1,4 @@ -/* Copyright (C) 2015 Wildfire Games. +/* Copyright (C) 2017 Wildfire Games. * This file is part of 0 A.D. * * 0 A.D. is free software: you can redistribute it and/or modify @@ -26,9 +26,6 @@ #include "simulation2/components/ICmpUnitMotion.h" #include "simulation2/serialization/SerializeTemplates.h" -#define MAX(x,y) x>y ? x : y -#define MIN(x,y) x>y ? y : x - /** * Obstruction implementation. This keeps the ICmpPathfinder's model of the world updated when the * entities move and die, with shapes derived from ICmpFootprint. @@ -237,13 +234,13 @@ public: b.da = entity_angle_t::FromInt(0); b.flags = m_Flags; m_Shapes.push_back(b); - max.X = MAX(max.X, b.dx + b.size0/2); - max.Y = MAX(max.Y, b.dz + b.size1/2); - min.X = MIN(min.X, b.dx - b.size0/2); - min.Y = MIN(min.Y, b.dz - b.size1/2); + max.X = std::max(max.X, b.dx + b.size0/2); + max.Y = std::max(max.Y, b.dz + b.size1/2); + min.X = std::min(min.X, b.dx - b.size0/2); + min.Y = std::min(min.Y, b.dz - b.size1/2); } - m_Size0 = fixed::FromInt(2).Multiply(MAX(max.X, -min.X)); - m_Size1 = fixed::FromInt(2).Multiply(MAX(max.Y, -min.Y)); + m_Size0 = fixed::FromInt(2).Multiply(std::max(max.X, -min.X)); + m_Size1 = fixed::FromInt(2).Multiply(std::max(max.Y, -min.Y)); } m_Active = paramNode.GetChild("Active").ToBool(); @@ -451,27 +448,27 @@ public: } } - virtual bool GetBlockMovementFlag() + virtual bool GetBlockMovementFlag() const { return (m_TemplateFlags & ICmpObstructionManager::FLAG_BLOCK_MOVEMENT) != 0; } - virtual ICmpObstructionManager::tag_t GetObstruction() + virtual ICmpObstructionManager::tag_t GetObstruction() const { return m_Tag; } - virtual bool GetPreviousObstructionSquare(ICmpObstructionManager::ObstructionSquare& out) + virtual bool GetPreviousObstructionSquare(ICmpObstructionManager::ObstructionSquare& out) const { return GetObstructionSquare(out, true); } - virtual bool GetObstructionSquare(ICmpObstructionManager::ObstructionSquare& out) + virtual bool GetObstructionSquare(ICmpObstructionManager::ObstructionSquare& out) const { return GetObstructionSquare(out, false); } - virtual bool GetObstructionSquare(ICmpObstructionManager::ObstructionSquare& out, bool previousPosition) + virtual bool GetObstructionSquare(ICmpObstructionManager::ObstructionSquare& out, bool previousPosition) const { CmpPtr cmpPosition(GetEntityHandle()); if (!cmpPosition) @@ -496,7 +493,7 @@ public: return true; } - virtual entity_pos_t GetUnitRadius() + virtual entity_pos_t GetUnitRadius() const { if (m_Type == UNIT) return m_Clearance; @@ -504,7 +501,7 @@ public: return entity_pos_t::Zero(); } - virtual entity_pos_t GetSize() + virtual entity_pos_t GetSize() const { if (m_Type == UNIT) return m_Clearance; @@ -518,17 +515,17 @@ public: m_Clearance = clearance; } - virtual bool IsControlPersistent() + virtual bool IsControlPersistent() const { return m_ControlPersist; } - virtual EFoundationCheck CheckFoundation(std::string className) + virtual EFoundationCheck CheckFoundation(const std::string& className) const { return CheckFoundation(className, false); } - virtual EFoundationCheck CheckFoundation(std::string className, bool onlyCenterPoint) + virtual EFoundationCheck CheckFoundation(const std::string& className, bool onlyCenterPoint) const { CmpPtr cmpPosition(GetEntityHandle()); if (!cmpPosition) @@ -565,7 +562,7 @@ public: return cmpPathfinder->CheckBuildingPlacement(filter, pos.X, pos.Y, cmpPosition->GetRotation().Y, m_Size0, m_Size1, GetEntityId(), passClass, onlyCenterPoint); } - virtual bool CheckDuplicateFoundation() + virtual bool CheckDuplicateFoundation() const { CmpPtr cmpPosition(GetEntityHandle()); if (!cmpPosition) @@ -597,7 +594,7 @@ public: return !cmpObstructionManager->TestStaticShape(filter, pos.X, pos.Y, cmpPosition->GetRotation().Y, m_Size0, m_Size1, NULL ); } - virtual std::vector GetUnitCollisions() + virtual std::vector GetUnitCollisions() const { std::vector ret; @@ -648,12 +645,12 @@ public: UpdateControlGroups(); } - virtual entity_id_t GetControlGroup() + virtual entity_id_t GetControlGroup() const { return m_ControlGroup; } - virtual entity_id_t GetControlGroup2() + virtual entity_id_t GetControlGroup2() const { return m_ControlGroup2; } @@ -685,7 +682,7 @@ public: } } - void ResolveFoundationCollisions() + void ResolveFoundationCollisions() const { if (m_Type == UNIT) return; diff --git a/source/simulation2/components/CCmpObstructionManager.cpp b/source/simulation2/components/CCmpObstructionManager.cpp index 8e5610bb98..4cc8f0709b 100644 --- a/source/simulation2/components/CCmpObstructionManager.cpp +++ b/source/simulation2/components/CCmpObstructionManager.cpp @@ -78,7 +78,7 @@ struct StaticShape struct SerializeUnitShape { template - void operator()(S& serialize, const char* UNUSED(name), UnitShape& value) + void operator()(S& serialize, const char* UNUSED(name), UnitShape& value) const { serialize.NumberU32_Unbounded("entity", value.entity); serialize.NumberFixed_Unbounded("x", value.x); @@ -95,7 +95,7 @@ struct SerializeUnitShape struct SerializeStaticShape { template - void operator()(S& serialize, const char* UNUSED(name), StaticShape& value) + void operator()(S& serialize, const char* UNUSED(name), StaticShape& value) const { serialize.NumberU32_Unbounded("entity", value.entity); serialize.NumberFixed_Unbounded("x", value.x); @@ -309,7 +309,7 @@ public: return STATIC_INDEX_TO_TAG(id); } - virtual ObstructionSquare GetUnitShapeObstruction(entity_pos_t x, entity_pos_t z, entity_pos_t clearance) + virtual ObstructionSquare GetUnitShapeObstruction(entity_pos_t x, entity_pos_t z, entity_pos_t clearance) const { CFixedVector2D u(entity_pos_t::FromInt(1), entity_pos_t::Zero()); CFixedVector2D v(entity_pos_t::Zero(), entity_pos_t::FromInt(1)); @@ -317,7 +317,7 @@ public: return o; } - virtual ObstructionSquare GetStaticShapeObstruction(entity_pos_t x, entity_pos_t z, entity_angle_t a, entity_pos_t w, entity_pos_t h) + virtual ObstructionSquare GetStaticShapeObstruction(entity_pos_t x, entity_pos_t z, entity_angle_t a, entity_pos_t w, entity_pos_t h) const { fixed s, c; sincos_approx(a, s, c); @@ -445,13 +445,13 @@ public: } } - virtual ObstructionSquare GetObstruction(tag_t tag) + virtual ObstructionSquare GetObstruction(tag_t tag) const { ENSURE(TAG_IS_VALID(tag)); if (TAG_IS_UNIT(tag)) { - UnitShape& shape = m_UnitShapes[TAG_TO_INDEX(tag)]; + const UnitShape& shape = m_UnitShapes.at(TAG_TO_INDEX(tag)); CFixedVector2D u(entity_pos_t::FromInt(1), entity_pos_t::Zero()); CFixedVector2D v(entity_pos_t::Zero(), entity_pos_t::FromInt(1)); ObstructionSquare o = { shape.x, shape.z, u, v, shape.clearance, shape.clearance }; @@ -459,21 +459,21 @@ public: } else { - StaticShape& shape = m_StaticShapes[TAG_TO_INDEX(tag)]; + const StaticShape& shape = m_StaticShapes.at(TAG_TO_INDEX(tag)); ObstructionSquare o = { shape.x, shape.z, shape.u, shape.v, shape.hw, shape.hh }; return o; } } - virtual bool TestLine(const IObstructionTestFilter& filter, entity_pos_t x0, entity_pos_t z0, entity_pos_t x1, entity_pos_t z1, entity_pos_t r, bool relaxClearanceForUnits = false); - virtual bool TestStaticShape(const IObstructionTestFilter& filter, entity_pos_t x, entity_pos_t z, entity_pos_t a, entity_pos_t w, entity_pos_t h, std::vector* out); - virtual bool TestUnitShape(const IObstructionTestFilter& filter, entity_pos_t x, entity_pos_t z, entity_pos_t r, std::vector* out); + virtual bool TestLine(const IObstructionTestFilter& filter, entity_pos_t x0, entity_pos_t z0, entity_pos_t x1, entity_pos_t z1, entity_pos_t r, bool relaxClearanceForUnits = false) const; + virtual bool TestStaticShape(const IObstructionTestFilter& filter, entity_pos_t x, entity_pos_t z, entity_pos_t a, entity_pos_t w, entity_pos_t h, std::vector* out) const; + virtual bool TestUnitShape(const IObstructionTestFilter& filter, entity_pos_t x, entity_pos_t z, entity_pos_t r, std::vector* out) const; virtual void Rasterize(Grid& grid, const std::vector& passClasses, bool fullUpdate); - virtual void GetObstructionsInRange(const IObstructionTestFilter& filter, entity_pos_t x0, entity_pos_t z0, entity_pos_t x1, entity_pos_t z1, std::vector& squares); - virtual void GetUnitObstructionsInRange(const IObstructionTestFilter& filter, entity_pos_t x0, entity_pos_t z0, entity_pos_t x1, entity_pos_t z1, std::vector& squares); - virtual void GetStaticObstructionsInRange(const IObstructionTestFilter& filter, entity_pos_t x0, entity_pos_t z0, entity_pos_t x1, entity_pos_t z1, std::vector& squares); - virtual void GetUnitsOnObstruction(const ObstructionSquare& square, std::vector& out, const IObstructionTestFilter& filter, bool strict = false); + virtual void GetObstructionsInRange(const IObstructionTestFilter& filter, entity_pos_t x0, entity_pos_t z0, entity_pos_t x1, entity_pos_t z1, std::vector& squares) const; + virtual void GetUnitObstructionsInRange(const IObstructionTestFilter& filter, entity_pos_t x0, entity_pos_t z0, entity_pos_t x1, entity_pos_t z1, std::vector& squares) const; + virtual void GetStaticObstructionsInRange(const IObstructionTestFilter& filter, entity_pos_t x0, entity_pos_t z0, entity_pos_t x1, entity_pos_t z1, std::vector& squares) const; + virtual void GetUnitsOnObstruction(const ObstructionSquare& square, std::vector& out, const IObstructionTestFilter& filter, bool strict = false) const; virtual void SetPassabilityCircular(bool enabled) { @@ -640,7 +640,7 @@ private: /** * Return whether the given point is within the world bounds by at least r */ - inline bool IsInWorld(entity_pos_t x, entity_pos_t z, entity_pos_t r) + inline bool IsInWorld(entity_pos_t x, entity_pos_t z, entity_pos_t r) const { return (m_WorldX0+r <= x && x <= m_WorldX1-r && m_WorldZ0+r <= z && z <= m_WorldZ1-r); } @@ -648,17 +648,17 @@ private: /** * Return whether the given point is within the world bounds */ - inline bool IsInWorld(const CFixedVector2D& p) + inline bool IsInWorld(const CFixedVector2D& p) const { return (m_WorldX0 <= p.X && p.X <= m_WorldX1 && m_WorldZ0 <= p.Y && p.Y <= m_WorldZ1); } - void RasterizeHelper(Grid& grid, ICmpObstructionManager::flags_t requireMask, bool fullUpdate, pass_class_t appliedMask, entity_pos_t clearance = fixed::Zero()); + void RasterizeHelper(Grid& grid, ICmpObstructionManager::flags_t requireMask, bool fullUpdate, pass_class_t appliedMask, entity_pos_t clearance = fixed::Zero()) const; }; REGISTER_COMPONENT_TYPE(ObstructionManager) -bool CCmpObstructionManager::TestLine(const IObstructionTestFilter& filter, entity_pos_t x0, entity_pos_t z0, entity_pos_t x1, entity_pos_t z1, entity_pos_t r, bool relaxClearanceForUnits) +bool CCmpObstructionManager::TestLine(const IObstructionTestFilter& filter, entity_pos_t x0, entity_pos_t z0, entity_pos_t x1, entity_pos_t z1, entity_pos_t r, bool relaxClearanceForUnits) const { PROFILE("TestLine"); @@ -678,7 +678,7 @@ bool CCmpObstructionManager::TestLine(const IObstructionTestFilter& filter, enti m_UnitSubdivision.GetInRange(unitShapes, posMin, posMax); for (size_t i = 0; i < unitShapes.size(); ++i) { - std::map::iterator it = m_UnitShapes.find(unitShapes[i]); + std::map::const_iterator it = m_UnitShapes.find(unitShapes[i]); ENSURE(it != m_UnitShapes.end()); if (!filter.TestShape(UNIT_INDEX_TO_TAG(it->first), it->second.flags, it->second.group, INVALID_ENTITY)) @@ -694,7 +694,7 @@ bool CCmpObstructionManager::TestLine(const IObstructionTestFilter& filter, enti m_StaticSubdivision.GetInRange(staticShapes, posMin, posMax); for (size_t i = 0; i < staticShapes.size(); ++i) { - std::map::iterator it = m_StaticShapes.find(staticShapes[i]); + std::map::const_iterator it = m_StaticShapes.find(staticShapes[i]); ENSURE(it != m_StaticShapes.end()); if (!filter.TestShape(STATIC_INDEX_TO_TAG(it->first), it->second.flags, it->second.group, it->second.group2)) @@ -711,7 +711,7 @@ bool CCmpObstructionManager::TestLine(const IObstructionTestFilter& filter, enti bool CCmpObstructionManager::TestStaticShape(const IObstructionTestFilter& filter, entity_pos_t x, entity_pos_t z, entity_pos_t a, entity_pos_t w, entity_pos_t h, - std::vector* out) + std::vector* out) const { PROFILE("TestStaticShape"); @@ -739,7 +739,7 @@ bool CCmpObstructionManager::TestStaticShape(const IObstructionTestFilter& filte return true; } - for (std::map::iterator it = m_UnitShapes.begin(); it != m_UnitShapes.end(); ++it) + for (std::map::const_iterator it = m_UnitShapes.begin(); it != m_UnitShapes.end(); ++it) { if (!filter.TestShape(UNIT_INDEX_TO_TAG(it->first), it->second.flags, it->second.group, INVALID_ENTITY)) continue; @@ -755,7 +755,7 @@ bool CCmpObstructionManager::TestStaticShape(const IObstructionTestFilter& filte } } - for (std::map::iterator it = m_StaticShapes.begin(); it != m_StaticShapes.end(); ++it) + for (std::map::const_iterator it = m_StaticShapes.begin(); it != m_StaticShapes.end(); ++it) { if (!filter.TestShape(STATIC_INDEX_TO_TAG(it->first), it->second.flags, it->second.group, it->second.group2)) continue; @@ -779,7 +779,7 @@ bool CCmpObstructionManager::TestStaticShape(const IObstructionTestFilter& filte bool CCmpObstructionManager::TestUnitShape(const IObstructionTestFilter& filter, entity_pos_t x, entity_pos_t z, entity_pos_t clearance, - std::vector* out) + std::vector* out) const { PROFILE("TestUnitShape"); @@ -796,7 +796,7 @@ bool CCmpObstructionManager::TestUnitShape(const IObstructionTestFilter& filter, CFixedVector2D center(x, z); - for (std::map::iterator it = m_UnitShapes.begin(); it != m_UnitShapes.end(); ++it) + for (std::map::const_iterator it = m_UnitShapes.begin(); it != m_UnitShapes.end(); ++it) { if (!filter.TestShape(UNIT_INDEX_TO_TAG(it->first), it->second.flags, it->second.group, INVALID_ENTITY)) continue; @@ -816,7 +816,7 @@ bool CCmpObstructionManager::TestUnitShape(const IObstructionTestFilter& filter, } } - for (std::map::iterator it = m_StaticShapes.begin(); it != m_StaticShapes.end(); ++it) + for (std::map::const_iterator it = m_StaticShapes.begin(); it != m_StaticShapes.end(); ++it) { if (!filter.TestShape(STATIC_INDEX_TO_TAG(it->first), it->second.flags, it->second.group, it->second.group2)) continue; @@ -882,7 +882,7 @@ void CCmpObstructionManager::Rasterize(Grid& grid, const std::vecto m_DirtyUnitShapes.clear(); } -void CCmpObstructionManager::RasterizeHelper(Grid& grid, ICmpObstructionManager::flags_t requireMask, bool fullUpdate, pass_class_t appliedMask, entity_pos_t clearance) +void CCmpObstructionManager::RasterizeHelper(Grid& grid, ICmpObstructionManager::flags_t requireMask, bool fullUpdate, pass_class_t appliedMask, entity_pos_t clearance) const { for (auto& pair : m_StaticShapes) { @@ -928,13 +928,13 @@ void CCmpObstructionManager::RasterizeHelper(Grid& grid, ICmpObstru } } -void CCmpObstructionManager::GetObstructionsInRange(const IObstructionTestFilter& filter, entity_pos_t x0, entity_pos_t z0, entity_pos_t x1, entity_pos_t z1, std::vector& squares) +void CCmpObstructionManager::GetObstructionsInRange(const IObstructionTestFilter& filter, entity_pos_t x0, entity_pos_t z0, entity_pos_t x1, entity_pos_t z1, std::vector& squares) const { GetUnitObstructionsInRange(filter, x0, z0, x1, z1, squares); GetStaticObstructionsInRange(filter, x0, z0, x1, z1, squares); } -void CCmpObstructionManager::GetUnitObstructionsInRange(const IObstructionTestFilter& filter, entity_pos_t x0, entity_pos_t z0, entity_pos_t x1, entity_pos_t z1, std::vector& squares) +void CCmpObstructionManager::GetUnitObstructionsInRange(const IObstructionTestFilter& filter, entity_pos_t x0, entity_pos_t z0, entity_pos_t x1, entity_pos_t z1, std::vector& squares) const { PROFILE("GetObstructionsInRange"); @@ -962,7 +962,7 @@ void CCmpObstructionManager::GetUnitObstructionsInRange(const IObstructionTestFi } } -void CCmpObstructionManager::GetStaticObstructionsInRange(const IObstructionTestFilter& filter, entity_pos_t x0, entity_pos_t z0, entity_pos_t x1, entity_pos_t z1, std::vector& squares) +void CCmpObstructionManager::GetStaticObstructionsInRange(const IObstructionTestFilter& filter, entity_pos_t x0, entity_pos_t z0, entity_pos_t x1, entity_pos_t z1, std::vector& squares) const { PROFILE("GetObstructionsInRange"); @@ -990,7 +990,7 @@ void CCmpObstructionManager::GetStaticObstructionsInRange(const IObstructionTest } } -void CCmpObstructionManager::GetUnitsOnObstruction(const ObstructionSquare& square, std::vector& out, const IObstructionTestFilter& filter, bool strict) +void CCmpObstructionManager::GetUnitsOnObstruction(const ObstructionSquare& square, std::vector& out, const IObstructionTestFilter& filter, bool strict) const { PROFILE("GetUnitsOnObstruction"); @@ -1012,7 +1012,7 @@ void CCmpObstructionManager::GetUnitsOnObstruction(const ObstructionSquare& squa auto it = m_UnitShapes.find(unitShape); ENSURE(it != m_UnitShapes.end()); - UnitShape& shape = it->second; + const UnitShape& shape = it->second; if (!filter.TestShape(UNIT_INDEX_TO_TAG(unitShape), shape.flags, shape.group, INVALID_ENTITY)) continue; diff --git a/source/simulation2/components/CCmpOwnership.cpp b/source/simulation2/components/CCmpOwnership.cpp index 0a4ea265ca..6d44bc427d 100644 --- a/source/simulation2/components/CCmpOwnership.cpp +++ b/source/simulation2/components/CCmpOwnership.cpp @@ -77,7 +77,7 @@ public: } } - virtual player_id_t GetOwner() + virtual player_id_t GetOwner() const { return m_Owner; } diff --git a/source/simulation2/components/CCmpPathfinder.cpp b/source/simulation2/components/CCmpPathfinder.cpp index dd70cea974..c1f2923825 100644 --- a/source/simulation2/components/CCmpPathfinder.cpp +++ b/source/simulation2/components/CCmpPathfinder.cpp @@ -203,15 +203,16 @@ void CCmpPathfinder::SetAtlasOverlay(bool enable, pass_class_t passClass) SAFE_DELETE(m_AtlasOverlay); } -pass_class_t CCmpPathfinder::GetPassabilityClass(const std::string& name) +pass_class_t CCmpPathfinder::GetPassabilityClass(const std::string& name) const { - if (m_PassClassMasks.find(name) == m_PassClassMasks.end()) + std::map::const_iterator it = m_PassClassMasks.find(name); + if (it == m_PassClassMasks.end()) { LOGERROR("Invalid passability class name '%s'", name.c_str()); return 0; } - return m_PassClassMasks[name]; + return it->second; } void CCmpPathfinder::GetPassabilityClasses(std::map& passClasses) const @@ -221,7 +222,7 @@ void CCmpPathfinder::GetPassabilityClasses(std::map& void CCmpPathfinder::GetPassabilityClasses(std::map& nonPathfindingPassClasses, std::map& pathfindingPassClasses) const { - for (auto& pair : m_PassClassMasks) + for (const std::pair& pair : m_PassClassMasks) { if ((GetPassabilityFromMask(pair.second)->m_Obstructions == PathfinderPassability::PATHFINDING)) pathfindingPassClasses[pair.first] = pair.second; @@ -791,7 +792,7 @@ void CCmpPathfinder::ProcessSameTurnMoves() bool CCmpPathfinder::CheckMovement(const IObstructionTestFilter& filter, entity_pos_t x0, entity_pos_t z0, entity_pos_t x1, entity_pos_t z1, entity_pos_t r, - pass_class_t passClass) + pass_class_t passClass) const { PROFILE2_IFSPIKE("Check Movement", 0.001); @@ -808,7 +809,7 @@ bool CCmpPathfinder::CheckMovement(const IObstructionTestFilter& filter, } ICmpObstruction::EFoundationCheck CCmpPathfinder::CheckUnitPlacement(const IObstructionTestFilter& filter, - entity_pos_t x, entity_pos_t z, entity_pos_t r, pass_class_t passClass, bool UNUSED(onlyCenterPoint)) + entity_pos_t x, entity_pos_t z, entity_pos_t r, pass_class_t passClass, bool UNUSED(onlyCenterPoint)) const { // Check unit obstruction CmpPtr cmpObstructionManager(GetSystemEntity()); @@ -834,7 +835,7 @@ ICmpObstruction::EFoundationCheck CCmpPathfinder::CheckUnitPlacement(const IObst ICmpObstruction::EFoundationCheck CCmpPathfinder::CheckBuildingPlacement(const IObstructionTestFilter& filter, entity_pos_t x, entity_pos_t z, entity_pos_t a, entity_pos_t w, - entity_pos_t h, entity_id_t id, pass_class_t passClass) + entity_pos_t h, entity_id_t id, pass_class_t passClass) const { return CCmpPathfinder::CheckBuildingPlacement(filter, x, z, a, w, h, id, passClass, false); } @@ -842,7 +843,7 @@ ICmpObstruction::EFoundationCheck CCmpPathfinder::CheckBuildingPlacement(const I ICmpObstruction::EFoundationCheck CCmpPathfinder::CheckBuildingPlacement(const IObstructionTestFilter& filter, entity_pos_t x, entity_pos_t z, entity_pos_t a, entity_pos_t w, - entity_pos_t h, entity_id_t id, pass_class_t passClass, bool UNUSED(onlyCenterPoint)) + entity_pos_t h, entity_id_t id, pass_class_t passClass, bool UNUSED(onlyCenterPoint)) const { // Check unit obstruction CmpPtr cmpObstructionManager(GetSystemEntity()); diff --git a/source/simulation2/components/CCmpPathfinder_Common.h b/source/simulation2/components/CCmpPathfinder_Common.h index d5f8d7dd7d..c1669c8f76 100644 --- a/source/simulation2/components/CCmpPathfinder_Common.h +++ b/source/simulation2/components/CCmpPathfinder_Common.h @@ -1,4 +1,4 @@ -/* Copyright (C) 2016 Wildfire Games. +/* Copyright (C) 2017 Wildfire Games. * This file is part of 0 A.D. * * 0 A.D. is free software: you can redistribute it and/or modify @@ -202,7 +202,7 @@ public: virtual void HandleMessage(const CMessage& msg, bool global); - virtual pass_class_t GetPassabilityClass(const std::string& name); + virtual pass_class_t GetPassabilityClass(const std::string& name) const; virtual void GetPassabilityClasses(std::map& passClasses) const; virtual void GetPassabilityClasses( @@ -264,20 +264,20 @@ public: m_LongPathfinder.SetHierDebugOverlay(enabled, &GetSimContext()); } - virtual void GetDebugData(u32& steps, double& time, Grid& grid) + virtual void GetDebugData(u32& steps, double& time, Grid& grid) const { m_LongPathfinder.GetDebugData(steps, time, grid); } virtual void SetAtlasOverlay(bool enable, pass_class_t passClass = 0); - virtual bool CheckMovement(const IObstructionTestFilter& filter, entity_pos_t x0, entity_pos_t z0, entity_pos_t x1, entity_pos_t z1, entity_pos_t r, pass_class_t passClass); + virtual bool CheckMovement(const IObstructionTestFilter& filter, entity_pos_t x0, entity_pos_t z0, entity_pos_t x1, entity_pos_t z1, entity_pos_t r, pass_class_t passClass) const; - virtual ICmpObstruction::EFoundationCheck CheckUnitPlacement(const IObstructionTestFilter& filter, entity_pos_t x, entity_pos_t z, entity_pos_t r, pass_class_t passClass, bool onlyCenterPoint); + virtual ICmpObstruction::EFoundationCheck CheckUnitPlacement(const IObstructionTestFilter& filter, entity_pos_t x, entity_pos_t z, entity_pos_t r, pass_class_t passClass, bool onlyCenterPoint) const; - virtual ICmpObstruction::EFoundationCheck CheckBuildingPlacement(const IObstructionTestFilter& filter, entity_pos_t x, entity_pos_t z, entity_pos_t a, entity_pos_t w, entity_pos_t h, entity_id_t id, pass_class_t passClass); + virtual ICmpObstruction::EFoundationCheck CheckBuildingPlacement(const IObstructionTestFilter& filter, entity_pos_t x, entity_pos_t z, entity_pos_t a, entity_pos_t w, entity_pos_t h, entity_id_t id, pass_class_t passClass) const; - virtual ICmpObstruction::EFoundationCheck CheckBuildingPlacement(const IObstructionTestFilter& filter, entity_pos_t x, entity_pos_t z, entity_pos_t a, entity_pos_t w, entity_pos_t h, entity_id_t id, pass_class_t passClass, bool onlyCenterPoint); + virtual ICmpObstruction::EFoundationCheck CheckBuildingPlacement(const IObstructionTestFilter& filter, entity_pos_t x, entity_pos_t z, entity_pos_t a, entity_pos_t w, entity_pos_t h, entity_id_t id, pass_class_t passClass, bool onlyCenterPoint) const; virtual void FinishAsyncRequests(); diff --git a/source/simulation2/components/CCmpPathfinder_Vertex.cpp b/source/simulation2/components/CCmpPathfinder_Vertex.cpp index 3182eb2204..b9214da9a5 100644 --- a/source/simulation2/components/CCmpPathfinder_Vertex.cpp +++ b/source/simulation2/components/CCmpPathfinder_Vertex.cpp @@ -1,4 +1,4 @@ -/* Copyright (C) 2016 Wildfire Games. +/* Copyright (C) 2017 Wildfire Games. * This file is part of 0 A.D. * * 0 A.D. is free software: you can redistribute it and/or modify @@ -501,7 +501,7 @@ struct SquareSort { CFixedVector2D src; SquareSort(CFixedVector2D src) : src(src) { } - bool operator()(const Square& a, const Square& b) + bool operator()(const Square& a, const Square& b) const { if ((a.p0 - src).CompareLength(b.p0 - src) < 0) return true; @@ -862,7 +862,7 @@ void CCmpPathfinder::ComputeShortPath(const IObstructionTestFilter& filter, xz.push_back(npos.X.ToFloat()); xz.push_back(npos.Y.ToFloat()); SimRender::ConstructLineOnGround(GetSimContext(), xz, m_DebugOverlayShortPathLines.back(), false); - //*/ + */ if (visible) { diff --git a/source/simulation2/components/CCmpPosition.cpp b/source/simulation2/components/CCmpPosition.cpp index 4a5db8920c..6da56a2cb8 100644 --- a/source/simulation2/components/CCmpPosition.cpp +++ b/source/simulation2/components/CCmpPosition.cpp @@ -1,4 +1,4 @@ -/* Copyright (C) 2016 Wildfire Games. +/* Copyright (C) 2017 Wildfire Games. * This file is part of 0 A.D. * * 0 A.D. is free software: you can redistribute it and/or modify @@ -319,12 +319,12 @@ public: UpdateTurretPosition(); } - virtual entity_id_t GetTurretParent() + virtual entity_id_t GetTurretParent() const { return m_TurretParent; } - virtual bool IsInWorld() + virtual bool IsInWorld() const { return m_InWorld; } @@ -396,7 +396,7 @@ public: AdvertiseInterpolatedPositionChanges(); } - virtual entity_pos_t GetHeightOffset() + virtual entity_pos_t GetHeightOffset() const { if (m_RelativeToGround) return m_Y; @@ -423,7 +423,7 @@ public: AdvertiseInterpolatedPositionChanges(); } - virtual entity_pos_t GetHeightFixed() + virtual entity_pos_t GetHeightFixed() const { if (!m_RelativeToGround) return m_Y; @@ -442,7 +442,7 @@ public: return m_Y + baseY; } - virtual bool IsHeightRelative() + virtual bool IsHeightRelative() const { return m_RelativeToGround; } @@ -456,7 +456,7 @@ public: AdvertiseInterpolatedPositionChanges(); } - virtual bool IsFloating() + virtual bool IsFloating() const { return m_Floating; } @@ -479,7 +479,7 @@ public: AdvertiseInterpolatedPositionChanges(); } - virtual CFixedVector3D GetPosition() + virtual CFixedVector3D GetPosition() const { if (!m_InWorld) { @@ -490,7 +490,7 @@ public: return CFixedVector3D(m_X, GetHeightFixed(), m_Z); } - virtual CFixedVector2D GetPosition2D() + virtual CFixedVector2D GetPosition2D() const { if (!m_InWorld) { @@ -501,7 +501,7 @@ public: return CFixedVector2D(m_X, m_Z); } - virtual CFixedVector3D GetPreviousPosition() + virtual CFixedVector3D GetPreviousPosition() const { if (!m_InWorld) { @@ -512,7 +512,7 @@ public: return CFixedVector3D(m_PrevX, GetHeightFixed(), m_PrevZ); } - virtual CFixedVector2D GetPreviousPosition2D() + virtual CFixedVector2D GetPreviousPosition2D() const { if (!m_InWorld) { @@ -574,7 +574,7 @@ public: } } - virtual CFixedVector3D GetRotation() + virtual CFixedVector3D GetRotation() const { entity_angle_t y = m_RotY; if (m_TurretParent != INVALID_ENTITY) @@ -586,7 +586,7 @@ public: return CFixedVector3D(m_RotX, y, m_RotZ); } - virtual fixed GetDistanceTravelled() + virtual fixed GetDistanceTravelled() const { if (!m_InWorld) { @@ -597,7 +597,7 @@ public: return CFixedVector2D(m_X - m_LastX, m_Z - m_LastZ).Length(); } - float GetConstructionProgressOffset(const CVector3D& pos) + float GetConstructionProgressOffset(const CVector3D& pos) const { if (m_ConstructionProgress.IsZero()) return 0.0f; @@ -627,7 +627,7 @@ public: return (m_ConstructionProgress.ToFloat() - 1.0f) * dy; } - virtual void GetInterpolatedPosition2D(float frameOffset, float& x, float& z, float& rotY) + virtual void GetInterpolatedPosition2D(float frameOffset, float& x, float& z, float& rotY) const { if (!m_InWorld) { @@ -641,7 +641,7 @@ public: rotY = m_InterpolatedRotY; } - virtual CMatrix3D GetInterpolatedTransform(float frameOffset) + virtual CMatrix3D GetInterpolatedTransform(float frameOffset) const { if (m_TurretParent != INVALID_ENTITY) { @@ -715,7 +715,7 @@ public: return m; } - void GetInterpolatedPositions(CVector3D& pos0, CVector3D& pos1) + void GetInterpolatedPositions(CVector3D& pos0, CVector3D& pos1) const { float baseY0 = 0; float baseY1 = 0; @@ -876,7 +876,7 @@ private: * - m_X, m_Z * - m_RotY */ - void AdvertisePositionChanges() + void AdvertisePositionChanges() const { for (std::set::const_iterator it = m_Turrets.begin(); it != m_Turrets.end(); ++it) { @@ -906,7 +906,7 @@ private: * - If m_RelativeToGround, then the ground under this unit * - If m_RelativeToGround && m_Float, then the water level */ - void AdvertiseInterpolatedPositionChanges() + void AdvertiseInterpolatedPositionChanges() const { if (m_InWorld) { diff --git a/source/simulation2/components/CCmpProjectileManager.cpp b/source/simulation2/components/CCmpProjectileManager.cpp index b890db51a9..4cc720e37d 100644 --- a/source/simulation2/components/CCmpProjectileManager.cpp +++ b/source/simulation2/components/CCmpProjectileManager.cpp @@ -1,4 +1,4 @@ -/* Copyright (C) 2015 Wildfire Games. +/* Copyright (C) 2017 Wildfire Games. * This file is part of 0 A.D. * * 0 A.D. is free software: you can redistribute it and/or modify @@ -149,11 +149,11 @@ private: uint32_t LaunchProjectile(entity_id_t source, CFixedVector3D targetPoint, fixed speed, fixed gravity); - void AdvanceProjectile(Projectile& projectile, float dt); + void AdvanceProjectile(Projectile& projectile, float dt) const; void Interpolate(float frameTime); - void RenderSubmit(SceneCollector& collector, const CFrustum& frustum, bool culling); + void RenderSubmit(SceneCollector& collector, const CFrustum& frustum, bool culling) const; }; REGISTER_COMPONENT_TYPE(ProjectileManager) @@ -215,7 +215,7 @@ uint32_t CCmpProjectileManager::LaunchProjectile(entity_id_t source, CFixedVecto return projectile.id; } -void CCmpProjectileManager::AdvanceProjectile(Projectile& projectile, float dt) +void CCmpProjectileManager::AdvanceProjectile(Projectile& projectile, float dt) const { projectile.time += dt; if (projectile.stopped) @@ -316,7 +316,7 @@ void CCmpProjectileManager::RemoveProjectile(uint32_t id) } } -void CCmpProjectileManager::RenderSubmit(SceneCollector& collector, const CFrustum& frustum, bool culling) +void CCmpProjectileManager::RenderSubmit(SceneCollector& collector, const CFrustum& frustum, bool culling) const { CmpPtr cmpRangeManager(GetSystemEntity()); int player = GetSimContext().GetCurrentDisplayedPlayer(); diff --git a/source/simulation2/components/CCmpRallyPointRenderer.cpp b/source/simulation2/components/CCmpRallyPointRenderer.cpp index 234c24c1fe..8f8777e9cf 100644 --- a/source/simulation2/components/CCmpRallyPointRenderer.cpp +++ b/source/simulation2/components/CCmpRallyPointRenderer.cpp @@ -1,4 +1,4 @@ -/* Copyright (C) 2015 Wildfire Games. +/* Copyright (C) 2017 Wildfire Games. * This file is part of 0 A.D. * * 0 A.D. is free software: you can redistribute it and/or modify @@ -60,7 +60,7 @@ struct SVisibilitySegment return !(*this == other); } - bool IsSinglePoint() + bool IsSinglePoint() const { return (m_StartIndex == m_EndIndex); } @@ -326,7 +326,7 @@ public: /** * Returns true if at least one display rally point is set; i.e., if we have a point to render our marker/line at. */ - bool IsSet() + bool IsSet() const { return !m_RallyPoints.empty(); } @@ -405,18 +405,18 @@ private: * nicely to the edge of the building's footprint. Only needed if the pathfinder can possibly return obstructed tile waypoints, * i.e. when pathfinding is started from an obstructed tile. */ - void FixFootprintWaypoints(std::vector& coords, CmpPtr cmpPosition, CmpPtr cmpFootprint); + void FixFootprintWaypoints(std::vector& coords, CmpPtr cmpPosition, CmpPtr cmpFootprint) const; /** * Get the point on the footprint edge that's as close from "start" as possible. */ - void GetClosestsEdgePointFrom(CFixedVector2D& result, CFixedVector2D& start, CmpPtr cmpPosition, CmpPtr cmpFootprint); + void GetClosestsEdgePointFrom(CFixedVector2D& result, CFixedVector2D& start, CmpPtr cmpPosition, CmpPtr cmpFootprint) const; /** * Returns a list of indices of waypoints in the current path (m_Path[index]) where the LOS visibility changes, ordered from * building/previous rally point to rally point. Used to construct the overlay line segments and track changes to the SoD. */ - void GetVisibilitySegments(std::deque& out, size_t index); + void GetVisibilitySegments(std::deque& out, size_t index) const; /** * Simplifies the path by removing waypoints that lie between two points that are visible from one another. This is primarily @@ -430,7 +430,7 @@ private: * at most 3 consecutive node links will be joined into a single link. * @p floating whether to consider nodes who are under the water level as floating on top of the water */ - void ReduceSegmentsByVisibility(std::vector& coords, unsigned maxSegmentLinks = 0, bool floating = true); + void ReduceSegmentsByVisibility(std::vector& coords, unsigned maxSegmentLinks = 0, bool floating = true) const; /** * Helper function to GetVisibilitySegments, factored out for testing. Merges single-point segments with its neighbouring @@ -920,7 +920,7 @@ void CCmpRallyPointRenderer::UpdateOverlayLines() } } -void CCmpRallyPointRenderer::GetClosestsEdgePointFrom(CFixedVector2D& result, CFixedVector2D& start, CmpPtr cmpPosition, CmpPtr cmpFootprint) +void CCmpRallyPointRenderer::GetClosestsEdgePointFrom(CFixedVector2D& result, CFixedVector2D& start, CmpPtr cmpPosition, CmpPtr cmpFootprint) const { ENSURE(cmpPosition); ENSURE(cmpFootprint); @@ -967,7 +967,7 @@ void CCmpRallyPointRenderer::GetClosestsEdgePointFrom(CFixedVector2D& result, CF } } -void CCmpRallyPointRenderer::FixFootprintWaypoints(std::vector& coords, CmpPtr cmpPosition, CmpPtr cmpFootprint) +void CCmpRallyPointRenderer::FixFootprintWaypoints(std::vector& coords, CmpPtr cmpPosition, CmpPtr cmpFootprint) const { ENSURE(cmpPosition); ENSURE(cmpFootprint); @@ -1052,7 +1052,7 @@ void CCmpRallyPointRenderer::FixFootprintWaypoints(std::vector& coord } } -void CCmpRallyPointRenderer::ReduceSegmentsByVisibility(std::vector& coords, unsigned maxSegmentLinks, bool floating) +void CCmpRallyPointRenderer::ReduceSegmentsByVisibility(std::vector& coords, unsigned maxSegmentLinks, bool floating) const { CmpPtr cmpPathFinder(GetSystemEntity()); CmpPtr cmpTerrain(GetSystemEntity()); @@ -1146,7 +1146,7 @@ void CCmpRallyPointRenderer::ReduceSegmentsByVisibility(std::vector& coords.swap(newCoords); } -void CCmpRallyPointRenderer::GetVisibilitySegments(std::deque& out, size_t index) +void CCmpRallyPointRenderer::GetVisibilitySegments(std::deque& out, size_t index) const { out.clear(); diff --git a/source/simulation2/components/CCmpRangeManager.cpp b/source/simulation2/components/CCmpRangeManager.cpp index 7e15c42f9a..a8f1de4ec7 100644 --- a/source/simulation2/components/CCmpRangeManager.cpp +++ b/source/simulation2/components/CCmpRangeManager.cpp @@ -269,7 +269,7 @@ struct EntityDistanceOrdering { } - bool operator()(entity_id_t a, entity_id_t b) + bool operator()(entity_id_t a, entity_id_t b) const { const EntityData& da = m_EntityData.find(a)->second; const EntityData& db = m_EntityData.find(b)->second; @@ -854,7 +854,7 @@ public: q.enabled = false; } - virtual bool IsActiveQueryEnabled(tag_t tag) + virtual bool IsActiveQueryEnabled(tag_t tag) const { std::map::const_iterator it = m_Queries.find(tag); if (it == m_Queries.end()) @@ -942,17 +942,17 @@ public: return r; } - virtual std::vector GetEntitiesByPlayer(player_id_t player) + virtual std::vector GetEntitiesByPlayer(player_id_t player) const { return GetEntitiesByMask(CalcOwnerMask(player)); } - virtual std::vector GetNonGaiaEntities() + virtual std::vector GetNonGaiaEntities() const { return GetEntitiesByMask(((1 << MAX_LOS_PLAYER_ID) - 1) << 1); } - std::vector GetEntitiesByMask(u32 ownerMask) + std::vector GetEntitiesByMask(u32 ownerMask) const { std::vector entities; @@ -1035,7 +1035,7 @@ public: /** * Returns whether the given entity matches the given query (ignoring maxRange) */ - bool TestEntityQuery(const Query& q, entity_id_t id, const EntityData& entity) + bool TestEntityQuery(const Query& q, entity_id_t id, const EntityData& entity) const { // Quick filter to ignore entities with the wrong owner if (!(CalcOwnerMask(entity.owner) & q.ownersMask)) @@ -1152,7 +1152,7 @@ public: } } - virtual entity_pos_t GetElevationAdaptedRange(const CFixedVector3D& pos1, const CFixedVector3D& rot, entity_pos_t range, entity_pos_t elevationBonus, entity_pos_t angle) + virtual entity_pos_t GetElevationAdaptedRange(const CFixedVector3D& pos1, const CFixedVector3D& rot, entity_pos_t range, entity_pos_t elevationBonus, entity_pos_t angle) const { CFixedVector3D pos(pos1); entity_pos_t r = entity_pos_t::Zero() ; @@ -1179,15 +1179,13 @@ public: } - virtual std::vector getParabolicRangeForm(CFixedVector3D pos, entity_pos_t maxRange, entity_pos_t cutoff, entity_pos_t minAngle, entity_pos_t maxAngle, int numberOfSteps) + virtual std::vector getParabolicRangeForm(CFixedVector3D pos, entity_pos_t maxRange, entity_pos_t cutoff, entity_pos_t minAngle, entity_pos_t maxAngle, int numberOfSteps) const { + std::vector r; // angle = 0 goes in the positive Z direction entity_pos_t precision = entity_pos_t::FromInt((int)TERRAIN_TILE_SIZE)/8; - std::vector r; - - CmpPtr cmpTerrain(GetSystemEntity()); CmpPtr cmpWaterManager(GetSystemEntity()); entity_pos_t waterLevel = cmpWaterManager->GetWaterLevel(pos.X,pos.Z); @@ -1252,12 +1250,11 @@ public: } return r; - } Query ConstructQuery(entity_id_t source, entity_pos_t minRange, entity_pos_t maxRange, - const std::vector& owners, int requiredInterface, u8 flagsMask) + const std::vector& owners, int requiredInterface, u8 flagsMask) const { // Min range must be non-negative if (minRange < entity_pos_t::Zero()) @@ -1290,7 +1287,7 @@ public: Query ConstructParabolicQuery(entity_id_t source, entity_pos_t minRange, entity_pos_t maxRange, entity_pos_t elevationBonus, - const std::vector& owners, int requiredInterface, u8 flagsMask) + const std::vector& owners, int requiredInterface, u8 flagsMask) const { Query q = ConstructQuery(source,minRange,maxRange,owners,requiredInterface,flagsMask); q.parabolic = true; @@ -1434,7 +1431,7 @@ public: collector.Submit(&m_DebugOverlayLines[i]); } - virtual u8 GetEntityFlagMask(const std::string& identifier) + virtual u8 GetEntityFlagMask(const std::string& identifier) const { if (identifier == "normal") return 1; @@ -1472,7 +1469,7 @@ public: // LOS implementation: - virtual CLosQuerier GetLosQuerier(player_id_t player) + virtual CLosQuerier GetLosQuerier(player_id_t player) const { if (GetLosRevealAll(player)) return CLosQuerier(0xFFFFFFFFu, m_LosStateRevealed, m_TerrainVerticesPerSide); @@ -1487,7 +1484,7 @@ public: it->second.scriptedVisibility = status ? 1 : 0; } - ELosVisibility ComputeLosVisibility(CEntityHandle ent, player_id_t player) + ELosVisibility ComputeLosVisibility(CEntityHandle ent, player_id_t player) const { // Entities not with positions in the world are never visible if (ent.GetId() == INVALID_ENTITY) @@ -1520,7 +1517,7 @@ public: CmpPtr cmpVisibility(ent); // Possibly ask the scripted Visibility component - EntityMap::iterator it = m_EntityData.find(ent.GetId()); + EntityMap::const_iterator it = m_EntityData.find(ent.GetId()); if (it != m_EntityData.end()) { if (it->second.scriptedVisibility == 1 && cmpVisibility) @@ -1585,13 +1582,13 @@ public: return VIS_FOGGED; } - ELosVisibility ComputeLosVisibility(entity_id_t ent, player_id_t player) + ELosVisibility ComputeLosVisibility(entity_id_t ent, player_id_t player) const { CEntityHandle handle = GetSimContext().GetComponentManager().LookupEntityHandle(ent); return ComputeLosVisibility(handle, player); } - virtual ELosVisibility GetLosVisibility(CEntityHandle ent, player_id_t player) + virtual ELosVisibility GetLosVisibility(CEntityHandle ent, player_id_t player) const { entity_id_t entId = ent.GetId(); @@ -1615,20 +1612,20 @@ public: if (std::find(m_ModifiedEntities.begin(), m_ModifiedEntities.end(), entId) != m_ModifiedEntities.end()) return ComputeLosVisibility(ent, player); - EntityMap::iterator it = m_EntityData.find(entId); + EntityMap::const_iterator it = m_EntityData.find(entId); if (it == m_EntityData.end()) return ComputeLosVisibility(ent, player); return static_cast(GetPlayerVisibility(it->second.visibilities, player)); } - virtual ELosVisibility GetLosVisibility(entity_id_t ent, player_id_t player) + virtual ELosVisibility GetLosVisibility(entity_id_t ent, player_id_t player) const { CEntityHandle handle = GetSimContext().GetComponentManager().LookupEntityHandle(ent); return GetLosVisibility(handle, player); } - i32 PosToLosTilesHelper(entity_pos_t x, entity_pos_t z) + i32 PosToLosTilesHelper(entity_pos_t x, entity_pos_t z) const { i32 i = Clamp( (x/(entity_pos_t::FromInt(TERRAIN_TILE_SIZE * LOS_TILES_RATIO))).ToInt_RoundToZero(), @@ -1736,7 +1733,7 @@ public: m_GlobalVisibilityUpdate = true; } - virtual bool GetLosRevealAll(player_id_t player) + virtual bool GetLosRevealAll(player_id_t player) const { // Special player value can force reveal-all for every player if (m_LosRevealAll[MAX_LOS_PLAYER_ID+1] || player == -1) @@ -1756,7 +1753,7 @@ public: ResetDerivedData(); } - virtual bool GetLosCircular() + virtual bool GetLosCircular() const { return m_LosCircular; } @@ -1783,7 +1780,7 @@ public: m_GlobalPlayerVisibilityUpdate[player-1] = 1; } - virtual u32 GetSharedLosMask(player_id_t player) + virtual u32 GetSharedLosMask(player_id_t player) const { return m_SharedLosMasks[player]; } @@ -1854,7 +1851,7 @@ public: * This is useful for miraging entities inside the territory borders at the beginning of a game, * or if the "Explore Map" option has been set. */ - void SeeExploredEntities(player_id_t p) + void SeeExploredEntities(player_id_t p) const { // Warning: Code related to fogging (like ForceMiraging) shouldn't be // invoked while iterating through m_EntityData. @@ -1863,7 +1860,7 @@ public: // So we just remember what entities to mirage and do that later. std::vector miragableEntities; - for (EntityMap::iterator it = m_EntityData.begin(); it != m_EntityData.end(); ++it) + for (EntityMap::const_iterator it = m_EntityData.begin(); it != m_EntityData.end(); ++it) { CmpPtr cmpPosition(GetSimContext(), it->first); if (!cmpPosition || !cmpPosition->IsInWorld()) @@ -1925,7 +1922,7 @@ public: * Returns whether the given vertex is outside the normal bounds of the world * (i.e. outside the range of a circular map) */ - inline bool LosIsOffWorld(ssize_t i, ssize_t j) + inline bool LosIsOffWorld(ssize_t i, ssize_t j) const { // WARNING: CCmpPathfinder::UpdateGrid needs to be kept in sync with this const ssize_t edgeSize = 3; // number of vertexes around the edge that will be off-world @@ -2288,12 +2285,12 @@ public: LosUpdateHelperIncremental((u8)owner, visionRange, from, to); } - virtual u8 GetPercentMapExplored(player_id_t player) + virtual u8 GetPercentMapExplored(player_id_t player) const { return m_ExploredVertices.at((u8)player) * 100 / m_TotalInworldVertices; } - virtual u8 GetUnionPercentMapExplored(const std::vector& players) + virtual u8 GetUnionPercentMapExplored(const std::vector& players) const { u32 exploredVertices = 0; std::vector::const_iterator playerIt; diff --git a/source/simulation2/components/CCmpSelectable.cpp b/source/simulation2/components/CCmpSelectable.cpp index 83a2d19566..9de41fdc2a 100644 --- a/source/simulation2/components/CCmpSelectable.cpp +++ b/source/simulation2/components/CCmpSelectable.cpp @@ -1,4 +1,4 @@ -/* Copyright (C) 2015 Wildfire Games. +/* Copyright (C) 2017 Wildfire Games. * This file is part of 0 A.D. * * 0 A.D. is free software: you can redistribute it and/or modify @@ -211,7 +211,7 @@ public: UpdateMessageSubscriptions(); } - virtual bool IsEditorOnly() + virtual bool IsEditorOnly() const { return m_EditorOnly; } diff --git a/source/simulation2/components/CCmpTemplateManager.cpp b/source/simulation2/components/CCmpTemplateManager.cpp index 95254806fe..80b3998d0e 100644 --- a/source/simulation2/components/CCmpTemplateManager.cpp +++ b/source/simulation2/components/CCmpTemplateManager.cpp @@ -106,17 +106,17 @@ public: virtual const CParamNode* GetTemplateWithoutValidation(const std::string& templateName); - virtual bool TemplateExists(const std::string& templateName); + virtual bool TemplateExists(const std::string& templateName) const; virtual const CParamNode* LoadLatestTemplate(entity_id_t ent); - virtual std::string GetCurrentTemplateName(entity_id_t ent); + virtual std::string GetCurrentTemplateName(entity_id_t ent) const; - virtual std::vector FindAllTemplates(bool includeActors); + virtual std::vector FindAllTemplates(bool includeActors) const; - virtual std::vector FindAllPlaceableTemplates(bool includeActors); + virtual std::vector FindAllPlaceableTemplates(bool includeActors) const; - virtual std::vector GetEntitiesUsingTemplate(const std::string& templateName); + virtual std::vector GetEntitiesUsingTemplate(const std::string& templateName) const; private: // Template loader @@ -189,7 +189,7 @@ const CParamNode* CCmpTemplateManager::GetTemplateWithoutValidation(const std::s return &templateRoot; } -bool CCmpTemplateManager::TemplateExists(const std::string& templateName) +bool CCmpTemplateManager::TemplateExists(const std::string& templateName) const { return m_templateLoader.TemplateExists(templateName); } @@ -202,7 +202,7 @@ const CParamNode* CCmpTemplateManager::LoadLatestTemplate(entity_id_t ent) return LoadTemplate(ent, it->second); } -std::string CCmpTemplateManager::GetCurrentTemplateName(entity_id_t ent) +std::string CCmpTemplateManager::GetCurrentTemplateName(entity_id_t ent) const { std::map::const_iterator it = m_LatestTemplates.find(ent); if (it == m_LatestTemplates.end()) @@ -210,13 +210,13 @@ std::string CCmpTemplateManager::GetCurrentTemplateName(entity_id_t ent) return it->second; } -std::vector CCmpTemplateManager::FindAllTemplates(bool includeActors) +std::vector CCmpTemplateManager::FindAllTemplates(bool includeActors) const { ETemplatesType templatesType = includeActors ? ALL_TEMPLATES : SIMULATION_TEMPLATES; return m_templateLoader.FindTemplates("", true, templatesType); } -std::vector CCmpTemplateManager::FindAllPlaceableTemplates(bool includeActors) +std::vector CCmpTemplateManager::FindAllPlaceableTemplates(bool includeActors) const { ScriptInterface& scriptInterface = this->GetSimContext().GetScriptInterface(); @@ -227,13 +227,12 @@ std::vector CCmpTemplateManager::FindAllPlaceableTemplates(bool inc /** * Get the list of entities using the specified template */ -std::vector CCmpTemplateManager::GetEntitiesUsingTemplate(const std::string& templateName) +std::vector CCmpTemplateManager::GetEntitiesUsingTemplate(const std::string& templateName) const { std::vector entities; - for (std::map::const_iterator it = m_LatestTemplates.begin(); it != m_LatestTemplates.end(); ++it) - { - if(it->second == templateName) - entities.push_back(it->first); - } + for (const std::pair& p : m_LatestTemplates) + if (p.second == templateName) + entities.push_back(p.first); + return entities; } diff --git a/source/simulation2/components/CCmpTerrain.cpp b/source/simulation2/components/CCmpTerrain.cpp index b15586833c..25abe32095 100644 --- a/source/simulation2/components/CCmpTerrain.cpp +++ b/source/simulation2/components/CCmpTerrain.cpp @@ -1,4 +1,4 @@ -/* Copyright (C) 2013 Wildfire Games. +/* Copyright (C) 2017 Wildfire Games. * This file is part of 0 A.D. * * 0 A.D. is free software: you can redistribute it and/or modify @@ -63,36 +63,36 @@ public: Init(paramNode); } - virtual bool IsLoaded() + virtual bool IsLoaded() const { return m_Terrain->GetVerticesPerSide() != 0; } - virtual CFixedVector3D CalcNormal(entity_pos_t x, entity_pos_t z) + virtual CFixedVector3D CalcNormal(entity_pos_t x, entity_pos_t z) const { CFixedVector3D normal; m_Terrain->CalcNormalFixed((x / (int)TERRAIN_TILE_SIZE).ToInt_RoundToZero(), (z / (int)TERRAIN_TILE_SIZE).ToInt_RoundToZero(), normal); return normal; } - virtual CVector3D CalcExactNormal(float x, float z) + virtual CVector3D CalcExactNormal(float x, float z) const { return m_Terrain->CalcExactNormal(x, z); } - virtual entity_pos_t GetGroundLevel(entity_pos_t x, entity_pos_t z) + virtual entity_pos_t GetGroundLevel(entity_pos_t x, entity_pos_t z) const { // TODO: this can crash if the terrain heightmap isn't initialised yet return m_Terrain->GetExactGroundLevelFixed(x, z); } - virtual float GetExactGroundLevel(float x, float z) + virtual float GetExactGroundLevel(float x, float z) const { return m_Terrain->GetExactGroundLevel(x, z); } - virtual u16 GetTilesPerSide() + virtual u16 GetTilesPerSide() const { ssize_t tiles = m_Terrain->GetTilesPerSide(); @@ -102,7 +102,7 @@ public: return (u16)tiles; } - virtual u16 GetVerticesPerSide() + virtual u16 GetVerticesPerSide() const { ssize_t vertices = m_Terrain->GetVerticesPerSide(); ENSURE(1 <= vertices && vertices <= 65535); diff --git a/source/simulation2/components/CCmpTerritoryInfluence.cpp b/source/simulation2/components/CCmpTerritoryInfluence.cpp index 0ba9a04dc6..47498ea4db 100644 --- a/source/simulation2/components/CCmpTerritoryInfluence.cpp +++ b/source/simulation2/components/CCmpTerritoryInfluence.cpp @@ -1,4 +1,4 @@ -/* Copyright (C) 2015 Wildfire Games. +/* Copyright (C) 2017 Wildfire Games. * This file is part of 0 A.D. * * 0 A.D. is free software: you can redistribute it and/or modify @@ -73,17 +73,17 @@ public: Init(paramNode); } - virtual bool IsRoot() + virtual bool IsRoot() const { return m_Root; } - virtual u16 GetWeight() + virtual u16 GetWeight() const { return m_Weight; } - virtual u32 GetRadius() + virtual u32 GetRadius() const { CmpPtr cmpValueModificationManager(GetSystemEntity()); if (!cmpValueModificationManager) diff --git a/source/simulation2/components/CCmpTerritoryManager.cpp b/source/simulation2/components/CCmpTerritoryManager.cpp index cbe9101e20..408ce03634 100644 --- a/source/simulation2/components/CCmpTerritoryManager.cpp +++ b/source/simulation2/components/CCmpTerritoryManager.cpp @@ -1,4 +1,4 @@ -/* Copyright (C) 2016 Wildfire Games. +/* Copyright (C) 2017 Wildfire Games. * This file is part of 0 A.D. * * 0 A.D. is free software: you can redistribute it and/or modify @@ -256,7 +256,7 @@ public: m_TriggerEvent = true; } - virtual bool NeedUpdate(size_t* dirtyID) + virtual bool NeedUpdate(size_t* dirtyID) const { if (*dirtyID != m_DirtyID) { diff --git a/source/simulation2/components/CCmpUnitMotion.cpp b/source/simulation2/components/CCmpUnitMotion.cpp index 04a7a00faa..93c62e6a30 100644 --- a/source/simulation2/components/CCmpUnitMotion.cpp +++ b/source/simulation2/components/CCmpUnitMotion.cpp @@ -1,4 +1,4 @@ -/* Copyright (C) 2016 Wildfire Games. +/* Copyright (C) 2017 Wildfire Games. * This file is part of 0 A.D. * * 0 A.D. is free software: you can redistribute it and/or modify @@ -439,32 +439,32 @@ public: GetSimContext().GetComponentManager().DynamicSubscriptionNonsync(MT_RenderSubmit, this, needRender); } - virtual bool IsMoving() + virtual bool IsMoving() const { return m_Moving; } - virtual fixed GetWalkSpeed() + virtual fixed GetWalkSpeed() const { return m_WalkSpeed; } - virtual fixed GetRunSpeed() + virtual fixed GetRunSpeed() const { return m_RunSpeed; } - virtual pass_class_t GetPassabilityClass() + virtual pass_class_t GetPassabilityClass() const { return m_PassClass; } - virtual std::string GetPassabilityClassName() + virtual std::string GetPassabilityClassName() const { return m_PassClassName; } - virtual void SetPassabilityClassName(std::string passClassName) + virtual void SetPassabilityClassName(const std::string& passClassName) { m_PassClassName = passClassName; CmpPtr cmpPathfinder(GetSystemEntity()); @@ -472,7 +472,7 @@ public: m_PassClass = cmpPathfinder->GetPassabilityClass(passClassName); } - virtual fixed GetCurrentSpeed() + virtual fixed GetCurrentSpeed() const { return m_CurSpeed; } @@ -494,9 +494,9 @@ public: } virtual bool MoveToPointRange(entity_pos_t x, entity_pos_t z, entity_pos_t minRange, entity_pos_t maxRange); - virtual bool IsInPointRange(entity_pos_t x, entity_pos_t z, entity_pos_t minRange, entity_pos_t maxRange); + virtual bool IsInPointRange(entity_pos_t x, entity_pos_t z, entity_pos_t minRange, entity_pos_t maxRange) const; virtual bool MoveToTargetRange(entity_id_t target, entity_pos_t minRange, entity_pos_t maxRange); - virtual bool IsInTargetRange(entity_id_t target, entity_pos_t minRange, entity_pos_t maxRange); + virtual bool IsInTargetRange(entity_id_t target, entity_pos_t minRange, entity_pos_t maxRange) const; virtual void MoveToFormationOffset(entity_id_t target, entity_pos_t x, entity_pos_t z); virtual void FaceTowardsPoint(entity_pos_t x, entity_pos_t z); @@ -511,7 +511,7 @@ public: m_ShortPath.m_Waypoints.clear(); } - virtual entity_pos_t GetUnitClearance() + virtual entity_pos_t GetUnitClearance() const { return m_Clearance; } @@ -613,7 +613,7 @@ private: * Computes the current location of our target entity (plus offset). * Returns false if no target entity or no valid position. */ - bool ComputeTargetPosition(CFixedVector2D& out); + bool ComputeTargetPosition(CFixedVector2D& out) const; /** * Attempts to replace the current path with a straight line to the goal, @@ -1063,7 +1063,7 @@ void CCmpUnitMotion::Move(fixed dt) } } -bool CCmpUnitMotion::ComputeTargetPosition(CFixedVector2D& out) +bool CCmpUnitMotion::ComputeTargetPosition(CFixedVector2D& out) const { if (m_TargetEntity == INVALID_ENTITY) return false; @@ -1455,7 +1455,7 @@ bool CCmpUnitMotion::MoveToPointRange(entity_pos_t x, entity_pos_t z, entity_pos return true; } -bool CCmpUnitMotion::IsInPointRange(entity_pos_t x, entity_pos_t z, entity_pos_t minRange, entity_pos_t maxRange) +bool CCmpUnitMotion::IsInPointRange(entity_pos_t x, entity_pos_t z, entity_pos_t minRange, entity_pos_t maxRange) const { CmpPtr cmpPosition(GetEntityHandle()); if (!cmpPosition || !cmpPosition->IsInWorld()) @@ -1668,7 +1668,7 @@ bool CCmpUnitMotion::MoveToTargetRange(entity_id_t target, entity_pos_t minRange return true; } -bool CCmpUnitMotion::IsInTargetRange(entity_id_t target, entity_pos_t minRange, entity_pos_t maxRange) +bool CCmpUnitMotion::IsInTargetRange(entity_id_t target, entity_pos_t minRange, entity_pos_t maxRange) const { // This function closely mirrors MoveToTargetRange - it needs to return true // after that Move has completed diff --git a/source/simulation2/components/CCmpUnitRenderer.cpp b/source/simulation2/components/CCmpUnitRenderer.cpp index b1a6e3d4c3..e492c8f0fe 100644 --- a/source/simulation2/components/CCmpUnitRenderer.cpp +++ b/source/simulation2/components/CCmpUnitRenderer.cpp @@ -1,4 +1,4 @@ -/* Copyright (C) 2016 Wildfire Games. +/* Copyright (C) 2017 Wildfire Games. * This file is part of 0 A.D. * * 0 A.D. is free software: you can redistribute it and/or modify @@ -256,9 +256,9 @@ public: void Interpolate(float frameTime, float frameOffset); void RenderSubmit(SceneCollector& collector, const CFrustum& frustum, bool culling); - void UpdateVisibility(SUnit& unit); + void UpdateVisibility(SUnit& unit) const; - virtual float GetFrameOffset() + virtual float GetFrameOffset() const { return m_FrameOffset; } @@ -268,14 +268,13 @@ public: m_EnableDebugOverlays = enabled; } - virtual void PickAllEntitiesAtPoint(std::vector >& outEntities, const CVector3D& origin, const CVector3D& dir, bool allowEditorSelectables) + virtual void PickAllEntitiesAtPoint(std::vector >& outEntities, const CVector3D& origin, const CVector3D& dir, bool allowEditorSelectables) const { // First, make a rough test with the worst-case bounding boxes to pick all // entities/models that could possibly be hit by the ray. - std::vector candidates; - for (size_t i = 0; i < m_Units.size(); ++i) + std::vector candidates; + for (const SUnit& unit : m_Units) { - SUnit& unit = m_Units[i]; if (!unit.actor || !unit.inWorld) continue; if (unit.sweptBounds.RayIntersect(origin, dir)) @@ -442,7 +441,7 @@ void CCmpUnitRenderer::RenderSubmit(SceneCollector& collector, const CFrustum& f collector.Submit(&m_DebugSpheres[i]); } -void CCmpUnitRenderer::UpdateVisibility(SUnit& unit) +void CCmpUnitRenderer::UpdateVisibility(SUnit& unit) const { if (unit.inWorld) { diff --git a/source/simulation2/components/CCmpVision.cpp b/source/simulation2/components/CCmpVision.cpp index 81f673005b..d4c8a1acff 100644 --- a/source/simulation2/components/CCmpVision.cpp +++ b/source/simulation2/components/CCmpVision.cpp @@ -1,4 +1,4 @@ -/* Copyright (C) 2016 Wildfire Games. +/* Copyright (C) 2017 Wildfire Games. * This file is part of 0 A.D. * * 0 A.D. is free software: you can redistribute it and/or modify @@ -130,12 +130,12 @@ public: GetSimContext().GetComponentManager().BroadcastMessage(msg); } - virtual entity_pos_t GetRange() + virtual entity_pos_t GetRange() const { return m_Range; } - virtual bool GetRevealShore() + virtual bool GetRevealShore() const { return m_RevealShore; } diff --git a/source/simulation2/components/CCmpVisualActor.cpp b/source/simulation2/components/CCmpVisualActor.cpp index f84dc51558..b3f0c376a6 100644 --- a/source/simulation2/components/CCmpVisualActor.cpp +++ b/source/simulation2/components/CCmpVisualActor.cpp @@ -1,4 +1,4 @@ -/* Copyright (C) 2016 Wildfire Games. +/* Copyright (C) 2017 Wildfire Games. * This file is part of 0 A.D. * * 0 A.D. is free software: you can redistribute it and/or modify @@ -347,7 +347,7 @@ public: } } - virtual CBoundingBoxAligned GetBounds() + virtual CBoundingBoxAligned GetBounds() const { if (!m_Unit) return CBoundingBoxAligned::EMPTY; @@ -359,35 +359,35 @@ public: return m_Unit; } - virtual CBoundingBoxOriented GetSelectionBox() + virtual CBoundingBoxOriented GetSelectionBox() const { if (!m_Unit) return CBoundingBoxOriented::EMPTY; return m_Unit->GetModel().GetSelectionBox(); } - virtual CVector3D GetPosition() + virtual CVector3D GetPosition() const { if (!m_Unit) return CVector3D(0, 0, 0); return m_Unit->GetModel().GetTransform().GetTranslation(); } - virtual std::wstring GetActorShortName() + virtual std::wstring GetActorShortName() const { if (!m_Unit) return L""; return m_Unit->GetObject().m_Base->m_ShortName; } - virtual std::wstring GetProjectileActor() + virtual std::wstring GetProjectileActor() const { if (!m_Unit) return L""; return m_Unit->GetObject().m_ProjectileModelName; } - virtual CVector3D GetProjectileLaunchPoint() + virtual CVector3D GetProjectileLaunchPoint() const { if (!m_Unit) return CVector3D(); @@ -492,7 +492,7 @@ public: m_Unit->GetModel().SetEntityVariable(name, value); } - virtual u32 GetActorSeed() + virtual u32 GetActorSeed() const { return m_Seed; } @@ -506,7 +506,7 @@ public: ReloadActor(); } - virtual bool HasConstructionPreview() + virtual bool HasConstructionPreview() const { return m_ConstructionPreview; } diff --git a/source/simulation2/components/CCmpWaterManager.cpp b/source/simulation2/components/CCmpWaterManager.cpp index 5b25d0f3a7..e4d3fe5eed 100644 --- a/source/simulation2/components/CCmpWaterManager.cpp +++ b/source/simulation2/components/CCmpWaterManager.cpp @@ -1,4 +1,4 @@ -/* Copyright (C) 2015 Wildfire Games. +/* Copyright (C) 2017 Wildfire Games. * This file is part of 0 A.D. * * 0 A.D. is free software: you can redistribute it and/or modify @@ -124,12 +124,12 @@ public: GetSimContext().GetComponentManager().BroadcastMessage(msg); } - virtual entity_pos_t GetWaterLevel(entity_pos_t UNUSED(x), entity_pos_t UNUSED(z)) + virtual entity_pos_t GetWaterLevel(entity_pos_t UNUSED(x), entity_pos_t UNUSED(z)) const { return m_WaterHeight; } - virtual float GetExactWaterLevel(float UNUSED(x), float UNUSED(z)) + virtual float GetExactWaterLevel(float UNUSED(x), float UNUSED(z)) const { return m_WaterHeight.ToFloat(); } diff --git a/source/simulation2/components/ICmpFootprint.cpp b/source/simulation2/components/ICmpFootprint.cpp index 2fcfa71ee6..3bcd224e8e 100644 --- a/source/simulation2/components/ICmpFootprint.cpp +++ b/source/simulation2/components/ICmpFootprint.cpp @@ -1,4 +1,4 @@ -/* Copyright (C) 2015 Wildfire Games. +/* Copyright (C) 2017 Wildfire Games. * This file is part of 0 A.D. * * 0 A.D. is free software: you can redistribute it and/or modify @@ -24,7 +24,7 @@ #include "simulation2/system/SimContext.h" #include "maths/FixedVector3D.h" -JS::Value ICmpFootprint::GetShape_wrapper() +JS::Value ICmpFootprint::GetShape_wrapper() const { EShape shape; entity_pos_t size0, size1, height; @@ -69,7 +69,7 @@ JS::Value ICmpFootprint::GetShape_wrapper() } BEGIN_INTERFACE_WRAPPER(Footprint) -DEFINE_INTERFACE_METHOD_1("PickSpawnPoint", CFixedVector3D, ICmpFootprint, PickSpawnPoint, entity_id_t) -DEFINE_INTERFACE_METHOD_1("PickSpawnPointBothPass", CFixedVector3D, ICmpFootprint, PickSpawnPointBothPass, entity_id_t) -DEFINE_INTERFACE_METHOD_0("GetShape", JS::Value, ICmpFootprint, GetShape_wrapper) +DEFINE_INTERFACE_METHOD_CONST_1("PickSpawnPoint", CFixedVector3D, ICmpFootprint, PickSpawnPoint, entity_id_t) +DEFINE_INTERFACE_METHOD_CONST_1("PickSpawnPointBothPass", CFixedVector3D, ICmpFootprint, PickSpawnPointBothPass, entity_id_t) +DEFINE_INTERFACE_METHOD_CONST_0("GetShape", JS::Value, ICmpFootprint, GetShape_wrapper) END_INTERFACE_WRAPPER(Footprint) diff --git a/source/simulation2/components/ICmpFootprint.h b/source/simulation2/components/ICmpFootprint.h index 008cd8711c..05074eafe1 100644 --- a/source/simulation2/components/ICmpFootprint.h +++ b/source/simulation2/components/ICmpFootprint.h @@ -1,4 +1,4 @@ -/* Copyright (C) 2010 Wildfire Games. +/* Copyright (C) 2017 Wildfire Games. * This file is part of 0 A.D. * * 0 A.D. is free software: you can redistribute it and/or modify @@ -47,14 +47,14 @@ public: * @param[out] size1 if CIRCLE then radius, else depth (size in Z axis) * @param[out] height size in Y axis */ - virtual void GetShape(EShape& shape, entity_pos_t& size0, entity_pos_t& size1, entity_pos_t& height) = 0; + virtual void GetShape(EShape& shape, entity_pos_t& size0, entity_pos_t& size1, entity_pos_t& height) const = 0; /** * GetShape wrapper for script calls. * Returns { "type": "circle", "radius": 5.0, "height": 1.0 } * or { "type": "square", "width": 5.0, "depth": 5.0, "height": 1.0 } */ - JS::Value GetShape_wrapper(); + JS::Value GetShape_wrapper() const; /** * Pick a sensible position to place a newly-spawned entity near this footprint, @@ -62,14 +62,14 @@ public: * orientation. * @return the X and Z coordinates of the spawn point, with Y = 0; or the special value (-1, -1, -1) if there's no space */ - virtual CFixedVector3D PickSpawnPoint(entity_id_t spawned) = 0; + virtual CFixedVector3D PickSpawnPoint(entity_id_t spawned) const = 0; /** * Pick a sensible position to place a newly-spawned entity near this footprint, * at the intersection between the footprint passability and the entity one. * @return the X and Z coordinates of the spawn point, with Y = 0; or the special value (-1, -1, -1) if there's no space */ - virtual CFixedVector3D PickSpawnPointBothPass(entity_id_t spawned) = 0; + virtual CFixedVector3D PickSpawnPointBothPass(entity_id_t spawned) const = 0; DECLARE_INTERFACE_TYPE(Footprint) }; diff --git a/source/simulation2/components/ICmpMinimap.h b/source/simulation2/components/ICmpMinimap.h index 2cfeab3270..a44b0b9985 100644 --- a/source/simulation2/components/ICmpMinimap.h +++ b/source/simulation2/components/ICmpMinimap.h @@ -1,4 +1,4 @@ -/* Copyright (C) 2013 Wildfire Games. +/* Copyright (C) 2017 Wildfire Games. * This file is part of 0 A.D. * * 0 A.D. is free software: you can redistribute it and/or modify @@ -33,7 +33,7 @@ public: * If it should not be drawn, returns false; otherwise the arguments are set * to the color and world position. */ - virtual bool GetRenderData(u8& r, u8& g, u8& b, entity_pos_t& x, entity_pos_t& z) = 0; + virtual bool GetRenderData(u8& r, u8& g, u8& b, entity_pos_t& x, entity_pos_t& z) const = 0; /** * Return true if entity is actively pinging based on the current time diff --git a/source/simulation2/components/ICmpObstruction.cpp b/source/simulation2/components/ICmpObstruction.cpp index 3216ae90e4..c348bb8289 100644 --- a/source/simulation2/components/ICmpObstruction.cpp +++ b/source/simulation2/components/ICmpObstruction.cpp @@ -1,4 +1,4 @@ -/* Copyright (C) 2013 Wildfire Games. +/* Copyright (C) 2017 Wildfire Games. * This file is part of 0 A.D. * * 0 A.D. is free software: you can redistribute it and/or modify @@ -23,7 +23,7 @@ #include "simulation2/system/SimContext.h" -std::string ICmpObstruction::CheckFoundation_wrapper(const std::string& className, bool onlyCenterPoint) +std::string ICmpObstruction::CheckFoundation_wrapper(const std::string& className, bool onlyCenterPoint) const { EFoundationCheck check = CheckFoundation(className, onlyCenterPoint); @@ -46,15 +46,15 @@ std::string ICmpObstruction::CheckFoundation_wrapper(const std::string& classNam } BEGIN_INTERFACE_WRAPPER(Obstruction) -DEFINE_INTERFACE_METHOD_0("GetUnitRadius", entity_pos_t, ICmpObstruction, GetUnitRadius) -DEFINE_INTERFACE_METHOD_2("CheckFoundation", std::string, ICmpObstruction, CheckFoundation_wrapper, std::string, bool) -DEFINE_INTERFACE_METHOD_0("CheckDuplicateFoundation", bool, ICmpObstruction, CheckDuplicateFoundation) -DEFINE_INTERFACE_METHOD_0("GetUnitCollisions", std::vector, ICmpObstruction, GetUnitCollisions) +DEFINE_INTERFACE_METHOD_CONST_0("GetUnitRadius", entity_pos_t, ICmpObstruction, GetUnitRadius) +DEFINE_INTERFACE_METHOD_CONST_2("CheckFoundation", std::string, ICmpObstruction, CheckFoundation_wrapper, std::string, bool) +DEFINE_INTERFACE_METHOD_CONST_0("CheckDuplicateFoundation", bool, ICmpObstruction, CheckDuplicateFoundation) +DEFINE_INTERFACE_METHOD_CONST_0("GetUnitCollisions", std::vector, ICmpObstruction, GetUnitCollisions) DEFINE_INTERFACE_METHOD_1("SetActive", void, ICmpObstruction, SetActive, bool) DEFINE_INTERFACE_METHOD_3("SetDisableBlockMovementPathfinding", void, ICmpObstruction, SetDisableBlockMovementPathfinding, bool, bool, int32_t) -DEFINE_INTERFACE_METHOD_0("GetBlockMovementFlag", bool, ICmpObstruction, GetBlockMovementFlag) +DEFINE_INTERFACE_METHOD_CONST_0("GetBlockMovementFlag", bool, ICmpObstruction, GetBlockMovementFlag) DEFINE_INTERFACE_METHOD_1("SetControlGroup", void, ICmpObstruction, SetControlGroup, entity_id_t) -DEFINE_INTERFACE_METHOD_0("GetControlGroup", entity_id_t, ICmpObstruction, GetControlGroup) +DEFINE_INTERFACE_METHOD_CONST_0("GetControlGroup", entity_id_t, ICmpObstruction, GetControlGroup) DEFINE_INTERFACE_METHOD_1("SetControlGroup2", void, ICmpObstruction, SetControlGroup2, entity_id_t) -DEFINE_INTERFACE_METHOD_0("GetControlGroup2", entity_id_t, ICmpObstruction, GetControlGroup2) +DEFINE_INTERFACE_METHOD_CONST_0("GetControlGroup2", entity_id_t, ICmpObstruction, GetControlGroup2) END_INTERFACE_WRAPPER(Obstruction) diff --git a/source/simulation2/components/ICmpObstruction.h b/source/simulation2/components/ICmpObstruction.h index a3375021c2..5f796242cd 100644 --- a/source/simulation2/components/ICmpObstruction.h +++ b/source/simulation2/components/ICmpObstruction.h @@ -1,4 +1,4 @@ -/* Copyright (C) 2015 Wildfire Games. +/* Copyright (C) 2017 Wildfire Games. * This file is part of 0 A.D. * * 0 A.D. is free software: you can redistribute it and/or modify @@ -38,27 +38,27 @@ public: FOUNDATION_CHECK_FAIL_TERRAIN_CLASS }; - virtual ICmpObstructionManager::tag_t GetObstruction() = 0; + virtual ICmpObstructionManager::tag_t GetObstruction() const = 0; /** * Gets the square corresponding to this obstruction shape. * @return true and updates @p out on success; * false on failure (e.g. object not in the world). */ - virtual bool GetObstructionSquare(ICmpObstructionManager::ObstructionSquare& out) = 0; + virtual bool GetObstructionSquare(ICmpObstructionManager::ObstructionSquare& out) const = 0; /** * Same as the method above, but returns an obstruction shape for the previous turn */ - virtual bool GetPreviousObstructionSquare(ICmpObstructionManager::ObstructionSquare& out) = 0; + virtual bool GetPreviousObstructionSquare(ICmpObstructionManager::ObstructionSquare& out) const = 0; - virtual entity_pos_t GetSize() = 0; + virtual entity_pos_t GetSize() const = 0; - virtual entity_pos_t GetUnitRadius() = 0; + virtual entity_pos_t GetUnitRadius() const = 0; virtual void SetUnitClearance(const entity_pos_t& clearance) = 0; - virtual bool IsControlPersistent() = 0; + virtual bool IsControlPersistent() const = 0; /** * Test whether this entity is colliding with any obstruction that are set to @@ -67,33 +67,33 @@ public: * @return FOUNDATION_CHECK_SUCCESS if check passes, else an EFoundationCheck * value describing the type of failure. */ - virtual EFoundationCheck CheckFoundation(std::string className) = 0; - virtual EFoundationCheck CheckFoundation(std::string className, bool onlyCenterPoint) = 0; + virtual EFoundationCheck CheckFoundation(const std::string& className) const = 0; + virtual EFoundationCheck CheckFoundation(const std::string& className, bool onlyCenterPoint) const = 0; /** * CheckFoundation wrapper for script calls, to return friendly strings instead of an EFoundationCheck. * @return "success" if check passes, else a string describing the type of failure. */ - virtual std::string CheckFoundation_wrapper(const std::string& className, bool onlyCenterPoint); + virtual std::string CheckFoundation_wrapper(const std::string& className, bool onlyCenterPoint) const; /** * Test whether this entity is colliding with any obstructions that share its * control groups and block the creation of foundations. * @return true if foundation is valid (not obstructed) */ - virtual bool CheckDuplicateFoundation() = 0; + virtual bool CheckDuplicateFoundation() const = 0; /** * Returns a list of units that are colliding with this entity, * @return vector of blocking units */ - virtual std::vector GetUnitCollisions() = 0; + virtual std::vector GetUnitCollisions() const = 0; /** * Detects collisions between foundation-blocking entities and * tries to fix them by setting control groups, if appropriate. */ - virtual void ResolveFoundationCollisions() = 0; + virtual void ResolveFoundationCollisions() const = 0; virtual void SetActive(bool active) = 0; @@ -101,7 +101,7 @@ public: virtual void SetDisableBlockMovementPathfinding(bool movementDisabled, bool pathfindingDisabled, int32_t shape) = 0; - virtual bool GetBlockMovementFlag() = 0; + virtual bool GetBlockMovementFlag() const = 0; /** * Change the control group that the entity belongs to. @@ -111,10 +111,10 @@ public: virtual void SetControlGroup(entity_id_t group) = 0; /// See SetControlGroup. - virtual entity_id_t GetControlGroup() = 0; + virtual entity_id_t GetControlGroup() const = 0; virtual void SetControlGroup2(entity_id_t group2) = 0; - virtual entity_id_t GetControlGroup2() = 0; + virtual entity_id_t GetControlGroup2() const = 0; DECLARE_INTERFACE_TYPE(Obstruction) }; diff --git a/source/simulation2/components/ICmpObstructionManager.h b/source/simulation2/components/ICmpObstructionManager.h index 5907eb9dc2..054099cbe1 100644 --- a/source/simulation2/components/ICmpObstructionManager.h +++ b/source/simulation2/components/ICmpObstructionManager.h @@ -1,4 +1,4 @@ -/* Copyright (C) 2015 Wildfire Games. +/* Copyright (C) 2017 Wildfire Games. * This file is part of 0 A.D. * * 0 A.D. is free software: you can redistribute it and/or modify @@ -61,7 +61,7 @@ public: { tag_t() : n(0) {} explicit tag_t(u32 n) : n(n) {} - bool valid() { return n != 0; } + bool valid() const { return n != 0; } u32 n; }; @@ -171,7 +171,7 @@ public: * @param relaxClearanceForUnits whether unit-unit collisions should be more permissive. * @return true if there is a collision */ - virtual bool TestLine(const IObstructionTestFilter& filter, entity_pos_t x0, entity_pos_t z0, entity_pos_t x1, entity_pos_t z1, entity_pos_t r, bool relaxClearanceForUnits) = 0; + virtual bool TestLine(const IObstructionTestFilter& filter, entity_pos_t x0, entity_pos_t z0, entity_pos_t x1, entity_pos_t z1, entity_pos_t r, bool relaxClearanceForUnits) const = 0; /** * Collision test a static square shape against the current set of shapes. @@ -186,7 +186,7 @@ public: */ virtual bool TestStaticShape(const IObstructionTestFilter& filter, entity_pos_t x, entity_pos_t z, entity_pos_t a, entity_pos_t w, entity_pos_t h, - std::vector* out) = 0; + std::vector* out) const = 0; /** * Collision test a unit shape against the current set of registered shapes, and optionally writes a list of the colliding @@ -202,7 +202,7 @@ public: */ virtual bool TestUnitShape(const IObstructionTestFilter& filter, entity_pos_t x, entity_pos_t z, entity_pos_t clearance, - std::vector* out) = 0; + std::vector* out) const = 0; /** * Convert the current set of shapes onto a navcell grid, for all passability classes contained in @p passClasses. @@ -237,9 +237,9 @@ public: * @param z1 Z coordinate of top edge of range * @param squares output list of obstructions */ - virtual void GetObstructionsInRange(const IObstructionTestFilter& filter, entity_pos_t x0, entity_pos_t z0, entity_pos_t x1, entity_pos_t z1, std::vector& squares) = 0; - virtual void GetStaticObstructionsInRange(const IObstructionTestFilter& filter, entity_pos_t x0, entity_pos_t z0, entity_pos_t x1, entity_pos_t z1, std::vector& squares) = 0; - virtual void GetUnitObstructionsInRange(const IObstructionTestFilter& filter, entity_pos_t x0, entity_pos_t z0, entity_pos_t x1, entity_pos_t z1, std::vector& squares) = 0; + virtual void GetObstructionsInRange(const IObstructionTestFilter& filter, entity_pos_t x0, entity_pos_t z0, entity_pos_t x1, entity_pos_t z1, std::vector& squares) const = 0; + virtual void GetStaticObstructionsInRange(const IObstructionTestFilter& filter, entity_pos_t x0, entity_pos_t z0, entity_pos_t x1, entity_pos_t z1, std::vector& squares) const = 0; + virtual void GetUnitObstructionsInRange(const IObstructionTestFilter& filter, entity_pos_t x0, entity_pos_t z0, entity_pos_t x1, entity_pos_t z1, std::vector& squares) const = 0; /** * Returns the entity IDs of all unit shapes that intersect the given @@ -249,17 +249,17 @@ public: * @param filter filter for the obstructing units * @param strict whether to be strict in the check or more permissive (ie rasterize more or less). Default false. */ - virtual void GetUnitsOnObstruction(const ObstructionSquare& square, std::vector& out, const IObstructionTestFilter& filter, bool strict = false) = 0; + virtual void GetUnitsOnObstruction(const ObstructionSquare& square, std::vector& out, const IObstructionTestFilter& filter, bool strict = false) const = 0; /** * Get the obstruction square representing the given shape. * @param tag tag of shape (must be valid) */ - virtual ObstructionSquare GetObstruction(tag_t tag) = 0; + virtual ObstructionSquare GetObstruction(tag_t tag) const = 0; - virtual ObstructionSquare GetUnitShapeObstruction(entity_pos_t x, entity_pos_t z, entity_pos_t clearance) = 0; + virtual ObstructionSquare GetUnitShapeObstruction(entity_pos_t x, entity_pos_t z, entity_pos_t clearance) const = 0; - virtual ObstructionSquare GetStaticShapeObstruction(entity_pos_t x, entity_pos_t z, entity_angle_t a, entity_pos_t w, entity_pos_t h) = 0; + virtual ObstructionSquare GetStaticShapeObstruction(entity_pos_t x, entity_pos_t z, entity_angle_t a, entity_pos_t w, entity_pos_t h) const = 0; /** * Set the passability to be restricted to a circular map. diff --git a/source/simulation2/components/ICmpOwnership.cpp b/source/simulation2/components/ICmpOwnership.cpp index 1887da7bab..debe2cb3a4 100644 --- a/source/simulation2/components/ICmpOwnership.cpp +++ b/source/simulation2/components/ICmpOwnership.cpp @@ -1,4 +1,4 @@ -/* Copyright (C) 2010 Wildfire Games. +/* Copyright (C) 2017 Wildfire Games. * This file is part of 0 A.D. * * 0 A.D. is free software: you can redistribute it and/or modify @@ -22,7 +22,7 @@ #include "simulation2/system/InterfaceScripted.h" BEGIN_INTERFACE_WRAPPER(Ownership) -DEFINE_INTERFACE_METHOD_0("GetOwner", player_id_t, ICmpOwnership, GetOwner) +DEFINE_INTERFACE_METHOD_CONST_0("GetOwner", player_id_t, ICmpOwnership, GetOwner) DEFINE_INTERFACE_METHOD_1("SetOwner", void, ICmpOwnership, SetOwner, player_id_t) DEFINE_INTERFACE_METHOD_1("SetOwnerQuiet", void, ICmpOwnership, SetOwnerQuiet, player_id_t) END_INTERFACE_WRAPPER(Ownership) diff --git a/source/simulation2/components/ICmpOwnership.h b/source/simulation2/components/ICmpOwnership.h index ed49f081c7..9e253a255a 100644 --- a/source/simulation2/components/ICmpOwnership.h +++ b/source/simulation2/components/ICmpOwnership.h @@ -1,4 +1,4 @@ -/* Copyright (C) 2010 Wildfire Games. +/* Copyright (C) 2017 Wildfire Games. * This file is part of 0 A.D. * * 0 A.D. is free software: you can redistribute it and/or modify @@ -29,7 +29,7 @@ class ICmpOwnership : public IComponent { public: - virtual player_id_t GetOwner() = 0; + virtual player_id_t GetOwner() const = 0; virtual void SetOwner(player_id_t playerID) = 0; diff --git a/source/simulation2/components/ICmpPathfinder.h b/source/simulation2/components/ICmpPathfinder.h index b2b559c55d..306e133e20 100644 --- a/source/simulation2/components/ICmpPathfinder.h +++ b/source/simulation2/components/ICmpPathfinder.h @@ -1,4 +1,4 @@ -/* Copyright (C) 2015 Wildfire Games. +/* Copyright (C) 2017 Wildfire Games. * This file is part of 0 A.D. * * 0 A.D. is free software: you can redistribute it and/or modify @@ -66,7 +66,7 @@ public: * Get the tag for a given passability class name. * Logs an error and returns something acceptable if the name is unrecognised. */ - virtual pass_class_t GetPassabilityClass(const std::string& name) = 0; + virtual pass_class_t GetPassabilityClass(const std::string& name) const = 0; virtual entity_pos_t GetClearance(pass_class_t passClass) const = 0; @@ -129,7 +129,7 @@ public: * or impassable terrain. * Returns true if the movement is okay. */ - virtual bool CheckMovement(const IObstructionTestFilter& filter, entity_pos_t x0, entity_pos_t z0, entity_pos_t x1, entity_pos_t z1, entity_pos_t r, pass_class_t passClass) = 0; + virtual bool CheckMovement(const IObstructionTestFilter& filter, entity_pos_t x0, entity_pos_t z0, entity_pos_t x1, entity_pos_t z1, entity_pos_t r, pass_class_t passClass) const = 0; /** * Check whether a unit placed here is valid and doesn't hit any obstructions @@ -138,7 +138,7 @@ public: * @return ICmpObstruction::FOUNDATION_CHECK_SUCCESS if the placement is okay, else * a value describing the type of failure. */ - virtual ICmpObstruction::EFoundationCheck CheckUnitPlacement(const IObstructionTestFilter& filter, entity_pos_t x, entity_pos_t z, entity_pos_t r, pass_class_t passClass, bool onlyCenterPoint = false) = 0; + virtual ICmpObstruction::EFoundationCheck CheckUnitPlacement(const IObstructionTestFilter& filter, entity_pos_t x, entity_pos_t z, entity_pos_t r, pass_class_t passClass, bool onlyCenterPoint = false) const = 0; /** * Check whether a building placed here is valid and doesn't hit any obstructions @@ -146,7 +146,7 @@ public: * @return ICmpObstruction::FOUNDATION_CHECK_SUCCESS if the placement is okay, else * a value describing the type of failure. */ - virtual ICmpObstruction::EFoundationCheck CheckBuildingPlacement(const IObstructionTestFilter& filter, entity_pos_t x, entity_pos_t z, entity_pos_t a, entity_pos_t w, entity_pos_t h, entity_id_t id, pass_class_t passClass) = 0; + virtual ICmpObstruction::EFoundationCheck CheckBuildingPlacement(const IObstructionTestFilter& filter, entity_pos_t x, entity_pos_t z, entity_pos_t a, entity_pos_t w, entity_pos_t h, entity_id_t id, pass_class_t passClass) const = 0; /** * Check whether a building placed here is valid and doesn't hit any obstructions @@ -155,7 +155,7 @@ public: * @return ICmpObstruction::FOUNDATION_CHECK_SUCCESS if the placement is okay, else * a value describing the type of failure. */ - virtual ICmpObstruction::EFoundationCheck CheckBuildingPlacement(const IObstructionTestFilter& filter, entity_pos_t x, entity_pos_t z, entity_pos_t a, entity_pos_t w, entity_pos_t h, entity_id_t id, pass_class_t passClass, bool onlyCenterPoint) = 0; + virtual ICmpObstruction::EFoundationCheck CheckBuildingPlacement(const IObstructionTestFilter& filter, entity_pos_t x, entity_pos_t z, entity_pos_t a, entity_pos_t w, entity_pos_t h, entity_id_t id, pass_class_t passClass, bool onlyCenterPoint) const = 0; /** @@ -186,7 +186,7 @@ public: /** * Returns some stats about the last ComputePath. */ - virtual void GetDebugData(u32& steps, double& time, Grid& grid) = 0; + virtual void GetDebugData(u32& steps, double& time, Grid& grid) const = 0; /** * Sets up the pathfinder passability overlay in Atlas. diff --git a/source/simulation2/components/ICmpPosition.cpp b/source/simulation2/components/ICmpPosition.cpp index 194c10ae2f..af44ae16b1 100644 --- a/source/simulation2/components/ICmpPosition.cpp +++ b/source/simulation2/components/ICmpPosition.cpp @@ -1,4 +1,4 @@ -/* Copyright (C) 2011 Wildfire Games. +/* Copyright (C) 2017 Wildfire Games. * This file is part of 0 A.D. * * 0 A.D. is free software: you can redistribute it and/or modify @@ -23,28 +23,28 @@ BEGIN_INTERFACE_WRAPPER(Position) DEFINE_INTERFACE_METHOD_2("SetTurretParent", void, ICmpPosition, SetTurretParent, entity_id_t, CFixedVector3D) -DEFINE_INTERFACE_METHOD_0("GetTurretParent", entity_id_t, ICmpPosition, GetTurretParent) -DEFINE_INTERFACE_METHOD_0("IsInWorld", bool, ICmpPosition, IsInWorld) +DEFINE_INTERFACE_METHOD_CONST_0("GetTurretParent", entity_id_t, ICmpPosition, GetTurretParent) +DEFINE_INTERFACE_METHOD_CONST_0("IsInWorld", bool, ICmpPosition, IsInWorld) DEFINE_INTERFACE_METHOD_0("MoveOutOfWorld", void, ICmpPosition, MoveOutOfWorld) DEFINE_INTERFACE_METHOD_2("MoveTo", void, ICmpPosition, MoveTo, entity_pos_t, entity_pos_t) DEFINE_INTERFACE_METHOD_3("MoveAndTurnTo", void, ICmpPosition, MoveAndTurnTo, entity_pos_t, entity_pos_t, entity_pos_t) DEFINE_INTERFACE_METHOD_2("JumpTo", void, ICmpPosition, JumpTo, entity_pos_t, entity_pos_t) DEFINE_INTERFACE_METHOD_1("SetHeightOffset", void, ICmpPosition, SetHeightOffset, entity_pos_t) -DEFINE_INTERFACE_METHOD_0("GetHeightOffset", entity_pos_t, ICmpPosition, GetHeightOffset) +DEFINE_INTERFACE_METHOD_CONST_0("GetHeightOffset", entity_pos_t, ICmpPosition, GetHeightOffset) DEFINE_INTERFACE_METHOD_1("SetHeightFixed", void, ICmpPosition, SetHeightFixed, entity_pos_t) -DEFINE_INTERFACE_METHOD_0("GetHeightFixed", entity_pos_t, ICmpPosition, GetHeightFixed) -DEFINE_INTERFACE_METHOD_0("IsHeightRelative", bool, ICmpPosition, IsHeightRelative) +DEFINE_INTERFACE_METHOD_CONST_0("GetHeightFixed", entity_pos_t, ICmpPosition, GetHeightFixed) +DEFINE_INTERFACE_METHOD_CONST_0("IsHeightRelative", bool, ICmpPosition, IsHeightRelative) DEFINE_INTERFACE_METHOD_1("SetHeightRelative", void, ICmpPosition, SetHeightRelative, bool) -DEFINE_INTERFACE_METHOD_0("IsFloating", bool, ICmpPosition, IsFloating) +DEFINE_INTERFACE_METHOD_CONST_0("IsFloating", bool, ICmpPosition, IsFloating) DEFINE_INTERFACE_METHOD_1("SetFloating", void, ICmpPosition, SetFloating, bool) DEFINE_INTERFACE_METHOD_1("SetConstructionProgress", void, ICmpPosition, SetConstructionProgress, fixed) -DEFINE_INTERFACE_METHOD_0("GetPosition", CFixedVector3D, ICmpPosition, GetPosition) -DEFINE_INTERFACE_METHOD_0("GetPosition2D", CFixedVector2D, ICmpPosition, GetPosition2D) -DEFINE_INTERFACE_METHOD_0("GetPreviousPosition", CFixedVector3D, ICmpPosition, GetPreviousPosition) -DEFINE_INTERFACE_METHOD_0("GetPreviousPosition2D", CFixedVector2D, ICmpPosition, GetPreviousPosition2D) +DEFINE_INTERFACE_METHOD_CONST_0("GetPosition", CFixedVector3D, ICmpPosition, GetPosition) +DEFINE_INTERFACE_METHOD_CONST_0("GetPosition2D", CFixedVector2D, ICmpPosition, GetPosition2D) +DEFINE_INTERFACE_METHOD_CONST_0("GetPreviousPosition", CFixedVector3D, ICmpPosition, GetPreviousPosition) +DEFINE_INTERFACE_METHOD_CONST_0("GetPreviousPosition2D", CFixedVector2D, ICmpPosition, GetPreviousPosition2D) DEFINE_INTERFACE_METHOD_1("TurnTo", void, ICmpPosition, TurnTo, entity_angle_t) DEFINE_INTERFACE_METHOD_1("SetYRotation", void, ICmpPosition, SetYRotation, entity_angle_t) DEFINE_INTERFACE_METHOD_2("SetXZRotation", void, ICmpPosition, SetXZRotation, entity_angle_t, entity_angle_t) -DEFINE_INTERFACE_METHOD_0("GetRotation", CFixedVector3D, ICmpPosition, GetRotation) +DEFINE_INTERFACE_METHOD_CONST_0("GetRotation", CFixedVector3D, ICmpPosition, GetRotation) // Excluded: GetInterpolatedTransform (not safe for scripts) END_INTERFACE_WRAPPER(Position) diff --git a/source/simulation2/components/ICmpPosition.h b/source/simulation2/components/ICmpPosition.h index 44d4f7f645..f76b19d89c 100644 --- a/source/simulation2/components/ICmpPosition.h +++ b/source/simulation2/components/ICmpPosition.h @@ -1,4 +1,4 @@ -/* Copyright (C) 2014 Wildfire Games. +/* Copyright (C) 2017 Wildfire Games. * This file is part of 0 A.D. * * 0 A.D. is free software: you can redistribute it and/or modify @@ -68,7 +68,7 @@ public: /** * Get the turret parent of this entity */ - virtual entity_id_t GetTurretParent() = 0; + virtual entity_id_t GetTurretParent() const = 0; /** * Has to be called to update the simulation position of the turret @@ -83,7 +83,7 @@ public: /** * Returns true if the entity currently exists at a defined position in the world. */ - virtual bool IsInWorld() = 0; + virtual bool IsInWorld() const = 0; /** * Causes IsInWorld to return false. (Use MoveTo() or JumpTo() to move back into the world.) @@ -113,7 +113,7 @@ public: /** * Returns the current vertical offset above the terrain/water surface. */ - virtual entity_pos_t GetHeightOffset() = 0; + virtual entity_pos_t GetHeightOffset() const = 0; /** * Set the vertical position above the map zero point @@ -123,12 +123,12 @@ public: /** * Returns the vertical offset above the map zero point */ - virtual entity_pos_t GetHeightFixed() = 0; + virtual entity_pos_t GetHeightFixed() const = 0; /** * Returns true iff the entity will follow the terrain height (possibly with an offset) */ - virtual bool IsHeightRelative() = 0; + virtual bool IsHeightRelative() const = 0; /** * When set to true, the entity will follow the terrain height (possibly with an offset) @@ -139,7 +139,7 @@ public: /** * Returns whether the entity floats on water. */ - virtual bool IsFloating() = 0; + virtual bool IsFloating() const = 0; /** * Set the entity to float on water @@ -163,26 +163,26 @@ public: * Depends on the current terrain heightmap. * Must not be called unless IsInWorld is true. */ - virtual CFixedVector3D GetPosition() = 0; + virtual CFixedVector3D GetPosition() const = 0; /** * Returns the current x,z position (no interpolation). * Must not be called unless IsInWorld is true. */ - virtual CFixedVector2D GetPosition2D() = 0; + virtual CFixedVector2D GetPosition2D() const = 0; /** * Returns the previous turn's x,y,z position (no interpolation). * Depends on the current terrain heightmap. * Must not be called unless IsInWorld is true. */ - virtual CFixedVector3D GetPreviousPosition() = 0; + virtual CFixedVector3D GetPreviousPosition() const = 0; /** * Returns the previous turn's x,z position (no interpolation). * Must not be called unless IsInWorld is true. */ - virtual CFixedVector2D GetPreviousPosition2D() = 0; + virtual CFixedVector2D GetPreviousPosition2D() const = 0; /** * Rotate smoothly to the given angle around the upwards axis. @@ -212,25 +212,25 @@ public: * Returns the current rotation (relative to the upwards axis), as Euler * angles with X=pitch, Y=yaw, Z=roll. (TODO: is that the right way round?) */ - virtual CFixedVector3D GetRotation() = 0; + virtual CFixedVector3D GetRotation() const = 0; /** * Returns the distance that the unit will be interpolated over, * i.e. the distance travelled since the start of the turn. */ - virtual fixed GetDistanceTravelled() = 0; + virtual fixed GetDistanceTravelled() const = 0; /** * Get the current interpolated 2D position and orientation, for rendering. * Must not be called unless IsInWorld is true. */ - virtual void GetInterpolatedPosition2D(float frameOffset, float& x, float& z, float& rotY) = 0; + virtual void GetInterpolatedPosition2D(float frameOffset, float& x, float& z, float& rotY) const = 0; /** * Get the current interpolated transform matrix, for rendering. * Must not be called unless IsInWorld is true. */ - virtual CMatrix3D GetInterpolatedTransform(float frameOffset) = 0; + virtual CMatrix3D GetInterpolatedTransform(float frameOffset) const = 0; DECLARE_INTERFACE_TYPE(Position) }; diff --git a/source/simulation2/components/ICmpRallyPointRenderer.cpp b/source/simulation2/components/ICmpRallyPointRenderer.cpp index 7cba039fa2..3ef6b04966 100644 --- a/source/simulation2/components/ICmpRallyPointRenderer.cpp +++ b/source/simulation2/components/ICmpRallyPointRenderer.cpp @@ -1,4 +1,4 @@ -/* Copyright (C) 2014 Wildfire Games. +/* Copyright (C) 2017 Wildfire Games. * This file is part of 0 A.D. * * 0 A.D. is free software: you can redistribute it and/or modify @@ -28,5 +28,5 @@ DEFINE_INTERFACE_METHOD_1("SetPosition", void, ICmpRallyPointRenderer, SetPositi DEFINE_INTERFACE_METHOD_2("UpdatePosition", void, ICmpRallyPointRenderer, UpdatePosition, u32, CFixedVector2D) DEFINE_INTERFACE_METHOD_1("AddPosition", void, ICmpRallyPointRenderer, AddPosition_wrapper, CFixedVector2D) DEFINE_INTERFACE_METHOD_0("Reset", void, ICmpRallyPointRenderer, Reset) -DEFINE_INTERFACE_METHOD_0("IsSet", bool, ICmpRallyPointRenderer, IsSet) +DEFINE_INTERFACE_METHOD_CONST_0("IsSet", bool, ICmpRallyPointRenderer, IsSet) END_INTERFACE_WRAPPER(RallyPointRenderer) diff --git a/source/simulation2/components/ICmpRallyPointRenderer.h b/source/simulation2/components/ICmpRallyPointRenderer.h index 38f070d2b8..50629f2bc6 100644 --- a/source/simulation2/components/ICmpRallyPointRenderer.h +++ b/source/simulation2/components/ICmpRallyPointRenderer.h @@ -1,4 +1,4 @@ -/* Copyright (C) 2014 Wildfire Games. +/* Copyright (C) 2017 Wildfire Games. * This file is part of 0 A.D. * * 0 A.D. is free software: you can redistribute it and/or modify @@ -48,7 +48,7 @@ public: virtual void Reset() = 0; /// Returns true if at least one display rally point is set - virtual bool IsSet() = 0; + virtual bool IsSet() const = 0; DECLARE_INTERFACE_TYPE(RallyPointRenderer) }; diff --git a/source/simulation2/components/ICmpRangeManager.cpp b/source/simulation2/components/ICmpRangeManager.cpp index afd9a392cb..1414c69e87 100644 --- a/source/simulation2/components/ICmpRangeManager.cpp +++ b/source/simulation2/components/ICmpRangeManager.cpp @@ -21,7 +21,7 @@ #include "simulation2/system/InterfaceScripted.h" -std::string ICmpRangeManager::GetLosVisibility_wrapper(entity_id_t ent, int player) +std::string ICmpRangeManager::GetLosVisibility_wrapper(entity_id_t ent, int player) const { ELosVisibility visibility = GetLosVisibility(ent, player); switch (visibility) @@ -41,24 +41,24 @@ DEFINE_INTERFACE_METHOD_7("CreateActiveParabolicQuery", ICmpRangeManager::tag_t, DEFINE_INTERFACE_METHOD_1("DestroyActiveQuery", void, ICmpRangeManager, DestroyActiveQuery, ICmpRangeManager::tag_t) DEFINE_INTERFACE_METHOD_1("EnableActiveQuery", void, ICmpRangeManager, EnableActiveQuery, ICmpRangeManager::tag_t) DEFINE_INTERFACE_METHOD_1("DisableActiveQuery", void, ICmpRangeManager, DisableActiveQuery, ICmpRangeManager::tag_t) -DEFINE_INTERFACE_METHOD_1("IsActiveQueryEnabled", bool, ICmpRangeManager, IsActiveQueryEnabled, ICmpRangeManager::tag_t) +DEFINE_INTERFACE_METHOD_CONST_1("IsActiveQueryEnabled", bool, ICmpRangeManager, IsActiveQueryEnabled, ICmpRangeManager::tag_t) DEFINE_INTERFACE_METHOD_1("ResetActiveQuery", std::vector, ICmpRangeManager, ResetActiveQuery, ICmpRangeManager::tag_t) DEFINE_INTERFACE_METHOD_3("SetEntityFlag", void, ICmpRangeManager, SetEntityFlag, entity_id_t, std::string, bool) -DEFINE_INTERFACE_METHOD_1("GetEntityFlagMask", u8, ICmpRangeManager, GetEntityFlagMask, std::string) -DEFINE_INTERFACE_METHOD_1("GetEntitiesByPlayer", std::vector, ICmpRangeManager, GetEntitiesByPlayer, player_id_t) -DEFINE_INTERFACE_METHOD_0("GetNonGaiaEntities", std::vector, ICmpRangeManager, GetNonGaiaEntities) +DEFINE_INTERFACE_METHOD_CONST_1("GetEntityFlagMask", u8, ICmpRangeManager, GetEntityFlagMask, std::string) +DEFINE_INTERFACE_METHOD_CONST_1("GetEntitiesByPlayer", std::vector, ICmpRangeManager, GetEntitiesByPlayer, player_id_t) +DEFINE_INTERFACE_METHOD_CONST_0("GetNonGaiaEntities", std::vector, ICmpRangeManager, GetNonGaiaEntities) DEFINE_INTERFACE_METHOD_1("SetDebugOverlay", void, ICmpRangeManager, SetDebugOverlay, bool) DEFINE_INTERFACE_METHOD_1("ExploreAllTiles", void, ICmpRangeManager, ExploreAllTiles, player_id_t) DEFINE_INTERFACE_METHOD_0("ExploreTerritories", void, ICmpRangeManager, ExploreTerritories) DEFINE_INTERFACE_METHOD_2("SetLosRevealAll", void, ICmpRangeManager, SetLosRevealAll, player_id_t, bool) -DEFINE_INTERFACE_METHOD_1("GetLosRevealAll", bool, ICmpRangeManager, GetLosRevealAll, player_id_t) -DEFINE_INTERFACE_METHOD_5("GetElevationAdaptedRange", entity_pos_t, ICmpRangeManager, GetElevationAdaptedRange, CFixedVector3D, CFixedVector3D, entity_pos_t, entity_pos_t, entity_pos_t) +DEFINE_INTERFACE_METHOD_CONST_1("GetLosRevealAll", bool, ICmpRangeManager, GetLosRevealAll, player_id_t) +DEFINE_INTERFACE_METHOD_CONST_5("GetElevationAdaptedRange", entity_pos_t, ICmpRangeManager, GetElevationAdaptedRange, CFixedVector3D, CFixedVector3D, entity_pos_t, entity_pos_t, entity_pos_t) DEFINE_INTERFACE_METHOD_2("ActivateScriptedVisibility", void, ICmpRangeManager, ActivateScriptedVisibility, entity_id_t, bool) -DEFINE_INTERFACE_METHOD_2("GetLosVisibility", std::string, ICmpRangeManager, GetLosVisibility_wrapper, entity_id_t, player_id_t) +DEFINE_INTERFACE_METHOD_CONST_2("GetLosVisibility", std::string, ICmpRangeManager, GetLosVisibility_wrapper, entity_id_t, player_id_t) DEFINE_INTERFACE_METHOD_1("RequestVisibilityUpdate", void, ICmpRangeManager, RequestVisibilityUpdate, entity_id_t) DEFINE_INTERFACE_METHOD_1("SetLosCircular", void, ICmpRangeManager, SetLosCircular, bool) -DEFINE_INTERFACE_METHOD_0("GetLosCircular", bool, ICmpRangeManager, GetLosCircular) +DEFINE_INTERFACE_METHOD_CONST_0("GetLosCircular", bool, ICmpRangeManager, GetLosCircular) DEFINE_INTERFACE_METHOD_2("SetSharedLos", void, ICmpRangeManager, SetSharedLos, player_id_t, std::vector) -DEFINE_INTERFACE_METHOD_1("GetPercentMapExplored", u8, ICmpRangeManager, GetPercentMapExplored, player_id_t) -DEFINE_INTERFACE_METHOD_1("GetUnionPercentMapExplored", u8, ICmpRangeManager, GetUnionPercentMapExplored, std::vector) +DEFINE_INTERFACE_METHOD_CONST_1("GetPercentMapExplored", u8, ICmpRangeManager, GetPercentMapExplored, player_id_t) +DEFINE_INTERFACE_METHOD_CONST_1("GetUnionPercentMapExplored", u8, ICmpRangeManager, GetUnionPercentMapExplored, std::vector) END_INTERFACE_WRAPPER(RangeManager) diff --git a/source/simulation2/components/ICmpRangeManager.h b/source/simulation2/components/ICmpRangeManager.h index f84b05c035..6eff60c9c4 100644 --- a/source/simulation2/components/ICmpRangeManager.h +++ b/source/simulation2/components/ICmpRangeManager.h @@ -1,4 +1,4 @@ -/* Copyright (C) 2016 Wildfire Games. +/* Copyright (C) 2017 Wildfire Games. * This file is part of 0 A.D. * * 0 A.D. is free software: you can redistribute it and/or modify @@ -149,7 +149,7 @@ public: * @param range the distance to compare terrain height with * @return a fixed number representing the average difference. It's positive when the entity is on average higher than the terrain surrounding it. */ - virtual entity_pos_t GetElevationAdaptedRange(const CFixedVector3D& pos, const CFixedVector3D& rot, entity_pos_t range, entity_pos_t elevationBonus, entity_pos_t angle) = 0; + virtual entity_pos_t GetElevationAdaptedRange(const CFixedVector3D& pos, const CFixedVector3D& rot, entity_pos_t range, entity_pos_t elevationBonus, entity_pos_t angle) const = 0; /** * Destroy a query and clean up resources. This must be called when an entity no longer needs its @@ -174,7 +174,7 @@ public: * Check if the processing of a query is enabled. * @param tag identifier of a query. */ - virtual bool IsActiveQueryEnabled(tag_t tag) = 0; + virtual bool IsActiveQueryEnabled(tag_t tag) const = 0; /** * Immediately execute a query, and re-enable it if disabled. @@ -191,12 +191,12 @@ public: * Maybe it should be extended to be more like ExecuteQuery without * the range parameter.) */ - virtual std::vector GetEntitiesByPlayer(player_id_t player) = 0; + virtual std::vector GetEntitiesByPlayer(player_id_t player) const = 0; /** * Returns a list of all entities of all players except gaia. */ - virtual std::vector GetNonGaiaEntities() = 0; + virtual std::vector GetNonGaiaEntities() const = 0; /** * Toggle the rendering of debug info. @@ -206,7 +206,7 @@ public: /** * Returns the mask for the specified identifier. */ - virtual u8 GetEntityFlagMask(const std::string& identifier) = 0; + virtual u8 GetEntityFlagMask(const std::string& identifier) const = 0; /** * Set the flag specified by the identifier to the supplied value for the entity @@ -256,7 +256,7 @@ public: /** * Returns whether the given vertex is visible (i.e. is within a unit's LOS). */ - inline bool IsVisible(ssize_t i, ssize_t j) + inline bool IsVisible(ssize_t i, ssize_t j) const { if (!(i >= 0 && j >= 0 && i < m_VerticesPerSide && j < m_VerticesPerSide)) return false; @@ -271,7 +271,7 @@ public: /** * Returns whether the given vertex is explored (i.e. was (or still is) within a unit's LOS). */ - inline bool IsExplored(ssize_t i, ssize_t j) + inline bool IsExplored(ssize_t i, ssize_t j) const { if (!(i >= 0 && j >= 0 && i < m_VerticesPerSide && j < m_VerticesPerSide)) return false; @@ -287,7 +287,7 @@ public: * Returns whether the given vertex is visible (i.e. is within a unit's LOS). * i and j must be in the range [0, verticesPerSide), else behaviour is undefined. */ - inline bool IsVisible_UncheckedRange(ssize_t i, ssize_t j) + inline bool IsVisible_UncheckedRange(ssize_t i, ssize_t j) const { #ifndef NDEBUG ENSURE(i >= 0 && j >= 0 && i < m_VerticesPerSide && j < m_VerticesPerSide); @@ -303,7 +303,7 @@ public: * Returns whether the given vertex is explored (i.e. was (or still is) within a unit's LOS). * i and j must be in the range [0, verticesPerSide), else behaviour is undefined. */ - inline bool IsExplored_UncheckedRange(ssize_t i, ssize_t j) + inline bool IsExplored_UncheckedRange(ssize_t i, ssize_t j) const { #ifndef NDEBUG ENSURE(i >= 0 && j >= 0 && i < m_VerticesPerSide && j < m_VerticesPerSide); @@ -325,7 +325,7 @@ public: * Returns a CLosQuerier for checking whether vertex positions are visible to the given player * (or other players it shares LOS with). */ - virtual CLosQuerier GetLosQuerier(player_id_t player) = 0; + virtual CLosQuerier GetLosQuerier(player_id_t player) const = 0; /** * Toggle the scripted Visibility component activation for entity ent. @@ -337,8 +337,8 @@ public: * Returns VIS_HIDDEN if the entity doesn't exist or is not in the world. * This respects the GetLosRevealAll flag. */ - virtual ELosVisibility GetLosVisibility(CEntityHandle ent, player_id_t player) = 0; - virtual ELosVisibility GetLosVisibility(entity_id_t ent, player_id_t player) = 0; + virtual ELosVisibility GetLosVisibility(CEntityHandle ent, player_id_t player) const = 0; + virtual ELosVisibility GetLosVisibility(entity_id_t ent, player_id_t player) const = 0; /** * Request the update of the visibility cache of ent at next turn. @@ -351,7 +351,7 @@ public: * GetLosVisibility wrapped for script calls. * Returns "hidden", "fogged" or "visible". */ - std::string GetLosVisibility_wrapper(entity_id_t ent, player_id_t player); + std::string GetLosVisibility_wrapper(entity_id_t ent, player_id_t player) const; /** * Explore all tiles (but leave them in the FoW) for player p @@ -381,7 +381,7 @@ public: /** * Returns whether the whole map has been made visible to the given player. */ - virtual bool GetLosRevealAll(player_id_t player) = 0; + virtual bool GetLosRevealAll(player_id_t player) const = 0; /** * Set the LOS to be restricted to a circular map. @@ -391,7 +391,7 @@ public: /** * Returns whether the LOS is restricted to a circular map. */ - virtual bool GetLosCircular() = 0; + virtual bool GetLosCircular() const = 0; /** * Sets shared LOS data for player to the given list of players. @@ -401,18 +401,18 @@ public: /** * Returns shared LOS mask for player. */ - virtual u32 GetSharedLosMask(player_id_t player) = 0; + virtual u32 GetSharedLosMask(player_id_t player) const = 0; /** * Get percent map explored statistics for specified player. */ - virtual u8 GetPercentMapExplored(player_id_t player) = 0; + virtual u8 GetPercentMapExplored(player_id_t player) const = 0; /** * Get percent map explored statistics for specified set of players. * Note: this function computes statistics from scratch and should not be called too often. */ - virtual u8 GetUnionPercentMapExplored(const std::vector& players) = 0; + virtual u8 GetUnionPercentMapExplored(const std::vector& players) const = 0; /** diff --git a/source/simulation2/components/ICmpSelectable.h b/source/simulation2/components/ICmpSelectable.h index dd475e2651..d10f55034e 100644 --- a/source/simulation2/components/ICmpSelectable.h +++ b/source/simulation2/components/ICmpSelectable.h @@ -1,4 +1,4 @@ -/* Copyright (C) 2012 Wildfire Games. +/* Copyright (C) 2017 Wildfire Games. * This file is part of 0 A.D. * * 0 A.D. is free software: you can redistribute it and/or modify @@ -50,7 +50,7 @@ public: /** * Returns true if the entity is only selectable in Atlas editor, e.g. a decorative visual actor. */ - virtual bool IsEditorOnly() = 0; + virtual bool IsEditorOnly() const = 0; /** * Set the selection highlight state. diff --git a/source/simulation2/components/ICmpTemplateManager.cpp b/source/simulation2/components/ICmpTemplateManager.cpp index b2b343cf3e..ffeb279002 100644 --- a/source/simulation2/components/ICmpTemplateManager.cpp +++ b/source/simulation2/components/ICmpTemplateManager.cpp @@ -1,4 +1,4 @@ -/* Copyright (C) 2015 Wildfire Games. +/* Copyright (C) 2017 Wildfire Games. * This file is part of 0 A.D. * * 0 A.D. is free software: you can redistribute it and/or modify @@ -24,8 +24,8 @@ BEGIN_INTERFACE_WRAPPER(TemplateManager) DEFINE_INTERFACE_METHOD_1("GetTemplate", const CParamNode*, ICmpTemplateManager, GetTemplate, std::string) DEFINE_INTERFACE_METHOD_1("GetTemplateWithoutValidation", const CParamNode*, ICmpTemplateManager, GetTemplateWithoutValidation, std::string) -DEFINE_INTERFACE_METHOD_1("TemplateExists", bool, ICmpTemplateManager, TemplateExists, std::string) -DEFINE_INTERFACE_METHOD_1("GetCurrentTemplateName", std::string, ICmpTemplateManager, GetCurrentTemplateName, entity_id_t) -DEFINE_INTERFACE_METHOD_1("FindAllTemplates", std::vector, ICmpTemplateManager, FindAllTemplates, bool) -DEFINE_INTERFACE_METHOD_1("GetEntitiesUsingTemplate", std::vector, ICmpTemplateManager, GetEntitiesUsingTemplate, std::string) +DEFINE_INTERFACE_METHOD_CONST_1("TemplateExists", bool, ICmpTemplateManager, TemplateExists, std::string) +DEFINE_INTERFACE_METHOD_CONST_1("GetCurrentTemplateName", std::string, ICmpTemplateManager, GetCurrentTemplateName, entity_id_t) +DEFINE_INTERFACE_METHOD_CONST_1("FindAllTemplates", std::vector, ICmpTemplateManager, FindAllTemplates, bool) +DEFINE_INTERFACE_METHOD_CONST_1("GetEntitiesUsingTemplate", std::vector, ICmpTemplateManager, GetEntitiesUsingTemplate, std::string) END_INTERFACE_WRAPPER(TemplateManager) diff --git a/source/simulation2/components/ICmpTemplateManager.h b/source/simulation2/components/ICmpTemplateManager.h index db79aeba14..1596a0fc96 100644 --- a/source/simulation2/components/ICmpTemplateManager.h +++ b/source/simulation2/components/ICmpTemplateManager.h @@ -76,7 +76,7 @@ public: /** * Check if the template XML file exists, without trying to load it. */ - virtual bool TemplateExists(const std::string& templateName) = 0; + virtual bool TemplateExists(const std::string& templateName) const = 0; /** * Returns the template most recently specified for the entity 'ent'. @@ -89,21 +89,21 @@ public: /** * Returns the name of the template most recently specified for the entity 'ent'. */ - virtual std::string GetCurrentTemplateName(entity_id_t ent) = 0; + virtual std::string GetCurrentTemplateName(entity_id_t ent) const = 0; /** * Returns the list of entities having the specified template. */ - virtual std::vector GetEntitiesUsingTemplate(const std::string& templateName) = 0; + virtual std::vector GetEntitiesUsingTemplate(const std::string& templateName) const = 0; /** * Returns a list of strings that could be validly passed as @c templateName to LoadTemplate. * (This includes "actor|foo" etc names). * Intended for use by the map editor. This is likely to be quite slow. */ - virtual std::vector FindAllTemplates(bool includeActors) = 0; + virtual std::vector FindAllTemplates(bool includeActors) const = 0; - virtual std::vector FindAllPlaceableTemplates(bool includeActors) = 0; + virtual std::vector FindAllPlaceableTemplates(bool includeActors) const = 0; /** * Permanently disable XML validation (intended solely for test cases). diff --git a/source/simulation2/components/ICmpTerrain.cpp b/source/simulation2/components/ICmpTerrain.cpp index 5e02f358a5..5e92274cd1 100644 --- a/source/simulation2/components/ICmpTerrain.cpp +++ b/source/simulation2/components/ICmpTerrain.cpp @@ -1,4 +1,4 @@ -/* Copyright (C) 2010 Wildfire Games. +/* Copyright (C) 2017 Wildfire Games. * This file is part of 0 A.D. * * 0 A.D. is free software: you can redistribute it and/or modify @@ -22,7 +22,7 @@ #include "simulation2/system/InterfaceScripted.h" BEGIN_INTERFACE_WRAPPER(Terrain) -DEFINE_INTERFACE_METHOD_2("GetGroundLevel", entity_pos_t, ICmpTerrain, GetGroundLevel, entity_pos_t, entity_pos_t) -DEFINE_INTERFACE_METHOD_2("CalcNormal", CFixedVector3D, ICmpTerrain, CalcNormal, entity_pos_t, entity_pos_t) -DEFINE_INTERFACE_METHOD_0("GetTilesPerSide", u16, ICmpTerrain, GetTilesPerSide) +DEFINE_INTERFACE_METHOD_CONST_2("GetGroundLevel", entity_pos_t, ICmpTerrain, GetGroundLevel, entity_pos_t, entity_pos_t) +DEFINE_INTERFACE_METHOD_CONST_2("CalcNormal", CFixedVector3D, ICmpTerrain, CalcNormal, entity_pos_t, entity_pos_t) +DEFINE_INTERFACE_METHOD_CONST_0("GetTilesPerSide", u16, ICmpTerrain, GetTilesPerSide) END_INTERFACE_WRAPPER(Terrain) diff --git a/source/simulation2/components/ICmpTerrain.h b/source/simulation2/components/ICmpTerrain.h index f3417598d1..e3e12dc30d 100644 --- a/source/simulation2/components/ICmpTerrain.h +++ b/source/simulation2/components/ICmpTerrain.h @@ -1,4 +1,4 @@ -/* Copyright (C) 2013 Wildfire Games. +/* Copyright (C) 2017 Wildfire Games. * This file is part of 0 A.D. * * 0 A.D. is free software: you can redistribute it and/or modify @@ -30,27 +30,27 @@ class CVector3D; class ICmpTerrain : public IComponent { public: - virtual bool IsLoaded() = 0; + virtual bool IsLoaded() const = 0; - virtual CFixedVector3D CalcNormal(entity_pos_t x, entity_pos_t z) = 0; + virtual CFixedVector3D CalcNormal(entity_pos_t x, entity_pos_t z) const = 0; - virtual CVector3D CalcExactNormal(float x, float z) = 0; + virtual CVector3D CalcExactNormal(float x, float z) const = 0; - virtual entity_pos_t GetGroundLevel(entity_pos_t x, entity_pos_t z) = 0; + virtual entity_pos_t GetGroundLevel(entity_pos_t x, entity_pos_t z) const = 0; - virtual float GetExactGroundLevel(float x, float z) = 0; + virtual float GetExactGroundLevel(float x, float z) const = 0; /** * Returns number of tiles per side on the terrain. * Return value is always non-zero. */ - virtual u16 GetTilesPerSide() = 0; + virtual u16 GetTilesPerSide() const = 0; /** * Returns number of vertices per side on the terrain. * Return value is always non-zero. */ - virtual u16 GetVerticesPerSide() = 0; + virtual u16 GetVerticesPerSide() const = 0; virtual CTerrain* GetCTerrain() = 0; diff --git a/source/simulation2/components/ICmpTerritoryInfluence.h b/source/simulation2/components/ICmpTerritoryInfluence.h index 6b938f7550..371d745876 100644 --- a/source/simulation2/components/ICmpTerritoryInfluence.h +++ b/source/simulation2/components/ICmpTerritoryInfluence.h @@ -1,4 +1,4 @@ -/* Copyright (C) 2015 Wildfire Games. +/* Copyright (C) 2017 Wildfire Games. * This file is part of 0 A.D. * * 0 A.D. is free software: you can redistribute it and/or modify @@ -23,11 +23,11 @@ class ICmpTerritoryInfluence : public IComponent { public: - virtual bool IsRoot() = 0; + virtual bool IsRoot() const = 0; - virtual u16 GetWeight() = 0; + virtual u16 GetWeight() const = 0; - virtual u32 GetRadius() = 0; + virtual u32 GetRadius() const = 0; DECLARE_INTERFACE_TYPE(TerritoryInfluence) }; diff --git a/source/simulation2/components/ICmpTerritoryManager.h b/source/simulation2/components/ICmpTerritoryManager.h index 1ec3abfd54..423853f970 100644 --- a/source/simulation2/components/ICmpTerritoryManager.h +++ b/source/simulation2/components/ICmpTerritoryManager.h @@ -1,4 +1,4 @@ -/* Copyright (C) 2015 Wildfire Games. +/* Copyright (C) 2017 Wildfire Games. * This file is part of 0 A.D. * * 0 A.D. is free software: you can redistribute it and/or modify @@ -27,7 +27,7 @@ class ICmpTerritoryManager : public IComponent { public: - virtual bool NeedUpdate(size_t* dirtyID) = 0; + virtual bool NeedUpdate(size_t* dirtyID) const = 0; /** * Number of pathfinder navcells per territory tile. diff --git a/source/simulation2/components/ICmpUnitMotion.cpp b/source/simulation2/components/ICmpUnitMotion.cpp index 28956ce64b..cea6d384fb 100644 --- a/source/simulation2/components/ICmpUnitMotion.cpp +++ b/source/simulation2/components/ICmpUnitMotion.cpp @@ -1,4 +1,4 @@ -/* Copyright (C) 2015 Wildfire Games. +/* Copyright (C) 2017 Wildfire Games. * This file is part of 0 A.D. * * 0 A.D. is free software: you can redistribute it and/or modify @@ -24,19 +24,19 @@ BEGIN_INTERFACE_WRAPPER(UnitMotion) DEFINE_INTERFACE_METHOD_4("MoveToPointRange", bool, ICmpUnitMotion, MoveToPointRange, entity_pos_t, entity_pos_t, entity_pos_t, entity_pos_t) -DEFINE_INTERFACE_METHOD_4("IsInPointRange", bool, ICmpUnitMotion, IsInPointRange, entity_pos_t, entity_pos_t, entity_pos_t, entity_pos_t) -DEFINE_INTERFACE_METHOD_3("IsInTargetRange", bool, ICmpUnitMotion, IsInTargetRange, entity_id_t, entity_pos_t, entity_pos_t) +DEFINE_INTERFACE_METHOD_CONST_4("IsInPointRange", bool, ICmpUnitMotion, IsInPointRange, entity_pos_t, entity_pos_t, entity_pos_t, entity_pos_t) +DEFINE_INTERFACE_METHOD_CONST_3("IsInTargetRange", bool, ICmpUnitMotion, IsInTargetRange, entity_id_t, entity_pos_t, entity_pos_t) DEFINE_INTERFACE_METHOD_3("MoveToTargetRange", bool, ICmpUnitMotion, MoveToTargetRange, entity_id_t, entity_pos_t, entity_pos_t) DEFINE_INTERFACE_METHOD_3("MoveToFormationOffset", void, ICmpUnitMotion, MoveToFormationOffset, entity_id_t, entity_pos_t, entity_pos_t) DEFINE_INTERFACE_METHOD_2("FaceTowardsPoint", void, ICmpUnitMotion, FaceTowardsPoint, entity_pos_t, entity_pos_t) DEFINE_INTERFACE_METHOD_0("StopMoving", void, ICmpUnitMotion, StopMoving) -DEFINE_INTERFACE_METHOD_0("GetCurrentSpeed", fixed, ICmpUnitMotion, GetCurrentSpeed) +DEFINE_INTERFACE_METHOD_CONST_0("GetCurrentSpeed", fixed, ICmpUnitMotion, GetCurrentSpeed) DEFINE_INTERFACE_METHOD_1("SetSpeed", void, ICmpUnitMotion, SetSpeed, fixed) -DEFINE_INTERFACE_METHOD_0("IsMoving", bool, ICmpUnitMotion, IsMoving) -DEFINE_INTERFACE_METHOD_0("GetWalkSpeed", fixed, ICmpUnitMotion, GetWalkSpeed) -DEFINE_INTERFACE_METHOD_0("GetRunSpeed", fixed, ICmpUnitMotion, GetRunSpeed) -DEFINE_INTERFACE_METHOD_0("GetPassabilityClassName", std::string, ICmpUnitMotion, GetPassabilityClassName) -DEFINE_INTERFACE_METHOD_0("GetUnitClearance", entity_pos_t, ICmpUnitMotion, GetUnitClearance) +DEFINE_INTERFACE_METHOD_CONST_0("IsMoving", bool, ICmpUnitMotion, IsMoving) +DEFINE_INTERFACE_METHOD_CONST_0("GetWalkSpeed", fixed, ICmpUnitMotion, GetWalkSpeed) +DEFINE_INTERFACE_METHOD_CONST_0("GetRunSpeed", fixed, ICmpUnitMotion, GetRunSpeed) +DEFINE_INTERFACE_METHOD_CONST_0("GetPassabilityClassName", std::string, ICmpUnitMotion, GetPassabilityClassName) +DEFINE_INTERFACE_METHOD_CONST_0("GetUnitClearance", entity_pos_t, ICmpUnitMotion, GetUnitClearance) DEFINE_INTERFACE_METHOD_1("SetFacePointAfterMove", void, ICmpUnitMotion, SetFacePointAfterMove, bool) DEFINE_INTERFACE_METHOD_1("SetDebugOverlay", void, ICmpUnitMotion, SetDebugOverlay, bool) END_INTERFACE_WRAPPER(UnitMotion) @@ -51,12 +51,12 @@ public: return m_Script.Call("MoveToPointRange", x, z, minRange, maxRange); } - virtual bool IsInPointRange(entity_pos_t x, entity_pos_t z, entity_pos_t minRange, entity_pos_t maxRange) + virtual bool IsInPointRange(entity_pos_t x, entity_pos_t z, entity_pos_t minRange, entity_pos_t maxRange) const { return m_Script.Call("IsInPointRange", x, z, minRange, maxRange); } - virtual bool IsInTargetRange(entity_id_t target, entity_pos_t minRange, entity_pos_t maxRange) + virtual bool IsInTargetRange(entity_id_t target, entity_pos_t minRange, entity_pos_t maxRange) const { return m_Script.Call("IsInTargetRange", target, minRange, maxRange); } @@ -81,7 +81,7 @@ public: m_Script.CallVoid("StopMoving"); } - virtual fixed GetCurrentSpeed() + virtual fixed GetCurrentSpeed() const { return m_Script.Call("GetCurrentSpeed"); } @@ -91,17 +91,17 @@ public: m_Script.CallVoid("SetSpeed", speed); } - virtual bool IsMoving() + virtual bool IsMoving() const { return m_Script.Call("IsMoving"); } - virtual fixed GetWalkSpeed() + virtual fixed GetWalkSpeed() const { return m_Script.Call("GetWalkSpeed"); } - virtual fixed GetRunSpeed() + virtual fixed GetRunSpeed() const { return m_Script.Call("GetRunSpeed"); } @@ -111,17 +111,17 @@ public: m_Script.CallVoid("SetFacePointAfterMove", facePointAfterMove); } - virtual pass_class_t GetPassabilityClass() + virtual pass_class_t GetPassabilityClass() const { return m_Script.Call("GetPassabilityClass"); } - virtual std::string GetPassabilityClassName() + virtual std::string GetPassabilityClassName() const { return m_Script.Call("GetPassabilityClassName"); } - virtual entity_pos_t GetUnitClearance() + virtual entity_pos_t GetUnitClearance() const { return m_Script.Call("GetUnitClearance"); } diff --git a/source/simulation2/components/ICmpUnitMotion.h b/source/simulation2/components/ICmpUnitMotion.h index de5c6748b1..c87234980e 100644 --- a/source/simulation2/components/ICmpUnitMotion.h +++ b/source/simulation2/components/ICmpUnitMotion.h @@ -1,4 +1,4 @@ -/* Copyright (C) 2015 Wildfire Games. +/* Copyright (C) 2017 Wildfire Games. * This file is part of 0 A.D. * * 0 A.D. is free software: you can redistribute it and/or modify @@ -50,13 +50,13 @@ public: * Determine wether the givven point is within the given range, using the same measurement * as MoveToPointRange. */ - virtual bool IsInPointRange(entity_pos_t x, entity_pos_t z, entity_pos_t minRange, entity_pos_t maxRange) = 0; + virtual bool IsInPointRange(entity_pos_t x, entity_pos_t z, entity_pos_t minRange, entity_pos_t maxRange) const = 0; /** * Determine whether the target is within the given range, using the same measurement * as MoveToTargetRange. */ - virtual bool IsInTargetRange(entity_id_t target, entity_pos_t minRange, entity_pos_t maxRange) = 0; + virtual bool IsInTargetRange(entity_id_t target, entity_pos_t minRange, entity_pos_t maxRange) const = 0; /** * Attempt to walk into range of a given target entity, or as close as possible. @@ -89,7 +89,7 @@ public: /** * Get the current movement speed. */ - virtual fixed GetCurrentSpeed() = 0; + virtual fixed GetCurrentSpeed() const = 0; /** * Set the current movement speed. @@ -99,17 +99,17 @@ public: /** * Get whether the unit is moving. */ - virtual bool IsMoving() = 0; + virtual bool IsMoving() const = 0; /** * Get the default speed that this unit will have when walking, in metres per second. */ - virtual fixed GetWalkSpeed() = 0; + virtual fixed GetWalkSpeed() const = 0; /** * Get the default speed that this unit will have when running, in metres per second. */ - virtual fixed GetRunSpeed() = 0; + virtual fixed GetRunSpeed() const = 0; /** * Set whether the unit will turn to face the target point after finishing moving. @@ -119,17 +119,17 @@ public: /** * Get the unit's passability class. */ - virtual pass_class_t GetPassabilityClass() = 0; + virtual pass_class_t GetPassabilityClass() const = 0; /** * Get the passability class name (as defined in pathfinder.xml) */ - virtual std::string GetPassabilityClassName() = 0; + virtual std::string GetPassabilityClassName() const = 0; /** * Get the unit clearance (used by the Obstruction component) */ - virtual entity_pos_t GetUnitClearance() = 0; + virtual entity_pos_t GetUnitClearance() const = 0; /** * Toggle the rendering of debug info. diff --git a/source/simulation2/components/ICmpUnitRenderer.h b/source/simulation2/components/ICmpUnitRenderer.h index 2b5658fb5a..e5f881b3b8 100644 --- a/source/simulation2/components/ICmpUnitRenderer.h +++ b/source/simulation2/components/ICmpUnitRenderer.h @@ -1,4 +1,4 @@ -/* Copyright (C) 2014 Wildfire Games. +/* Copyright (C) 2017 Wildfire Games. * This file is part of 0 A.D. * * 0 A.D. is free software: you can redistribute it and/or modify @@ -35,7 +35,7 @@ public: { tag_t() : n(0) {} explicit tag_t(u32 n) : n(n) {} - bool valid() { return n != 0; } + bool valid() const { return n != 0; } u32 n; }; @@ -65,12 +65,12 @@ public: */ virtual void PickAllEntitiesAtPoint(std::vector >& outEntities, const CVector3D& origin, const CVector3D& dir, - bool allowEditorSelectables) = 0; + bool allowEditorSelectables) const = 0; /** * Returns the frame offset from the last Interpolate message. */ - virtual float GetFrameOffset() = 0; + virtual float GetFrameOffset() const = 0; /** * Toggle the rendering of debug info. diff --git a/source/simulation2/components/ICmpVision.cpp b/source/simulation2/components/ICmpVision.cpp index bc2a5b0c93..58bb98ad19 100644 --- a/source/simulation2/components/ICmpVision.cpp +++ b/source/simulation2/components/ICmpVision.cpp @@ -1,4 +1,4 @@ -/* Copyright (C) 2014 Wildfire Games. +/* Copyright (C) 2017 Wildfire Games. * This file is part of 0 A.D. * * 0 A.D. is free software: you can redistribute it and/or modify @@ -22,5 +22,5 @@ #include "simulation2/system/InterfaceScripted.h" BEGIN_INTERFACE_WRAPPER(Vision) -DEFINE_INTERFACE_METHOD_0("GetRange", entity_pos_t, ICmpVision, GetRange) +DEFINE_INTERFACE_METHOD_CONST_0("GetRange", entity_pos_t, ICmpVision, GetRange) END_INTERFACE_WRAPPER(Vision) diff --git a/source/simulation2/components/ICmpVision.h b/source/simulation2/components/ICmpVision.h index 05268fe3aa..b9d2c3d3b9 100644 --- a/source/simulation2/components/ICmpVision.h +++ b/source/simulation2/components/ICmpVision.h @@ -1,4 +1,4 @@ -/* Copyright (C) 2016 Wildfire Games. +/* Copyright (C) 2017 Wildfire Games. * This file is part of 0 A.D. * * 0 A.D. is free software: you can redistribute it and/or modify @@ -28,8 +28,8 @@ class ICmpVision : public IComponent { public: - virtual entity_pos_t GetRange() = 0; - virtual bool GetRevealShore() = 0; + virtual entity_pos_t GetRange() const = 0; + virtual bool GetRevealShore() const = 0; DECLARE_INTERFACE_TYPE(Vision) }; diff --git a/source/simulation2/components/ICmpVisual.cpp b/source/simulation2/components/ICmpVisual.cpp index e39942db2e..5f96630929 100644 --- a/source/simulation2/components/ICmpVisual.cpp +++ b/source/simulation2/components/ICmpVisual.cpp @@ -1,4 +1,4 @@ -/* Copyright (C) 2016 Wildfire Games. +/* Copyright (C) 2017 Wildfire Games. * This file is part of 0 A.D. * * 0 A.D. is free software: you can redistribute it and/or modify @@ -31,7 +31,7 @@ DEFINE_INTERFACE_METHOD_1("SetAnimationSyncRepeat", void, ICmpVisual, SetAnimati DEFINE_INTERFACE_METHOD_1("SetAnimationSyncOffset", void, ICmpVisual, SetAnimationSyncOffset, fixed) DEFINE_INTERFACE_METHOD_4("SetShadingColor", void, ICmpVisual, SetShadingColor, fixed, fixed, fixed, fixed) DEFINE_INTERFACE_METHOD_2("SetVariable", void, ICmpVisual, SetVariable, std::string, float) -DEFINE_INTERFACE_METHOD_0("GetActorSeed", u32, ICmpVisual, GetActorSeed) +DEFINE_INTERFACE_METHOD_CONST_0("GetActorSeed", u32, ICmpVisual, GetActorSeed) DEFINE_INTERFACE_METHOD_1("SetActorSeed", void, ICmpVisual, SetActorSeed, u32) -DEFINE_INTERFACE_METHOD_0("HasConstructionPreview", bool, ICmpVisual, HasConstructionPreview) +DEFINE_INTERFACE_METHOD_CONST_0("HasConstructionPreview", bool, ICmpVisual, HasConstructionPreview) END_INTERFACE_WRAPPER(Visual) diff --git a/source/simulation2/components/ICmpVisual.h b/source/simulation2/components/ICmpVisual.h index 6b11fdcffa..e135fc1a19 100644 --- a/source/simulation2/components/ICmpVisual.h +++ b/source/simulation2/components/ICmpVisual.h @@ -1,4 +1,4 @@ -/* Copyright (C) 2016 Wildfire Games. +/* Copyright (C) 2017 Wildfire Games. * This file is part of 0 A.D. * * 0 A.D. is free software: you can redistribute it and/or modify @@ -38,39 +38,39 @@ public: * Get the world-space bounding box of the object's visual representation. * (Not safe for use in simulation code.) */ - virtual CBoundingBoxAligned GetBounds() = 0; + virtual CBoundingBoxAligned GetBounds() const = 0; /** * Get the oriented world-space bounding box of the object's visual representation, clipped at the Y=0 plane in object space * to prevent it from extending into the terrain. The primary difference with GetBounds is that this bounding box is not aligned * to the world axes, but arbitrarily rotated according to the model transform. */ - virtual CBoundingBoxOriented GetSelectionBox() = 0; + virtual CBoundingBoxOriented GetSelectionBox() const = 0; /** * Get the world-space position of the base point of the object's visual representation. * (Not safe for use in simulation code.) */ - virtual CVector3D GetPosition() = 0; + virtual CVector3D GetPosition() const = 0; /** * Return the short name of the actor that's being displayed, or the empty string on error. * (Not safe for use in simulation code.) */ - virtual std::wstring GetActorShortName() = 0; + virtual std::wstring GetActorShortName() const = 0; /** * Return the filename of the actor to be used for projectiles from this unit, or the empty string if none. * (Not safe for use in simulation code.) */ - virtual std::wstring GetProjectileActor() = 0; + virtual std::wstring GetProjectileActor() const = 0; /** * Return the exact position where a projectile should be launched from (based on the actor's * ammo prop points). * Returns (0,0,0) if no point can be found. */ - virtual CVector3D GetProjectileLaunchPoint() = 0; + virtual CVector3D GetProjectileLaunchPoint() const = 0; /** * Returns the underlying unit of this visual actor. May return NULL to indicate that no unit exists (e.g. may happen if the @@ -151,7 +151,7 @@ public: /** * Get actor seed used for random variations */ - virtual u32 GetActorSeed() = 0; + virtual u32 GetActorSeed() const = 0; /** * Set actor seed for random variations and reload model @@ -161,7 +161,7 @@ public: /** * Returns true if this entity should have a construction preview */ - virtual bool HasConstructionPreview() = 0; + virtual bool HasConstructionPreview() const = 0; /** * Called when an actor file has been modified and reloaded dynamically. diff --git a/source/simulation2/components/ICmpWaterManager.cpp b/source/simulation2/components/ICmpWaterManager.cpp index 487ccb8841..f97e7f65c6 100644 --- a/source/simulation2/components/ICmpWaterManager.cpp +++ b/source/simulation2/components/ICmpWaterManager.cpp @@ -1,4 +1,4 @@ -/* Copyright (C) 2010 Wildfire Games. +/* Copyright (C) 2017 Wildfire Games. * This file is part of 0 A.D. * * 0 A.D. is free software: you can redistribute it and/or modify @@ -24,5 +24,5 @@ BEGIN_INTERFACE_WRAPPER(WaterManager) DEFINE_INTERFACE_METHOD_0("RecomputeWaterData", void, ICmpWaterManager, RecomputeWaterData) DEFINE_INTERFACE_METHOD_1("SetWaterLevel", void, ICmpWaterManager, SetWaterLevel, entity_pos_t) -DEFINE_INTERFACE_METHOD_2("GetWaterLevel", entity_pos_t, ICmpWaterManager, GetWaterLevel, entity_pos_t, entity_pos_t) +DEFINE_INTERFACE_METHOD_CONST_2("GetWaterLevel", entity_pos_t, ICmpWaterManager, GetWaterLevel, entity_pos_t, entity_pos_t) END_INTERFACE_WRAPPER(WaterManager) diff --git a/source/simulation2/components/ICmpWaterManager.h b/source/simulation2/components/ICmpWaterManager.h index 03915fc1af..7a40be59d4 100644 --- a/source/simulation2/components/ICmpWaterManager.h +++ b/source/simulation2/components/ICmpWaterManager.h @@ -1,4 +1,4 @@ -/* Copyright (C) 2010 Wildfire Games. +/* Copyright (C) 2017 Wildfire Games. * This file is part of 0 A.D. * * 0 A.D. is free software: you can redistribute it and/or modify @@ -38,12 +38,12 @@ public: /** * Get the current water level at the given point. */ - virtual entity_pos_t GetWaterLevel(entity_pos_t x, entity_pos_t z) = 0; + virtual entity_pos_t GetWaterLevel(entity_pos_t x, entity_pos_t z) const = 0; /** * Get the current water level at the given point. */ - virtual float GetExactWaterLevel(float x, float z) = 0; + virtual float GetExactWaterLevel(float x, float z) const = 0; DECLARE_INTERFACE_TYPE(WaterManager) }; diff --git a/source/simulation2/components/tests/test_RangeManager.h b/source/simulation2/components/tests/test_RangeManager.h index 9f97fd2ebb..aba18fcd4b 100644 --- a/source/simulation2/components/tests/test_RangeManager.h +++ b/source/simulation2/components/tests/test_RangeManager.h @@ -1,4 +1,4 @@ -/* Copyright (C) 2016 Wildfire Games. +/* Copyright (C) 2017 Wildfire Games. * This file is part of 0 A.D. * * 0 A.D. is free software: you can redistribute it and/or modify @@ -30,8 +30,8 @@ class MockVision : public ICmpVision public: DEFAULT_MOCK_COMPONENT() - virtual entity_pos_t GetRange() { return entity_pos_t::FromInt(66); } - virtual bool GetRevealShore() { return false; } + virtual entity_pos_t GetRange() const { return entity_pos_t::FromInt(66); } + virtual bool GetRevealShore() const { return false; } }; class MockPosition : public ICmpPosition @@ -40,35 +40,35 @@ public: DEFAULT_MOCK_COMPONENT() virtual void SetTurretParent(entity_id_t UNUSED(id), const CFixedVector3D& UNUSED(pos)) {} - virtual entity_id_t GetTurretParent() {return INVALID_ENTITY;} + virtual entity_id_t GetTurretParent() const {return INVALID_ENTITY;} virtual void UpdateTurretPosition() {} virtual std::set* GetTurrets() { return NULL; } - virtual bool IsInWorld() { return true; } + virtual bool IsInWorld() const { return true; } virtual void MoveOutOfWorld() { } virtual void MoveTo(entity_pos_t UNUSED(x), entity_pos_t UNUSED(z)) { } virtual void MoveAndTurnTo(entity_pos_t UNUSED(x), entity_pos_t UNUSED(z), entity_angle_t UNUSED(a)) { } virtual void JumpTo(entity_pos_t UNUSED(x), entity_pos_t UNUSED(z)) { } virtual void SetHeightOffset(entity_pos_t UNUSED(dy)) { } - virtual entity_pos_t GetHeightOffset() { return entity_pos_t::Zero(); } + virtual entity_pos_t GetHeightOffset() const { return entity_pos_t::Zero(); } virtual void SetHeightFixed(entity_pos_t UNUSED(y)) { } - virtual entity_pos_t GetHeightFixed() { return entity_pos_t::Zero(); } - virtual bool IsHeightRelative() { return true; } + virtual entity_pos_t GetHeightFixed() const { return entity_pos_t::Zero(); } + virtual bool IsHeightRelative() const { return true; } virtual void SetHeightRelative(bool UNUSED(relative)) { } - virtual bool IsFloating() { return false; } + virtual bool IsFloating() const { return false; } virtual void SetFloating(bool UNUSED(flag)) { } virtual void SetActorFloating(bool UNUSED(flag)) { } virtual void SetConstructionProgress(fixed UNUSED(progress)) { } - virtual CFixedVector3D GetPosition() { return CFixedVector3D(); } - virtual CFixedVector2D GetPosition2D() { return CFixedVector2D(); } - virtual CFixedVector3D GetPreviousPosition() { return CFixedVector3D(); } - virtual CFixedVector2D GetPreviousPosition2D() { return CFixedVector2D(); } + virtual CFixedVector3D GetPosition() const { return CFixedVector3D(); } + virtual CFixedVector2D GetPosition2D() const { return CFixedVector2D(); } + virtual CFixedVector3D GetPreviousPosition() const { return CFixedVector3D(); } + virtual CFixedVector2D GetPreviousPosition2D() const { return CFixedVector2D(); } virtual void TurnTo(entity_angle_t UNUSED(y)) { } virtual void SetYRotation(entity_angle_t UNUSED(y)) { } virtual void SetXZRotation(entity_angle_t UNUSED(x), entity_angle_t UNUSED(z)) { } - virtual CFixedVector3D GetRotation() { return CFixedVector3D(); } - virtual fixed GetDistanceTravelled() { return fixed::Zero(); } - virtual void GetInterpolatedPosition2D(float UNUSED(frameOffset), float& x, float& z, float& rotY) { x = z = rotY = 0; } - virtual CMatrix3D GetInterpolatedTransform(float UNUSED(frameOffset)) { return CMatrix3D(); } + virtual CFixedVector3D GetRotation() const { return CFixedVector3D(); } + virtual fixed GetDistanceTravelled() const { return fixed::Zero(); } + virtual void GetInterpolatedPosition2D(float UNUSED(frameOffset), float& x, float& z, float& rotY) const { x = z = rotY = 0; } + virtual CMatrix3D GetInterpolatedTransform(float UNUSED(frameOffset)) const { return CMatrix3D(); } }; class TestCmpRangeManager : public CxxTest::TestSuite diff --git a/source/simulation2/helpers/LongPathfinder.cpp b/source/simulation2/helpers/LongPathfinder.cpp index e088977341..f993f6e2cc 100644 --- a/source/simulation2/helpers/LongPathfinder.cpp +++ b/source/simulation2/helpers/LongPathfinder.cpp @@ -1040,7 +1040,7 @@ void LongPathfinder::ImprovePathWaypoints(WaypointPath& path, pass_class_t passC path.m_Waypoints.swap(newWaypoints); } -void LongPathfinder::GetDebugDataJPS(u32& steps, double& time, Grid& grid) +void LongPathfinder::GetDebugDataJPS(u32& steps, double& time, Grid& grid) const { steps = m_DebugSteps; time = m_DebugTime; diff --git a/source/simulation2/helpers/LongPathfinder.h b/source/simulation2/helpers/LongPathfinder.h index c698c4e04c..2ebdc7c9ad 100644 --- a/source/simulation2/helpers/LongPathfinder.h +++ b/source/simulation2/helpers/LongPathfinder.h @@ -71,15 +71,15 @@ public: STATUS_CLOSED = 2 }; - bool IsUnexplored() { return GetStatus() == STATUS_UNEXPLORED; } - bool IsOpen() { return GetStatus() == STATUS_OPEN; } - bool IsClosed() { return GetStatus() == STATUS_CLOSED; } + bool IsUnexplored() const { return GetStatus() == STATUS_UNEXPLORED; } + bool IsOpen() const { return GetStatus() == STATUS_OPEN; } + bool IsClosed() const { return GetStatus() == STATUS_CLOSED; } void SetStatusOpen() { SetStatus(STATUS_OPEN); } void SetStatusClosed() { SetStatus(STATUS_CLOSED); } // Get pi,pj coords of predecessor to this tile on best path, given i,j coords of this tile - inline int GetPredI(int i) { return i + GetPredDI(); } - inline int GetPredJ(int j) { return j + GetPredDJ(); } + inline int GetPredI(int i) const { return i + GetPredDI(); } + inline int GetPredJ(int j) const { return j + GetPredDJ(); } inline PathCost GetCost() const { return g; } inline void SetCost(PathCost cost) { g = cost; } @@ -244,7 +244,7 @@ public: return m_PathfinderHier.GetConnectivityGrid(passClass); } - void GetDebugData(u32& steps, double& time, Grid& grid) + void GetDebugData(u32& steps, double& time, Grid& grid) const { GetDebugDataJPS(steps, time, grid); } @@ -280,7 +280,7 @@ private: * TODO: cleanup documentation */ void ComputeJPSPath(entity_pos_t x0, entity_pos_t z0, const PathGoal& origGoal, pass_class_t passClass, WaypointPath& path); - void GetDebugDataJPS(u32& steps, double& time, Grid& grid); + void GetDebugDataJPS(u32& steps, double& time, Grid& grid) const; // Helper functions for ComputePath diff --git a/source/simulation2/scripting/ScriptComponent.h b/source/simulation2/scripting/ScriptComponent.h index 586014940a..8180bc33cb 100644 --- a/source/simulation2/scripting/ScriptComponent.h +++ b/source/simulation2/scripting/ScriptComponent.h @@ -1,4 +1,4 @@ -/* Copyright (C) 2014 Wildfire Games. +/* Copyright (C) 2017 Wildfire Games. * This file is part of 0 A.D. * * 0 A.D. is free software: you can redistribute it and/or modify @@ -46,17 +46,20 @@ public: void Deserialize(const CParamNode& paramNode, IDeserializer& deserialize, entity_id_t ent); // Use Boost.PP to define: - // template R Call(const char* funcname); - // template R Call(const char* funcname, const T0& a0); + // template R Call(const char* funcname) const; + // template R Call(const char* funcname, const T0& a0) const; // ... - // void CallVoid(const char* funcname); - // template void CallVoid(const char* funcname, const T0& a0); + // template void CallRef(const char* funcname, R ret) const; + // template void CallRef(const char* funcname, const T0& a0, R ret) const; + // ... + // void CallVoid(const char* funcname) const; + // template void CallVoid(const char* funcname, const T0& a0) const; // ... // CallRef is mainly used for returning script values with correct stack rooting. #define OVERLOADS(z, i, data) \ template \ - R Call(const char* funcname BOOST_PP_ENUM_TRAILING_BINARY_PARAMS(i, const T, &a)) \ + R Call(const char* funcname BOOST_PP_ENUM_TRAILING_BINARY_PARAMS(i, const T, &a)) const \ { \ R ret; \ if (m_ScriptInterface.CallFunction(m_Instance, funcname BOOST_PP_ENUM_TRAILING_PARAMS(i, a), ret)) \ @@ -65,13 +68,13 @@ public: return R(); \ } \ template \ - void CallRef(const char* funcname BOOST_PP_ENUM_TRAILING_BINARY_PARAMS(i, const T, &a), R ret) \ + void CallRef(const char* funcname BOOST_PP_ENUM_TRAILING_BINARY_PARAMS(i, const T, &a), R ret) const \ { \ if (!m_ScriptInterface.CallFunction(m_Instance, funcname BOOST_PP_ENUM_TRAILING_PARAMS(i, a), ret)) \ LOGERROR("Error calling component script function %s", funcname); \ } \ BOOST_PP_IF(i, template<, ) BOOST_PP_ENUM_PARAMS(i, typename T) BOOST_PP_IF(i, >, ) \ - void CallVoid(const char* funcname BOOST_PP_ENUM_TRAILING_BINARY_PARAMS(i, const T, &a)) \ + void CallVoid(const char* funcname BOOST_PP_ENUM_TRAILING_BINARY_PARAMS(i, const T, &a)) const \ { \ if (m_ScriptInterface.CallFunctionVoid(m_Instance, funcname BOOST_PP_ENUM_TRAILING_PARAMS(i, a))) \ return; \ diff --git a/source/simulation2/system/ComponentTest.h b/source/simulation2/system/ComponentTest.h index 2631a7eda4..aa4ed630a7 100644 --- a/source/simulation2/system/ComponentTest.h +++ b/source/simulation2/system/ComponentTest.h @@ -1,4 +1,4 @@ -/* Copyright (C) 2013 Wildfire Games. +/* Copyright (C) 2017 Wildfire Games. * This file is part of 0 A.D. * * 0 A.D. is free software: you can redistribute it and/or modify @@ -182,37 +182,37 @@ class MockTerrain : public ICmpTerrain public: DEFAULT_MOCK_COMPONENT() - virtual bool IsLoaded() + virtual bool IsLoaded() const { return true; } - virtual CFixedVector3D CalcNormal(entity_pos_t UNUSED(x), entity_pos_t UNUSED(z)) + virtual CFixedVector3D CalcNormal(entity_pos_t UNUSED(x), entity_pos_t UNUSED(z)) const { return CFixedVector3D(fixed::FromInt(0), fixed::FromInt(1), fixed::FromInt(0)); } - virtual CVector3D CalcExactNormal(float UNUSED(x), float UNUSED(z)) + virtual CVector3D CalcExactNormal(float UNUSED(x), float UNUSED(z)) const { return CVector3D(0.f, 1.f, 0.f); } - virtual entity_pos_t GetGroundLevel(entity_pos_t UNUSED(x), entity_pos_t UNUSED(z)) + virtual entity_pos_t GetGroundLevel(entity_pos_t UNUSED(x), entity_pos_t UNUSED(z)) const { return entity_pos_t::FromInt(50); } - virtual float GetExactGroundLevel(float UNUSED(x), float UNUSED(z)) + virtual float GetExactGroundLevel(float UNUSED(x), float UNUSED(z)) const { return 50.f; } - virtual u16 GetTilesPerSide() + virtual u16 GetTilesPerSide() const { return 16; } - virtual u16 GetVerticesPerSide() + virtual u16 GetVerticesPerSide() const { return 17; } diff --git a/source/simulation2/system/InterfaceScripted.h b/source/simulation2/system/InterfaceScripted.h index 133af6b207..8efdb732de 100644 --- a/source/simulation2/system/InterfaceScripted.h +++ b/source/simulation2/system/InterfaceScripted.h @@ -1,4 +1,4 @@ -/* Copyright (C) 2016 Wildfire Games. +/* Copyright (C) 2017 Wildfire Games. * This file is part of 0 A.D. * * 0 A.D. is free software: you can redistribute it and/or modify @@ -65,4 +65,29 @@ #define DEFINE_INTERFACE_METHOD_7(scriptname, rettype, classname, methodname, arg1, arg2, arg3, arg4, arg5, arg6, arg7) \ JS_FN(scriptname, (ScriptInterface::callMethod), 7, JSPROP_ENUMERATE|JSPROP_READONLY|JSPROP_PERMANENT), +// const methods +#define DEFINE_INTERFACE_METHOD_CONST_0(scriptname, rettype, classname, methodname) \ + JS_FN(scriptname, (ScriptInterface::callMethodConst), 0, JSPROP_ENUMERATE|JSPROP_READONLY|JSPROP_PERMANENT), + +#define DEFINE_INTERFACE_METHOD_CONST_1(scriptname, rettype, classname, methodname, arg1) \ + JS_FN(scriptname, (ScriptInterface::callMethodConst), 1, JSPROP_ENUMERATE|JSPROP_READONLY|JSPROP_PERMANENT), + +#define DEFINE_INTERFACE_METHOD_CONST_2(scriptname, rettype, classname, methodname, arg1, arg2) \ + JS_FN(scriptname, (ScriptInterface::callMethodConst), 2, JSPROP_ENUMERATE|JSPROP_READONLY|JSPROP_PERMANENT), + +#define DEFINE_INTERFACE_METHOD_CONST_3(scriptname, rettype, classname, methodname, arg1, arg2, arg3) \ + JS_FN(scriptname, (ScriptInterface::callMethodConst), 3, JSPROP_ENUMERATE|JSPROP_READONLY|JSPROP_PERMANENT), + +#define DEFINE_INTERFACE_METHOD_CONST_4(scriptname, rettype, classname, methodname, arg1, arg2, arg3, arg4) \ + JS_FN(scriptname, (ScriptInterface::callMethodConst), 4, JSPROP_ENUMERATE|JSPROP_READONLY|JSPROP_PERMANENT), + +#define DEFINE_INTERFACE_METHOD_CONST_5(scriptname, rettype, classname, methodname, arg1, arg2, arg3, arg4, arg5) \ + JS_FN(scriptname, (ScriptInterface::callMethodConst), 5, JSPROP_ENUMERATE|JSPROP_READONLY|JSPROP_PERMANENT), + +#define DEFINE_INTERFACE_METHOD_CONST_6(scriptname, rettype, classname, methodname, arg1, arg2, arg3, arg4, arg5, arg6) \ + JS_FN(scriptname, (ScriptInterface::callMethodConst), 6, JSPROP_ENUMERATE|JSPROP_READONLY|JSPROP_PERMANENT), + +#define DEFINE_INTERFACE_METHOD_CONST_7(scriptname, rettype, classname, methodname, arg1, arg2, arg3, arg4, arg5, arg6, arg7) \ + JS_FN(scriptname, (ScriptInterface::callMethodConst), 7, JSPROP_ENUMERATE|JSPROP_READONLY|JSPROP_PERMANENT), + #endif // INCLUDED_INTERFACE_SCRIPTED