95 lines
2.6 KiB
ActionScript

class ViewportPannel : DockPanel {
FrameBuffer frameBuffer;
SceneCamera sceneCamera;
Environment mainEnv;
float pitch = 0;
float yaw = 0;
float vel = 0.02f;
void onRender() {
if (!frameBuffer.isValid())
return;
int x = UI::getAvailableSizeX();
int y = UI::getAvailableSizeY();
if (x < 10 || y < 10)
return;
frameBuffer.resize(x, y);
frameBuffer.clearRGBA(0, 0, 0, 255);
sceneCamera.camera.aspect = float(x) / y;
mainEnv.render(frameBuffer, sceneCamera);
UI::drawFrameBufferCentered(frameBuffer, x, y);
if (!UI::isPannelActive())
return;
if (UI::isMouseDraggin(key::MouseRight) && !UI::isKeyDown(key::MouseMiddle)) {
pitch += UI::getMouseDeltaY() * 0.1f;
yaw += UI::getMouseDeltaX() * 0.1f;
sceneCamera.transform.rotation.setEuler(vec3(pitch, yaw, 0));
}
if (UI::isMouseDraggin(key::MouseMiddle) && !UI::isKeyDown(key::MouseRight)) {
vec3 panDir = vec3();
panDir.x -= UI::getMouseDeltaX();
panDir.y += UI::getMouseDeltaY();
panDir = panDir * vel * 0.4f;
sceneCamera.transform.position = sceneCamera.transform.relative(panDir);
}
vec3 relDir = vec3();
if (UI::isKeyDown(key::W))
relDir.z++;
if (UI::isKeyDown(key::S))
relDir.z--;
if (UI::isKeyDown(key::D))
relDir.x++;
if (UI::isKeyDown(key::A))
relDir.x--;
relDir = relDir * vel;
sceneCamera.transform.position = sceneCamera.transform.relative(relDir);
float vertically = 0;
if (UI::isKeyDown(key::Space))
vertically++;
if (UI::isKeyDown(key::LeftCtrl))
vertically--;
sceneCamera.transform.position = sceneCamera.transform.position + vec3(0, vertically * vel, 0);
}
void onInit() {
frameBuffer = Engine::createRGBA8FrameBuffer("MainFrameBuffer", 400, 400);
mainEnv = Engine::getMainEnvironment();
sceneCamera.transform.position = vec3(0, 1, -2);
UI::disablePannelPadding(true);
}
void onMenuBar() {
if (UI::menuItem("Start")) {
}
if (UI::menuItem("Camera Props")) {
UI::openPopup("ViewportCameraProps", any());
}
UI::simplePopup("ViewportCameraProps", ReciverFunc(this.viewportCameraProps));
}
void viewportCameraProps(any@ data) {
sceneCamera.camera.fov = UI::slider("Fov", sceneCamera.camera.fov / 3.14f * 180, 10, 160) / 180 * 3.14f;
}
}