1
0
mirror of https://github.com/rwengine/openrw.git synced 2024-09-20 17:31:44 +02:00
openrw/rwengine/include/engine/GameWorld.hpp

213 lines
3.7 KiB
C++
Raw Normal View History

#pragma once
2013-12-20 17:02:46 +01:00
#ifndef _GAMEWORLD_HPP_
#define _GAMEWORLD_HPP_
2013-12-20 17:02:46 +01:00
#include <engine/GameData.hpp>
2014-06-06 18:04:00 +02:00
#include <render/GameRenderer.hpp>
#include <loaders/LoaderIPL.hpp>
2014-06-06 18:04:00 +02:00
#include <ai/AIGraphNode.hpp>
#include <ai/AIGraph.hpp>
2014-06-06 13:18:32 +02:00
class WorkContext;
class GameObject;
2014-06-06 16:22:26 +02:00
class CharacterObject;
class InstanceObject;
class VehicleObject;
2013-09-09 01:18:36 +02:00
2013-07-02 08:06:03 +02:00
#include <glm/glm.hpp>
#include <btBulletDynamicsCommon.h>
#include <btBulletCollisionCommon.h>
#include <vector>
2013-07-02 12:48:01 +02:00
#include <queue>
#include <random>
2013-07-02 08:06:03 +02:00
/**
2014-06-06 18:04:00 +02:00
* @class GameWorld
* Represents a single instance of the game world, and all of the data required.
2013-07-02 08:06:03 +02:00
*/
2013-12-20 17:02:46 +01:00
class GameWorld
2013-07-02 08:06:03 +02:00
{
public:
2013-12-20 17:02:46 +01:00
GameWorld(const std::string& gamepath);
2014-06-06 13:18:32 +02:00
~GameWorld();
2013-07-02 08:06:03 +02:00
/**
* Loads the game data
*/
bool load();
2013-07-02 12:48:01 +02:00
struct LogEntry
{
enum Type {
Info,
Error,
Warning
};
Type type;
float time;
std::string message;
};
std::deque<LogEntry> log;
2013-07-02 12:48:01 +02:00
/**
* Displays an informative message
*/
void logInfo(const std::string& info);
/**
* Displays an alarming error
*/
void logError(const std::string& error);
/**
* Displays a comforting warning
*/
void logWarning(const std::string& warning);
2013-07-02 14:49:20 +02:00
/**
* Loads an IDE into the game
*/
bool defineItems(const std::string& name);
2013-07-02 08:06:03 +02:00
/**
* Loads an IPL into the game.
* @param name The name of the IPL as it appears in the games' gta.dat
*/
2013-07-02 14:49:20 +02:00
bool placeItems(const std::string& name);
2013-07-02 08:06:03 +02:00
/**
* Loads the Zones from a zon/IPL file
*/
bool loadZone(const std::string& path);
/**
* Creates an instance
*/
2014-06-06 16:22:26 +02:00
InstanceObject *createInstance(const uint16_t id, const glm::vec3& pos, const glm::quat& rot = glm::quat());
/**
* Creates a vehicle
*/
2014-06-06 16:22:26 +02:00
VehicleObject *createVehicle(const uint16_t id, const glm::vec3& pos, const glm::quat& rot = glm::quat());
/**
* Creates a pedestrian.
*/
2014-06-06 16:22:26 +02:00
CharacterObject* createPedestrian(const uint16_t id, const glm::vec3& pos, const glm::quat& rot = glm::quat());
2013-12-12 03:55:31 +01:00
/**
* Destroys an existing Object
*/
void destroyObject(GameObject* object);
2013-12-12 03:55:31 +01:00
2013-12-27 23:57:11 +01:00
/**
* Returns the current hour
*/
int getHour();
/**
* Returns the current minute
*/
int getMinute();
2013-07-02 12:48:01 +02:00
/**
* Game Clock
*/
float gameTime;
2013-07-02 08:06:03 +02:00
/**
* Game data
*/
2013-12-20 17:02:46 +01:00
GameData gameData;
2013-07-02 08:06:03 +02:00
2013-07-02 09:53:23 +02:00
/**
* Renderer
*/
2014-06-06 18:04:00 +02:00
GameRenderer renderer;
2013-07-02 09:53:23 +02:00
/**
* Map Zones
*/
std::vector<LoaderIPL::Zone> zones;
2013-07-02 08:06:03 +02:00
/**
2013-07-02 14:49:20 +02:00
* Object Definitions
2013-07-02 08:06:03 +02:00
*/
std::map<uint16_t, std::shared_ptr<ObjectData>> objectTypes;
/**
* Paths associated with each object definition.
*/
std::map<uint16_t, std::vector<std::shared_ptr<PathData>>> objectNodes;
/**
* Vehicle definitions
*/
std::map<uint16_t, std::shared_ptr<VehicleData>> vehicleTypes;
/**
* Ped definitions
*/
std::map<uint16_t, std::shared_ptr<CharacterData>> pedestrianTypes;
2013-07-02 14:49:20 +02:00
/**
* Game Objects!
*/
2014-06-06 16:22:26 +02:00
std::vector<std::shared_ptr<InstanceObject>> objectInstances;
2013-08-16 01:05:41 +02:00
/**
* Map of Model Names to Instances
*/
2014-06-06 16:22:26 +02:00
std::map<std::string, std::shared_ptr<InstanceObject>> modelInstances;
/**
* Game Vehicles!
*/
2014-06-06 16:22:26 +02:00
std::vector<VehicleObject*> vehicleInstances;
2013-07-02 14:49:20 +02:00
/**
* Pedestrians and PCs.
*/
2014-06-06 16:22:26 +02:00
std::vector<CharacterObject*> pedestrians;
2013-12-12 03:55:31 +01:00
2013-09-21 04:27:33 +02:00
/**
* AI Graph
*/
AIGraph aigraph;
2013-07-30 17:59:44 +02:00
/**
* Randomness Engine
*/
std::default_random_engine randomEngine;
/**
* Bullet
*/
btDefaultCollisionConfiguration* collisionConfig;
btCollisionDispatcher* collisionDispatcher;
btBroadphaseInterface* broadphase;
btSequentialImpulseConstraintSolver* solver;
btDiscreteDynamicsWorld* dynamicsWorld;
2014-06-06 13:18:32 +02:00
2014-06-11 22:00:53 +02:00
/**
2014-06-16 02:29:36 +02:00
* @brief physicsNearCallback
* Used to implement uprooting and other physics oddities.
2014-06-11 22:00:53 +02:00
*/
2014-06-16 02:29:36 +02:00
static bool ContactProcessedCallback(btManifoldPoint& mp, void* body0, void* body1);
static void PhysicsTickCallback(btDynamicsWorld* physWorld, btScalar timeStep);
2014-06-11 22:00:53 +02:00
2014-06-06 13:18:32 +02:00
/**
* Work related
*/
WorkContext* _work;
2013-07-02 08:06:03 +02:00
};
#endif