Hello! I am creating a system in my engine that reads my custom format and I am having trouble.
class NXSceneObject : public NXGameObject
{
public:
virtual void ReadData(NXBinaryReader* reader);
virtual void Render(NXCamera3D* camera, NXGameTime* gameTime);
virtual void Initialize();
virtual void Update(NXGameTime* gameTime);
void Render(NXGameTime* gameTime){}
virtual void Dispose();
NXGameObject* ParentScene;
map<string, NXSceneObject> Chlidren;
bool IsVisible;
XMMATRIX WorldMatrix() { return XMMatrixScaling(Size.x, Size.y, Size.z) * XMMatrixTranslation(Position.x, Position.y, Position.z) * XMMatrixRotationRollPitchYaw(Rotation.x, Rotation.y, Rotation.z); }
XMFLOAT3 Position;
XMFLOAT3 Rotation;
XMFLOAT3 Size;
NXBoundingBox Bounds;
NXSceneObject(NXBinaryReader* reader)
{
IsVisible = reader->ReadBoolean();
Position = reader->ReadVector3(false);
Rotation = reader->ReadVector3(false);
Size = reader->ReadVector3(false);
Bounds = reader->ReadBoundingBox(false);
ReadData(reader);
}
};
class NXScene : public NXGameObject
{
public:
NXSceneConfiguration Information;
NXPlayer Player;
map<string, NXSceneObject> Objects;
NXScene(){}
void Initialize()
{
for (map<string, NXSceneObject>::iterator it = Objects.begin(); it != Objects.end(); it++)
{
it->second.Initialize();
}
}
void Update(NXGameTime* gameTime)
{
for (map<string, NXSceneObject>::iterator it = Objects.begin(); it != Objects.end(); it++)
{
it->second.Update(gameTime);
}
}
void Render(NXGameTime* gameTime)
{
for (map<string, NXSceneObject>::iterator it = Objects.begin(); it != Objects.end(); it++)
{
it->second.Render(Player.Camera, gameTime);
}
}
void Dispose()
{
for (map<string, NXSceneObject>::iterator it = Objects.begin(); it != Objects.end(); it++)
{
it->second.Dispose();
}
Objects.clear();
}
void AddSceneObject(string name, NXSceneObject obj)
{
obj.ParentScene = this;
Objects.insert(std::make_pair(name, obj));
}
};
class NXGameObject
{
public:
LPCWSTR Name;
bool RenderToTexture = true;
bool IsActive = false;
virtual void NEXENGINE_API Initialize() = 0;
virtual void NEXENGINE_API Update(NXGameTime*) = 0;
virtual void NEXENGINE_API Render(NXGameTime*) = 0;
virtual void NEXENGINE_API RenderDeferred(NXGameTime*){}
virtual void NEXENGINE_API Dispose() = 0;
};
What I am trying to do is create an abstract class derived from NXGameObject. But when I try to use my NXScene class:
NXScene scene;
void TestScreen::Initialize()
{
NXRenderer::Initialize(NXRType::Forward);
scene = NXLoader::LoadSceneFromFile("C:/nx/town1.nxs");
}
I get the errors shown above. Any help? Thanks!
EDIT: Also here is an example of what the NXSceneObject class is used for:
class NXMarker : public NXSceneObject
{
public:
NXMarker(NXBinaryReader* reader) : NXSceneObject(reader)
{
}
};
class NXPlayerStartMarker : public NXMarker
{
public:
float Health;
float MoveSpeed;
bool Realistic;
NXPlayerStartMarker(NXBinaryReader* reader) : NXMarker(reader)
{
}
void ReadData(NXBinaryReader* reader)
{
Realistic = reader->ReadBoolean();
Health = reader->ReadFloat();
MoveSpeed = reader->ReadFloat();
}
};