librw/src/world.cpp

54 lines
980 B
C++
Raw Normal View History

#include <cstdio>
#include <cstdlib>
#include <cstring>
#include "rwbase.h"
#include "rwerror.h"
#include "rwplg.h"
#include "rwpipeline.h"
#include "rwobjects.h"
#include "rwengine.h"
2017-08-24 15:10:34 +02:00
#define PLUGIN_ID ID_WORLD
namespace rw {
PluginList World::s_plglist = { sizeof(World), sizeof(World), nil, nil };
World*
World::create(void)
{
2017-08-24 15:10:34 +02:00
World *world = (World*)rwMalloc(s_plglist.size, MEMDUR_EVENT | ID_WORLD);
if(world == nil){
2017-07-12 10:10:57 +02:00
RWERROR((ERR_ALLOC, s_plglist.size));
return nil;
}
world->object.init(World::ID, 0);
world->lights.init();
world->directionalLights.init();
return world;
}
void
World::addLight(Light *light)
{
light->world = this;
if(light->getType() < Light::POINT){
this->directionalLights.append(&light->inWorld);
2017-08-12 10:25:25 +02:00
}else{
this->lights.append(&light->inWorld);
2017-08-12 10:25:25 +02:00
if(light->getFrame())
light->getFrame()->updateObjects();
}
}
void
World::addCamera(Camera *cam)
{
cam->world = this;
2017-08-12 10:25:25 +02:00
if(cam->getFrame())
cam->getFrame()->updateObjects();
}
}