diff options
Diffstat (limited to 'thirdparty')
-rw-r--r-- | thirdparty/README.md | 2 | ||||
-rw-r--r-- | thirdparty/rvo2/src/API.h | 30 | ||||
-rw-r--r-- | thirdparty/rvo2/src/RVO.h | 406 |
3 files changed, 3 insertions, 435 deletions
diff --git a/thirdparty/README.md b/thirdparty/README.md index 7ea2763ac8..f77f573221 100644 --- a/thirdparty/README.md +++ b/thirdparty/README.md @@ -477,7 +477,7 @@ Files extracted from upstream source: Files extracted from upstream source: -- All .cpp and .h files in the `src/` folder except for RVOSimulator.cpp and RVOSimulator.h +- All .cpp and .h files in the `src/` folder except for RVO.h, RVOSimulator.cpp and RVOSimulator.h - LICENSE Important: Some files have Godot-made changes; so to enrich the features diff --git a/thirdparty/rvo2/src/API.h b/thirdparty/rvo2/src/API.h index c63a5a383c..c64efb452c 100644 --- a/thirdparty/rvo2/src/API.h +++ b/thirdparty/rvo2/src/API.h @@ -38,34 +38,8 @@ #ifndef RVO_API_H_ #define RVO_API_H_ -#ifdef _WIN32 -#include <SDKDDKVer.h> -#define WIN32_LEAN_AND_MEAN -#define NOCOMM -#define NOIMAGE -#define NOIME -#define NOKANJI -#define NOMCX -#ifndef NOMINMAX -#define NOMINMAX -#endif -#define NOPROXYSTUB -#define NOSERVICE -#define NOSOUND -#define NOTAPE -#define NORPC -#define _USE_MATH_DEFINES -#include <windows.h> -#undef CONNECT_DEFERRED // Avoid collision with the Godot Object class -#undef CreateDialog // Avoid collision with the Godot CreateDialog class -#endif - -#ifdef RVO_EXPORTS -#define RVO_API __declspec(dllexport) -#elif defined(RVO_IMPORTS) -#define RVO_API __declspec(dllimport) -#else +// -- GODOT start -- #define RVO_API -#endif +// -- GODOT end -- #endif /* RVO_API_H_ */ diff --git a/thirdparty/rvo2/src/RVO.h b/thirdparty/rvo2/src/RVO.h deleted file mode 100644 index 81c9cbd8d3..0000000000 --- a/thirdparty/rvo2/src/RVO.h +++ /dev/null @@ -1,406 +0,0 @@ -/* - * RVO.h - * RVO2-3D Library - * - * Copyright 2008 University of North Carolina at Chapel Hill - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * Please send all bug reports to <geom@cs.unc.edu>. - * - * The authors may be contacted via: - * - * Jur van den Berg, Stephen J. Guy, Jamie Snape, Ming C. Lin, Dinesh Manocha - * Dept. of Computer Science - * 201 S. Columbia St. - * Frederick P. Brooks, Jr. Computer Science Bldg. - * Chapel Hill, N.C. 27599-3175 - * United States of America - * - * <http://gamma.cs.unc.edu/RVO2/> - */ - -#ifndef RVO_RVO_H_ -#define RVO_RVO_H_ - -#include "API.h" -#include "RVOSimulator.h" -#include "Vector3.h" - -/** - - \file RVO.h - \brief Includes all public headers in the library. - - \namespace RVO - \brief Contains all classes, functions, and constants used in the library. - - \mainpage RVO2-3D Library - - \author Jur van den Berg, Stephen J. Guy, Jamie Snape, Ming C. Lin, and Dinesh Manocha - - <b>RVO2-3D Library</b> is an easy-to-use C++ implementation of the - <a href="http://gamma.cs.unc.edu/CA/">Optimal Reciprocal Collision Avoidance</a> - (ORCA) formulation for multi-agent simulation in three dimensions. <b>RVO2-3D Library</b> - automatically uses parallelism for computing the motion of the agents if your machine - has multiple processors and your compiler supports <a href="http://www.openmp.org/"> - OpenMP</a>. - - Please follow the following steps to install and use <b>RVO2-3D Library</b>. - - - \subpage whatsnew - - \subpage building - - \subpage using - - \subpage params - - See the documentation of the RVO::RVOSimulator class for an exhaustive list of - public functions of <b>RVO2-3D Library</b>. - - <b>RVO2-3D Library</b>, accompanying example code, and this documentation is - released for educational, research, and non-profit purposes under the following - \subpage terms "terms and conditions". - - - \page whatsnew What Is New in RVO2-3D Library - - \section localca Three Dimensions - - In contrast to RVO2 Library, <b>RVO2-3D Library</b> operates in 3D workspaces. It uses - a three dimensional implementation of <a href="http://gamma.cs.unc.edu/CA/">Optimal - Reciprocal Collision Avoidance</a> (ORCA) for local collision avoidance. <b>RVO2-3D - Library</b> does not replace RVO2 Library; for 2D applications, RVO2 Library should - be used. - - \section structure Structure of RVO2-3D Library - - The structure of <b>RVO2-3D Library</b> is similar to that of RVO2 Library. - Users familiar with RVO2 Library should find little trouble in using <b>RVO2-3D - Library</b>. <b>RVO2-3D Library</b> currently does not support static obstacles. - - \page building Building RVO2-3D Library - - We assume that you have downloaded <b>RVO2-3D Library</b> and unpacked the ZIP - archive to a path <tt>$RVO_ROOT</tt>. - - \section xcode Apple Xcode 4.x - - Open <tt>$RVO_ROOT/RVO.xcodeproj</tt> and select the <tt>Static Library</tt> scheme. A static library <tt>libRVO.a</tt> will be built in the default build directory. - - \section cmake CMake - - Create and switch to your chosen build directory, e.g. <tt>$RVO_ROOT/build</tt>. - Run <tt>cmake</tt> inside the build directory on the source directory, e.g. - <tt>cmake $RVO_ROOT/src</tt>. Build files for the default generator for your - platform will be generated in the build directory. - - \section make GNU Make - - Switch to the source directory <tt>$RVO_ROOT/src</tt> and run <tt>make</tt>. - Public header files (<tt>API.h</tt>, <tt>RVO.h</tt>, <tt>RVOSimulator.h</tt>, and <tt>Vector3.h</tt>) will be copied to the <tt>$RVO_ROOT/include</tt> directory and a static library <tt>libRVO.a</tt> will be compiled into the - <tt>$RVO_ROOT/lib</tt> directory. - - \section visual Microsoft Visual Studio 2010 - - Open <tt>$RVO_ROOT/RVO.sln</tt> and select the <tt>RVOStatic</tt> project and a - configuration (<tt>Debug</tt> or <tt>Release</tt>). Public header files (<tt>API.h</tt>, <tt>RVO.h</tt>, <tt>RVOSimulator.h</tt>, and <tt>Vector3.h</tt>) will be copied to the <tt>$RVO_ROOT/include</tt> directory and a static library, e.g. <tt>RVO.lib</tt>, will be compiled into the - <tt>$RVO_ROOT/lib</tt> directory. - - - \page using Using RVO2-3D Library - - \section structure Structure - - A program performing an <b>RVO2-3D Library</b> simulation has the following global - structure. - - \code - #include <RVO.h> - - std::vector<RVO::Vector3> goals; - - int main() - { - // Create a new simulator instance. - RVO::RVOSimulator* sim = new RVO::RVOSimulator(); - - // Set up the scenario. - setupScenario(sim); - - // Perform (and manipulate) the simulation. - do { - updateVisualization(sim); - setPreferredVelocities(sim); - sim->doStep(); - } while (!reachedGoal(sim)); - - delete sim; - } - \endcode - - In order to use <b>RVO2-3D Library</b>, the user needs to include RVO.h. The first - step is then to create an instance of RVO::RVOSimulator. Then, the process - consists of two stages. The first stage is specifying the simulation scenario - and its parameters. In the above example program, this is done in the method - setupScenario(...), which we will discuss below. The second stage is the actual - performing of the simulation. - - In the above example program, simulation steps are taken until all - the agents have reached some predefined goals. Prior to each simulation step, - we set the preferred velocity for each agent, i.e. the - velocity the agent would have taken if there were no other agents around, in the - method setPreferredVelocities(...). The simulator computes the actual velocities - of the agents and attempts to follow the preferred velocities as closely as - possible while guaranteeing collision avoidance at the same time. During the - simulation, the user may want to retrieve information from the simulation for - instance to visualize the simulation. In the above example program, this is done - in the method updateVisualization(...), which we will discuss below. It is also - possible to manipulate the simulation during the simulation, for instance by - changing positions, radii, velocities, etc. of the agents. - - \section spec Setting up the Simulation Scenario - - A scenario that is to be simulated can be set up as follows. A scenario consists - of a set of agents that can be manually specified. Agents may be added anytime - before or during the simulation. The user may also want to define goal positions - of the agents, or a roadmap to guide the agents around obstacles. This is not done - in <b>RVO2-3D Library</b>, but needs to be taken care of in the user's external - application. - - The following example creates a scenario with eight agents exchanging positions. - - \code - void setupScenario(RVO::RVOSimulator* sim) { - // Specify global time step of the simulation. - sim->setTimeStep(0.25f); - - // Specify default parameters for agents that are subsequently added. - sim->setAgentDefaults(15.0f, 10, 10.0f, 2.0f, 2.0f); - - // Add agents, specifying their start position. - sim->addAgent(RVO::Vector3(-50.0f, -50.0f, -50.0f)); - sim->addAgent(RVO::Vector3(50.0f, -50.0f, -50.0f)); - sim->addAgent(RVO::Vector3(50.0f, 50.0f, -50.0f)); - sim->addAgent(RVO::Vector3(-50.0f, 50.0f, -50.0f)); - sim->addAgent(RVO::Vector3(-50.0f, -50.0f, 50.0f)); - sim->addAgent(RVO::Vector3(50.0f, -50.0f, 50.0f)); - sim->addAgent(RVO::Vector3(50.0f, 50.0f, 50.0f)); - sim->addAgent(RVO::Vector3(-50.0f, 50.0f, 50.0f)); - - // Create goals (simulator is unaware of these). - for (size_t i = 0; i < sim->getNumAgents(); ++i) { - goals.push_back(-sim->getAgentPosition(i)); - } - } - \endcode - - See the documentation on RVO::RVOSimulator for a full overview of the - functionality to specify scenarios. - - \section ret Retrieving Information from the Simulation - - During the simulation, the user can extract information from the simulation for - instance for visualization purposes, or to determine termination conditions of - the simulation. In the example program above, visualization is done in the - updateVisualization(...) method. Below we give an example that simply writes - the positions of each agent in each time step to the standard output. The - termination condition is checked in the reachedGoal(...) method. Here we give an - example that returns true if all agents are within one radius of their goals. - - \code - void updateVisualization(RVO::RVOSimulator* sim) { - // Output the current global time. - std::cout << sim->getGlobalTime() << " "; - - // Output the position for all the agents. - for (size_t i = 0; i < sim->getNumAgents(); ++i) { - std::cout << sim->getAgentPosition(i) << " "; - } - - std::cout << std::endl; - } - \endcode - - \code - bool reachedGoal(RVO::RVOSimulator* sim) { - // Check whether all agents have arrived at their goals. - for (size_t i = 0; i < sim->getNumAgents(); ++i) { - if (absSq(goals[i] - sim->getAgentPosition(i)) > sim->getAgentRadius(i) * sim->getAgentRadius(i)) { - // Agent is further away from its goal than one radius. - return false; - } - } - return true; - } - \endcode - - Using similar functions as the ones used in this example, the user can access - information about other parameters of the agents, as well as the global - parameters, and the obstacles. See the documentation of the class - RVO::RVOSimulator for an exhaustive list of public functions for retrieving - simulation information. - - \section manip Manipulating the Simulation - - During the simulation, the user can manipulate the simulation, for instance by - changing the global parameters, or changing the parameters of the agents - (potentially causing abrupt different behavior). It is also possible to give the - agents a new position, which make them jump through the scene. - New agents can be added to the simulation at any time. - - See the documentation of the class RVO::RVOSimulator for an exhaustive list of - public functions for manipulating the simulation. - - To provide global guidance to the agents, the preferred velocities of the agents - can be changed ahead of each simulation step. In the above example program, this - happens in the method setPreferredVelocities(...). Here we give an example that - simply sets the preferred velocity to the unit vector towards the agent's goal - for each agent (i.e., the preferred speed is 1.0). - - \code - void setPreferredVelocities(RVO::RVOSimulator* sim) { - // Set the preferred velocity for each agent. - for (size_t i = 0; i < sim->getNumAgents(); ++i) { - if (absSq(goals[i] - sim->getAgentPosition(i)) < sim->getAgentRadius(i) * sim->getAgentRadius(i) ) { - // Agent is within one radius of its goal, set preferred velocity to zero - sim->setAgentPrefVelocity(i, RVO::Vector3()); - } else { - // Agent is far away from its goal, set preferred velocity as unit vector towards agent's goal. - sim->setAgentPrefVelocity(i, normalize(goals[i] - sim->getAgentPosition(i))); - } - } - } - \endcode - - \section example Example Programs - - <b>RVO2-3D Library</b> is accompanied by one example program, which can be found in the - <tt>$RVO_ROOT/examples</tt> directory. The example is named Sphere, and - contains the following demonstration scenario: - <table border="0" cellpadding="3" width="100%"> - <tr> - <td valign="top" width="100"><b>Sphere</b></td> - <td valign="top">A scenario in which 812 agents, initially positioned evenly - distributed on a sphere, move to the antipodal position on the - sphere. </td> - </tr> - </table> - - - \page params Parameter Overview - - \section globalp Global Parameters - - <table border="0" cellpadding="3" width="100%"> - <tr> - <td valign="top" width="150"><strong>Parameter</strong></td> - <td valign="top" width="150"><strong>Type (unit)</strong></td> - <td valign="top"><strong>Meaning</strong></td> - </tr> - <tr> - <td valign="top">timeStep</td> - <td valign="top">float (time)</td> - <td valign="top">The time step of the simulation. Must be positive.</td> - </tr> - </table> - - \section agent Agent Parameters - - <table border="0" cellpadding="3" width="100%"> - <tr> - <td valign="top" width="150"><strong>Parameter</strong></td> - <td valign="top" width="150"><strong>Type (unit)</strong></td> - <td valign="top"><strong>Meaning</strong></td> - </tr> - <tr> - <td valign="top">maxNeighbors</td> - <td valign="top">size_t</td> - <td valign="top">The maximum number of other agents the agent takes into - account in the navigation. The larger this number, the - longer the running time of the simulation. If the number is - too low, the simulation will not be safe.</td> - </tr> - <tr> - <td valign="top">maxSpeed</td> - <td valign="top">float (distance/time)</td> - <td valign="top">The maximum speed of the agent. Must be non-negative.</td> - </tr> - <tr> - <td valign="top">neighborDist</td> - <td valign="top">float (distance)</td> - <td valign="top">The maximum distance (center point to center point) to - other agents the agent takes into account in the - navigation. The larger this number, the longer the running - time of the simulation. If the number is too low, the - simulation will not be safe. Must be non-negative.</td> - </tr> - <tr> - <td valign="top" width="150">position</td> - <td valign="top" width="150">RVO::Vector3 (distance, distance)</td> - <td valign="top">The current position of the agent.</td> - </tr> - <tr> - <td valign="top" width="150">prefVelocity</td> - <td valign="top" width="150">RVO::Vector3 (distance/time, distance/time) - </td> - <td valign="top">The current preferred velocity of the agent. This is the - velocity the agent would take if no other agents or - obstacles were around. The simulator computes an actual - velocity for the agent that follows the preferred velocity - as closely as possible, but at the same time guarantees - collision avoidance.</td> - </tr> - <tr> - <td valign="top">radius</td> - <td valign="top">float (distance)</td> - <td valign="top">The radius of the agent. Must be non-negative.</td> - </tr> - <tr> - <td valign="top" width="150">timeHorizon</td> - <td valign="top" width="150">float (time)</td> - <td valign="top">The minimum amount of time for which the agent's velocities - that are computed by the simulation are safe with respect - to other agents. The larger this number, the sooner this - agent will respond to the presence of other agents, but the - less freedom the agent has in choosing its velocities. - Must be positive. </td> - </tr> - <tr> - <td valign="top" width="150">velocity</td> - <td valign="top" width="150">RVO::Vector3 (distance/time, distance/time) - </td> - <td valign="top">The (current) velocity of the agent.</td> - </tr> - </table> - - - \page terms Terms and Conditions - - <b>RVO2-3D Library</b> - - Copyright 2008 University of North Carolina at Chapel Hill - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - - */ - -#endif /* RVO_RVO_H_ */ |