Separating state out of the location
This commit is contained in:
1 parent
5e9a663812
commit
297bd7377f
45 files changed
+2114
-778
No files matched your search
@@ -9,31 +9,13 @@
|
||||
#include "InteractiveObject.h"
|
||||
#include "InteractiveObjectState.h"
|
||||
#include "../CharacterState.h"
|
||||
#include "../content/LocationDefinition.h"
|
||||
|
||||
namespace FRG {
|
||||
class IGameServer;
|
||||
|
||||
class Character;
|
||||
|
||||
struct GameObjectData {
|
||||
std::string name;
|
||||
std::string texturePath;
|
||||
std::string textureDarkandsPath;
|
||||
std::string meshPath;
|
||||
float rotationX = 0.0f;
|
||||
float rotationY = 0.0f;
|
||||
float rotationZ = 0.0f;
|
||||
float positionX = 0.0f;
|
||||
float positionY = 0.0f;
|
||||
float positionZ = 0.0f;
|
||||
float scale = 1.0f;
|
||||
// Objects sharing mesh and textures are drawn with one instanced call.
|
||||
// Set "instanced": false in the JSON to keep an object as a standalone mesh.
|
||||
bool instanced = true;
|
||||
|
||||
LoadedGameObjectState toLoadedGameObjectState() const;
|
||||
};
|
||||
|
||||
// Result of loading a static object list: unique objects keep their own mesh,
|
||||
// repeated ones are merged into instanced batches.
|
||||
struct StaticObjectSet {
|
||||
@@ -41,63 +23,25 @@ namespace FRG {
|
||||
std::vector<InstancedBatch> batches;
|
||||
};
|
||||
|
||||
struct InteractiveObjectData {
|
||||
std::string id;
|
||||
GameObjectData base;
|
||||
float interactionRadius = 2.0f;
|
||||
float approachRadius = 2.0f;
|
||||
std::string activateFunctionName;
|
||||
float pivotX = 0.0f;
|
||||
float pivotY = 0.0f;
|
||||
float pivotZ = 0.0f;
|
||||
float boundsMinX = 0.0f, boundsMinY = 0.0f, boundsMinZ = 0.0f;
|
||||
float boundsMaxX = 0.0f, boundsMaxY = 0.0f, boundsMaxZ = 0.0f;
|
||||
bool hasInteractionPosition = false;
|
||||
float interactionPositionX = 0.0f, interactionPositionY = 0.0f, interactionPositionZ = 0.0f;
|
||||
bool castShadow = true;
|
||||
bool castShadowNight = true;
|
||||
bool isActive = true;
|
||||
|
||||
InteractiveObjectState toInteractiveObjectState() const;
|
||||
};
|
||||
|
||||
struct NpcData {
|
||||
std::string id;
|
||||
std::string name;
|
||||
std::string texturePath;
|
||||
std::map<std::string, std::string> meshTextures;
|
||||
std::string animationIdlePath;
|
||||
std::string animationWalkPath;
|
||||
// Optional combat / death animations. Empty path = slot not loaded.
|
||||
std::string animationActionIdlePath;
|
||||
std::string animationActionAttackPath;
|
||||
std::string animationStandToActionPath;
|
||||
std::string animationActionToStandPath;
|
||||
std::string animationActionToDeathPath;
|
||||
std::string animationDeathIdlePath;
|
||||
float positionX = 0.0f;
|
||||
float positionY = 0.0f;
|
||||
float positionZ = 0.0f;
|
||||
float walkSpeed = 1.5f;
|
||||
float rotationSpeed = 8.0f;
|
||||
float modelScale = 0.01f;
|
||||
float modelCorrectionRotX = 0.0f;
|
||||
float modelCorrectionRotY = 0.0f;
|
||||
float modelCorrectionRotZ = 0.0f;
|
||||
float facingAngle = 0.0f;
|
||||
float hp = 100.0f;
|
||||
float visibleRange = VISIBLE_RANGE;
|
||||
bool canAttack = false;
|
||||
bool enabled = true;
|
||||
float interactionRadius = 0.0f;
|
||||
|
||||
// Converts this JSON-parsed descriptor into a fully-populated CharacterState
|
||||
// (including creationInfo) ready for Character::createFromState().
|
||||
CharacterState toCharacterState() const;
|
||||
};
|
||||
|
||||
class GameObjectLoader {
|
||||
public:
|
||||
static StaticObjectSet createGameObjects(
|
||||
const std::vector<GameObjectData>& definitions,
|
||||
Renderer& renderer, const std::string& zipPath = "");
|
||||
static std::vector<InteractiveObject> createInteractiveObjects(
|
||||
const std::vector<InteractiveObjectData>& definitions,
|
||||
Renderer& renderer,
|
||||
std::unordered_map<std::string,
|
||||
std::shared_ptr<InteractiveObjectState>>& states,
|
||||
const std::string& zipPath = "");
|
||||
static std::vector<std::unique_ptr<FRG::Character>> createNpcs(
|
||||
const std::vector<NpcData>& definitions,
|
||||
Renderer& renderer,
|
||||
const std::unordered_map<std::string,
|
||||
std::shared_ptr<CharacterState>>& states,
|
||||
IGameServer& server, const std::string& locationId,
|
||||
const std::string& zipPath);
|
||||
|
||||
static StaticObjectSet loadAndCreateGameObjects(
|
||||
const std::string& jsonPath,
|
||||
Renderer& renderer,
|
||||
|
||||
Reference in new issue
Block a user