Untitled
unknown
plain_text
a year ago
3.5 kB
8
Indexable
#include "SceneManager.h"
#include "lineSegs.h"
#include "cardMaker.h"
#include "texturePool.h"
#include "textureStage.h"
#include "material.h"
#include "transparencyAttrib.h"
#include "directionalLight.h"
#include "clockObject.h"
#include "pandaFramework.h"
#include "oceangenerator.h"
#include "ambientLight.h"
#include <QDebug>
#include <cmath>
SceneManager::SceneManager(WindowFramework* window) : window(window) {}
void SceneManager::initializeScene()
{
createGrid();
createPlatform();
addDirectionalLight();
setupAnimationTask();
}
void SceneManager::createGrid()
{
LineSegs lines;
lines.set_color(1, 1, 1, 1);
float size = 10.0f;
float spacing = 1.0f;
float height = -1.5f;
for (float x = -size; x <= size; x += spacing)
{
lines.move_to(x, -size, height);
lines.draw_to(x, size, height);
}
for (float y = -size; y <= size; y += spacing)
{
lines.move_to(-size, y, height);
lines.draw_to(size, y, height);
}
NodePath grid = NodePath(lines.create());
grid.reparent_to(window->get_render());
OceanGenerator oceanGen(window);
NodePath ocean = oceanGen.generate(20, 1.0f, "models/ocean_texture.jpg", "models/ocean_normal_map.jpg");PIPP PA
ocean.set_pos(-10.0f, -10.0f, 0.0f);
ocean.reparent_to(window->get_render());
}
void SceneManager::addDirectionalLight()
{
PT(DirectionalLight) dlight = new DirectionalLight("directional_light");
NodePath dlight_path = window->get_render().attach_new_node(dlight);
dlight_path.set_hpr(45, 45, 0);
window->get_render().set_light(dlight_path);
}
void SceneManager::createPlatform()
{
platform = window->load_model(window->get_panda_framework()->get_models(), "models/oil_rig.bam");
platform.set_scale(0.05);
platform.set_pos(0, 0, 1);
platform.set_name("oil_rig");
platform.reparent_to(window->get_render());
}
void SceneManager::setupAnimationTask()
{
AsyncTaskManager::get_global_ptr()->add(new GenericAsyncTask("animate_platform", animatePlataformTastk, &platform));
}
AsyncTask::DoneStatus SceneManager::animatePlataformTastk(GenericAsyncTask* task, void* data)
{
NodePath* platform = static_cast<NodePath*>(data);
float time = ClockObject::get_global_clock()->get_frame_time();
float new_z = 1.0f + 0.2f * std::sin(time * 0.5f);
platform->set_z(new_z);
return AsyncTask::DS_cont;
}
AsyncTask::DoneStatus SceneManager::animateWaterTask(GenericAsyncTask* task, void* data)
{
NodePath* water = static_cast<NodePath*>(data);
static float offset = 0;
offset += ClockObject::get_global_clock()->get_dt() * 0.03f;
water->set_tex_offset(TextureStage::get_default(), offset, offset);
return AsyncTask::DS_cont;
}
#ifndef SCENEMANAGER_H
#define SCENEMANAGER_H
#include "pandaFramework.h"
#include "nodePath.h"
#include "genericAsyncTask.h"
class SceneManager {
public:
SceneManager(WindowFramework* window);
void initializeScene();
private:
WindowFramework* window;
NodePath platform;
void createGrid();
void createPlatform();
void addDirectionalLight();
void setupAnimationTask();
static AsyncTask::DoneStatus animatePlataformTastk(GenericAsyncTask* task, void* data);
static AsyncTask::DoneStatus animateWaterTask(GenericAsyncTask* task, void* data);
};
#endif // SCENEMANAGER_H
Editor is loading...
Leave a Comment