Untitled
unknown
plain_text
5 months ago
3.5 kB
5
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