Просмотр исходного кода

Added ability to add cameras in the scene editor, added camera property sheet, camera icons

Ivan Safrin 12 лет назад
Родитель
Сommit
77571cf6a5

+ 5 - 1
Core/Contents/Include/PolyCamera.h

@@ -106,7 +106,11 @@ namespace Polycode {
 			Number getFOV();
 			
 			void setClippingPlanes(Number nearClipPlane, Number farClipPlane);
-			
+        
+        
+            Number getNearClipppingPlane();
+            Number getFarClipppingPlane();
+        
 			void setParentScene(Scene *parentScene);
 			
 			void doCameraTransform();

+ 8 - 0
Core/Contents/Source/PolyCamera.cpp

@@ -398,6 +398,14 @@ Polycode::Rectangle Camera::getViewport() {
 	return viewport;
 }
 
+Number Camera::getNearClipppingPlane() {
+    return nearClipPlane;
+}
+
+Number Camera::getFarClipppingPlane() {
+    return farClipPlane;
+}
+
 void Camera::doCameraTransform() {
 	renderer->setClippingPlanes(nearClipPlane, farClipPlane);
 

Разница между файлами не показана из-за своего большого размера
+ 3 - 3
IDE/Assets/ide_icons.ai


+ 1 - 0
IDE/Contents/Include/EntityEditorPropertyView.h

@@ -57,6 +57,7 @@ class EntityEditorPropertyView : public UIElement {
         SceneLabelSheet *labelSheet;
         SceneSpriteSheet *spriteSheet;
         SoundSheet *soundSheet;
+        CameraSheet *cameraSheet;
     
         ShaderTexturesSheet *shaderTexturesSheet;
         ShaderOptionsSheet *shaderOptionsSheet;

+ 20 - 0
IDE/Contents/Include/PolycodeProps.h

@@ -723,6 +723,26 @@ class SceneSpriteSheet : public PropSheet {
         NumberProp *spriteHeightProp;
 };
 
+class CameraSheet : public PropSheet {
+    public:
+        CameraSheet();
+        ~CameraSheet();
+    
+        void handleEvent(Event *event);
+        void setCamera(Camera *camera);
+    
+        NumberProp *exposureProp;
+    
+        BoolProp *orthoProp;
+        NumberProp *fovProp;
+        NumberProp *orthoWidthProp;
+        NumberProp *orthoHeightProp;
+    
+        NumberProp *nearClipPlane;
+        NumberProp *farClipPlane;
+    
+        Camera *camera;
+};
 
 
 class SceneEntityInstanceSheet : public PropSheet {

BIN
IDE/Contents/Resources/Images/browserIcons/camera_icon.png


BIN
IDE/Contents/Resources/ImagesRetina/entityEditor/camera_icon.png


+ 8 - 0
IDE/Contents/Source/EntityEditorPropertyView.cpp

@@ -71,6 +71,9 @@ EntityEditorPropertyView::EntityEditorPropertyView() : UIElement() {
     entityProps->addPropSheet(soundSheet);
     soundSheet->addEventListener(this, PropEvent::EVENT_PROP_CHANGE);
 
+    cameraSheet = new CameraSheet();
+    entityProps->addPropSheet(cameraSheet);
+    cameraSheet->addEventListener(this, PropEvent::EVENT_PROP_CHANGE);
     
     entitySheet = new EntitySheet();
     entityProps->addPropSheet(entitySheet);
@@ -142,6 +145,11 @@ void EntityEditorPropertyView::setEntity(Entity *entity) {
         soundSheet->setSound(sound);
     }
 
+    Camera *camera = dynamic_cast<Camera*>(entity);
+    if(camera) {
+        cameraSheet->setCamera(camera);
+    }
+
     SceneParticleEmitter *emitter = dynamic_cast<SceneParticleEmitter*>(entity);
     particleSheet->setParticleEmitter(emitter);
 

+ 20 - 10
IDE/Contents/Source/PolycodeEntityEditor.cpp

@@ -175,7 +175,10 @@ void EntityEditorMainView::setEditorProps(Entity *entity) {
         createIcon(entity, "sound_icon.png");
     }
 
-    
+    Camera *camera = dynamic_cast<Camera*>(entity);
+    if(camera) {
+        createIcon(entity, "camera_icon.png");
+    }
 }
 
 void EntityEditorMainView::addEntityFromMenu(String command) {
@@ -210,19 +213,26 @@ void EntityEditorMainView::addEntityFromMenu(String command) {
         return;
     }
 
-    
+    if(command == "add_sound") {
+        SceneSound *newSound = new SceneSound("default.wav", 1.0, 2.0);
+        sceneObjectRoot->addChild(newSound);
+        setEditorProps(newSound);
+        newSound->bBox = Vector3(0.5, 0.5, 0.5);
+        newSound->setPosition(cursorPosition);
+        selectEntity(newSound);
+        return;
+    }
 
-    if(command == "add_primitive") {
-        ScenePrimitive  *newPrimitive = new ScenePrimitive(ScenePrimitive::TYPE_BOX, 1.0, 1.0, 1.0);
-        sceneObjectRoot->addChild(newPrimitive);
-        setEditorProps(newPrimitive);
-        newPrimitive->setPosition(cursorPosition);
-        selectEntity(newPrimitive);
-        newPrimitive->getMesh()->calculateNormals(false);
+    if(command == "add_camera") {
+        Camera *newCamera = new Camera(mainScene);
+        sceneObjectRoot->addChild(newCamera);
+        setEditorProps(newCamera);
+        newCamera->bBox = Vector3(0.5, 0.5, 0.5);
+        newCamera->setPosition(cursorPosition);
+        selectEntity(newCamera);
         return;
     }
     
-    
     if(command == "add_image") {
         assetSelectType = "image";
         globalFrame->assetBrowser->addEventListener(this, UIEvent::OK_EVENT);

+ 86 - 0
IDE/Contents/Source/PolycodeProps.cpp

@@ -2838,6 +2838,92 @@ void EntitySheet::setEntity(Entity *entity) {
     }
 }
 
+CameraSheet::CameraSheet() : PropSheet("CAMERA", "camera") {
+    enabled = false;
+    camera = NULL;
+    
+    
+    exposureProp = new NumberProp("Exposure");
+    addProp(exposureProp);
+
+    orthoProp = new BoolProp("Orthographic");
+    addProp(orthoProp);
+
+    fovProp = new NumberProp("FOV");
+    addProp(fovProp);
+
+    orthoWidthProp = new NumberProp("Ortho width");
+    addProp(orthoWidthProp);
+
+    orthoHeightProp = new NumberProp("Ortho height");
+    addProp(orthoHeightProp);
+
+    nearClipPlane = new NumberProp("Near clip");
+    addProp(nearClipPlane);
+
+    farClipPlane = new NumberProp("Far clip");
+    addProp(farClipPlane);
+
+    
+    propHeight = 220;
+}
+
+CameraSheet::~CameraSheet() {
+    
+}
+
+void CameraSheet::handleEvent(Event *event) {
+    if(!camera) {
+        return;
+    }
+    
+    if(event->getDispatcher() == fovProp) {
+        camera->setFOV(fovProp->get());
+        dispatchEvent(new Event(), Event::CHANGE_EVENT);
+    } else if(event->getDispatcher() == exposureProp) {
+        camera->setExposureLevel(exposureProp->get());
+        dispatchEvent(new Event(), Event::CHANGE_EVENT);
+    } else if(event->getDispatcher() == orthoProp) {
+        camera->setOrthoMode(orthoProp->get());
+        dispatchEvent(new Event(), Event::CHANGE_EVENT);
+    } else if(event->getDispatcher() == orthoWidthProp) {
+        camera->setOrthoSize(orthoWidthProp->get(), camera->getOrthoSizeY());
+        dispatchEvent(new Event(), Event::CHANGE_EVENT);
+    } else if(event->getDispatcher() == orthoHeightProp) {
+        camera->setOrthoSize(camera->getOrthoSizeX(), orthoHeightProp->get());
+        dispatchEvent(new Event(), Event::CHANGE_EVENT);
+    } else if(event->getDispatcher() == nearClipPlane) {
+        camera->setClippingPlanes(nearClipPlane->get(), camera->getFarClipppingPlane());
+        dispatchEvent(new Event(), Event::CHANGE_EVENT);
+    } else if(event->getDispatcher() == farClipPlane) {
+        camera->setClippingPlanes(camera->getNearClipppingPlane(),farClipPlane->get());
+        dispatchEvent(new Event(), Event::CHANGE_EVENT);
+    }
+
+
+    
+    PropSheet::handleEvent(event);
+}
+
+void CameraSheet::setCamera(Camera *camera) {
+    this->camera = camera;
+    if(camera) {
+        enabled = true;
+        
+        exposureProp->set(camera->getExposureLevel());
+        orthoProp->set(camera->getOrthoMode());
+        orthoWidthProp->set(camera->getOrthoSizeX());
+        orthoHeightProp->set(camera->getOrthoSizeY());
+        nearClipPlane->set(camera->getNearClipppingPlane());
+        farClipPlane->set(camera->getFarClipppingPlane());
+        
+        fovProp->set(camera->getFOV());
+    } else {
+        enabled = false;
+    }
+}
+
+
 SceneSpriteSheet::SceneSpriteSheet() : PropSheet("SPRITE", "SceneSprite") {
 	sprite = NULL;
     enabled = false;

Некоторые файлы не были показаны из-за большого количества измененных файлов