mirror of
https://github.com/AxioDL/PrimeWorldEditor.git
synced 2025-12-16 00:17:14 +00:00
Added Editor Properties widget at the top of every World Editor tab, made tons of backend changes to get it to work properly
This commit is contained in:
@@ -1,95 +0,0 @@
|
||||
#include "CScriptLayer.h"
|
||||
|
||||
CScriptLayer::CScriptLayer()
|
||||
{
|
||||
mLayerName = "New Layer";
|
||||
mActive = true;
|
||||
mVisible = true;
|
||||
}
|
||||
|
||||
CScriptLayer::~CScriptLayer()
|
||||
{
|
||||
for (auto it = mObjects.begin(); it != mObjects.end(); it++)
|
||||
delete *it;
|
||||
}
|
||||
|
||||
// ************* DATA MANIPULATION *************
|
||||
void CScriptLayer::AddObject(CScriptObject* object)
|
||||
{
|
||||
mObjects.push_back(object);
|
||||
}
|
||||
|
||||
void CScriptLayer::DeleteObjectByIndex(u32 index)
|
||||
{
|
||||
delete mObjects[index];
|
||||
mObjects.erase(mObjects.begin() + index, mObjects.begin() + index);
|
||||
}
|
||||
|
||||
void CScriptLayer::DeleteObjectByID(u32 ID)
|
||||
{
|
||||
for (auto it = mObjects.begin(); it != mObjects.end(); it++)
|
||||
{
|
||||
if ((*it)->InstanceID() == ID)
|
||||
{
|
||||
delete *it;
|
||||
mObjects.erase(it, it);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void CScriptLayer::Reserve(u32 amount)
|
||||
{
|
||||
mObjects.reserve(amount);
|
||||
}
|
||||
|
||||
// ************* GETTERS *************
|
||||
TString CScriptLayer::Name()
|
||||
{
|
||||
return mLayerName;
|
||||
}
|
||||
|
||||
bool CScriptLayer::IsActive()
|
||||
{
|
||||
return mActive;
|
||||
}
|
||||
|
||||
bool CScriptLayer::IsVisible()
|
||||
{
|
||||
return mVisible;
|
||||
}
|
||||
|
||||
u32 CScriptLayer::GetNumObjects()
|
||||
{
|
||||
return mObjects.size();
|
||||
}
|
||||
|
||||
CScriptObject* CScriptLayer::ObjectByIndex(u32 index)
|
||||
{
|
||||
return mObjects[index];
|
||||
}
|
||||
|
||||
CScriptObject* CScriptLayer::ObjectByID(u32 ID)
|
||||
{
|
||||
for (auto it = mObjects.begin(); it != mObjects.end(); it++)
|
||||
if ((*it)->InstanceID() == ID)
|
||||
return *it;
|
||||
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
// ************* SETTERS *************
|
||||
void CScriptLayer::SetName(const TString& name)
|
||||
{
|
||||
mLayerName = name;
|
||||
}
|
||||
|
||||
void CScriptLayer::SetActive(bool active)
|
||||
{
|
||||
mActive = active;
|
||||
}
|
||||
|
||||
void CScriptLayer::SetVisible(bool visible)
|
||||
{
|
||||
mVisible = visible;
|
||||
}
|
||||
@@ -1,5 +1,5 @@
|
||||
#ifndef SSCRIPTLAYER_H
|
||||
#define SSCRIPTLAYER_H
|
||||
#ifndef CSCRIPTLAYER_H
|
||||
#define CSCRIPTLAYER_H
|
||||
|
||||
#include "CScriptObject.h"
|
||||
#include <Common/types.h>
|
||||
@@ -11,38 +11,85 @@ class CScriptLayer
|
||||
TString mLayerName;
|
||||
bool mActive;
|
||||
bool mVisible;
|
||||
std::vector<CScriptObject*> mObjects;
|
||||
std::vector<CScriptObject*> mInstances;
|
||||
public:
|
||||
CScriptLayer();
|
||||
~CScriptLayer();
|
||||
CScriptLayer()
|
||||
: mLayerName("New Layer")
|
||||
, mActive(true)
|
||||
, mVisible(true)
|
||||
{
|
||||
}
|
||||
|
||||
~CScriptLayer()
|
||||
{
|
||||
for (auto it = mInstances.begin(); it != mInstances.end(); it++)
|
||||
delete *it;
|
||||
}
|
||||
|
||||
// Data Manipulation
|
||||
void AddObject(CScriptObject* object);
|
||||
void DeleteObjectByIndex(u32 index);
|
||||
void DeleteObjectByID(u32 ID);
|
||||
void Reserve(u32 amount);
|
||||
void AddInstance(CScriptObject *pObject)
|
||||
{
|
||||
mInstances.push_back(pObject);
|
||||
}
|
||||
|
||||
// Getters and Setters
|
||||
TString Name();
|
||||
bool IsActive();
|
||||
bool IsVisible();
|
||||
u32 GetNumObjects();
|
||||
CScriptObject* ObjectByIndex(u32 index);
|
||||
CScriptObject* ObjectByID(u32 ID);
|
||||
void RemoveInstance(CScriptObject *pInstance)
|
||||
{
|
||||
for (auto it = mInstances.begin(); it != mInstances.end(); it++)
|
||||
{
|
||||
if (*it == pInstance)
|
||||
{
|
||||
mInstances.erase(it);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void SetName(const TString& name);
|
||||
void SetActive(bool active);
|
||||
void SetVisible(bool visible);
|
||||
void RemoveInstanceByIndex(u32 Index)
|
||||
{
|
||||
mInstances.erase(mInstances.begin() + Index);
|
||||
}
|
||||
|
||||
void RemoveInstanceByID(u32 ID)
|
||||
{
|
||||
for (auto it = mInstances.begin(); it != mInstances.end(); it++)
|
||||
{
|
||||
if ((*it)->InstanceID() == ID)
|
||||
{
|
||||
mInstances.erase(it);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void Reserve(u32 Amount)
|
||||
{
|
||||
mInstances.reserve(Amount);
|
||||
}
|
||||
|
||||
// Accessors
|
||||
inline TString Name() const { return mLayerName; }
|
||||
inline bool IsActive() const { return mActive; }
|
||||
inline bool IsVisible() const { return mVisible; }
|
||||
inline u32 NumInstances() const { return mInstances.size(); }
|
||||
inline CScriptObject* InstanceByIndex(u32 Index) const { return mInstances[Index]; }
|
||||
|
||||
inline CScriptObject* InstanceByID(u32 ID) const
|
||||
{
|
||||
for (auto it = mInstances.begin(); it != mInstances.end(); it++)
|
||||
{
|
||||
if ((*it)->InstanceID() == ID)
|
||||
return *it;
|
||||
}
|
||||
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
inline void SetName(const TString& rkName) { mLayerName = rkName; }
|
||||
inline void SetActive(bool Active) { mActive = Active; }
|
||||
inline void SetVisible(bool Visible) { mVisible = Visible; }
|
||||
|
||||
// Operators
|
||||
CScriptObject* operator[](u32 index);
|
||||
CScriptObject* operator[](u32 Index) { return InstanceByIndex(Index); }
|
||||
};
|
||||
|
||||
// ************* INLINE FUNCTIONS *************
|
||||
inline CScriptObject* CScriptLayer::operator[](u32 index)
|
||||
{
|
||||
return mObjects[index];
|
||||
}
|
||||
|
||||
|
||||
#endif // SSCRIPTLAYER_H
|
||||
#endif // CSCRIPTLAYER_H
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
#include "CScriptObject.h"
|
||||
#include "CScriptLayer.h"
|
||||
#include "CMasterTemplate.h"
|
||||
#include "Core/Resource/CAnimSet.h"
|
||||
|
||||
@@ -69,6 +70,16 @@ bool CScriptObject::IsEditorProperty(IProperty *pProp)
|
||||
);
|
||||
}
|
||||
|
||||
void CScriptObject::SetLayer(CScriptLayer *pLayer)
|
||||
{
|
||||
if (pLayer != mpLayer)
|
||||
{
|
||||
mpLayer->RemoveInstance(this);
|
||||
mpLayer = pLayer;
|
||||
mpLayer->AddInstance(this);
|
||||
}
|
||||
}
|
||||
|
||||
// ************ GETTERS ************
|
||||
IProperty* CScriptObject::PropertyByIndex(u32 index) const
|
||||
{
|
||||
|
||||
@@ -50,6 +50,7 @@ public:
|
||||
void EvaluateCollisionModel();
|
||||
void EvaluateVolume();
|
||||
bool IsEditorProperty(IProperty *pProp);
|
||||
void SetLayer(CScriptLayer *pLayer);
|
||||
|
||||
CScriptTemplate* Template() const;
|
||||
CMasterTemplate* MasterTemplate() const;
|
||||
@@ -84,6 +85,12 @@ public:
|
||||
CCollisionMeshGroup* GetCollision() const;
|
||||
EVolumeShape VolumeShape() const;
|
||||
float VolumeScale() const;
|
||||
|
||||
TStringProperty* InstanceNameProperty() const { return mpInstanceName; }
|
||||
TVector3Property* PositionProperty() const { return mpPosition; }
|
||||
TVector3Property* RotationProperty() const { return mpRotation; }
|
||||
TVector3Property* ScaleProperty() const { return mpScale; }
|
||||
TBoolProperty* ActiveProperty() const { return mpActive; }
|
||||
};
|
||||
|
||||
#endif // CSCRIPTOBJECT_H
|
||||
|
||||
@@ -2,6 +2,11 @@
|
||||
#include "IPropertyTemplate.h"
|
||||
|
||||
// ************ IProperty ************
|
||||
CPropertyStruct* IProperty::RootStruct()
|
||||
{
|
||||
return (mpParent ? mpParent->RootStruct() : Type() == eStructProperty ? static_cast<CPropertyStruct*>(this) : nullptr);
|
||||
}
|
||||
|
||||
IPropertyTemplate* IProperty::Template() const
|
||||
{
|
||||
return mpTemplate;
|
||||
@@ -111,23 +116,23 @@ CPropertyStruct* CPropertyStruct::StructByIDString(const TIDString& rkStr) const
|
||||
}
|
||||
|
||||
// ************ CArrayProperty ************
|
||||
void CArrayProperty::Resize(u32 Size)
|
||||
void CArrayProperty::Resize(int Size)
|
||||
{
|
||||
u32 OldSize = mProperties.size();
|
||||
int OldSize = mProperties.size();
|
||||
if (OldSize == Size) return;
|
||||
|
||||
if (Size < OldSize)
|
||||
{
|
||||
for (u32 i = mProperties.size() - 1; i >= Size; i--)
|
||||
delete mProperties[i];
|
||||
for (int iProp = mProperties.size() - 1; iProp >= Size; iProp--)
|
||||
delete mProperties[iProp];
|
||||
}
|
||||
|
||||
mProperties.resize(Size);
|
||||
|
||||
if (Size > OldSize)
|
||||
{
|
||||
for (u32 i = OldSize; i < Size; i++)
|
||||
mProperties[i] = static_cast<CArrayTemplate*>(mpTemplate)->CreateSubStruct(this);
|
||||
for (int iProp = OldSize; iProp < Size; iProp++)
|
||||
mProperties[iProp] = static_cast<CArrayTemplate*>(mpTemplate)->CreateSubStruct(this);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -47,6 +47,8 @@ public:
|
||||
inline CPropertyStruct* Parent() const { return mpParent; }
|
||||
inline void SetParent(CPropertyStruct *pParent) { mpParent = pParent; }
|
||||
|
||||
CPropertyStruct* RootStruct();
|
||||
|
||||
// These functions can't be in the header to avoid circular includes with IPropertyTemplate.h
|
||||
IPropertyTemplate* Template() const;
|
||||
TString Name() const;
|
||||
@@ -178,7 +180,7 @@ public:
|
||||
inline void Reserve(u32 amount) { mProperties.reserve(amount); }
|
||||
|
||||
// Functions
|
||||
void Resize(u32 Size);
|
||||
void Resize(int Size);
|
||||
CStructTemplate* SubStructTemplate() const;
|
||||
TString ElementName() const;
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user