Pārlūkot izejas kodu

colorAffectsChildren=false now prevents all parent color from affecting child entities, fixed bezier curve not deselecting properly when selecting another bezier curve in the entity editor

Ivan Safrin 11 gadi atpakaļ
vecāks
revīzija
fd96742c9b

+ 1 - 0
Core/Contents/Include/PolyRenderer.h

@@ -304,6 +304,7 @@ namespace Polycode {
         
         void pushVertexColor();
         void popVertexColor();
+        void loadVertexColorIdentity();
         void multiplyVertexColor(const Color &color);
         
 	protected:

+ 5 - 4
Core/Contents/Source/PolyEntity.cpp

@@ -503,7 +503,6 @@ void Entity::transformAndRender() {
 	}
 
     renderer->multModelviewMatrix(transformMatrix);
-	renderer->setVertexColor(color.r,color.g,color.b,color.a);
 	
 	if(billboardMode) {
 		if(billboardIgnoreScale) {
@@ -539,18 +538,20 @@ void Entity::transformAndRender() {
 	}
     
     if(!colorAffectsChildren) {
-        renderer->popVertexColor();
+        renderer->pushVertexColor();
+        renderer->loadVertexColorIdentity();
         if(visible || (!visible && !visibilityAffectsChildren)) {
             renderChildren();
         }
+        renderer->popVertexColor();
     } else {
         if(visible || (!visible && !visibilityAffectsChildren)) {
             renderChildren();
         }
-        renderer->popVertexColor();
     }
 		
-				
+    renderer->popVertexColor();
+    
 	renderer->popMatrix();
 	
 	if(!depthWrite)

+ 5 - 0
Core/Contents/Source/PolyRenderer.cpp

@@ -88,6 +88,11 @@ void Renderer::multiplyVertexColor(const Color &color) {
     setVertexColor(currentVertexColor.r, currentVertexColor.g, currentVertexColor.b, currentVertexColor.a);
 }
 
+void Renderer::loadVertexColorIdentity() {
+    currentVertexColor = Color(1.0, 1.0, 1.0, 1.0);
+    setVertexColor(currentVertexColor.r, currentVertexColor.g, currentVertexColor.b, currentVertexColor.a);
+}
+
 void Renderer::enableShaders(bool flag) {
 	shadersEnabled = flag;
 }

+ 4 - 0
IDE/Contents/Source/PolycodeEntityEditor.cpp

@@ -92,6 +92,7 @@ CurveDisplay::CurveDisplay(Scene *parentScene, SceneCurve *curve) : DummyTargetE
     this->parentScene = parentScene;
     targetPoint = NULL;
     propertyEntity = curve;
+    colorAffectsChildren = false;
     
     controlPointLines = new SceneMesh(Mesh::LINE_MESH);
     controlPointLines->setColor(1.0, 1.0, 0.4, 1.0);
@@ -1606,6 +1607,9 @@ void EntityEditorMainView::handleEvent(Event *event) {
                 DummyTargetEntity *dummyTarget = dynamic_cast<DummyTargetEntity*>(event->getDispatcher());
                 if(dummyTarget) {
                     targetEntity = dummyEntity;
+                    if(dummyTargetEntity) {
+                        dummyTargetEntity->handleDeselect();
+                    }
                     dummyTargetEntity = dummyTarget;
                     dummyEntity->setPosition(dummyTarget->getSelectedPoint());
                 }