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

Position mode options in editor and entity loading code

Ivan Safrin 13 лет назад
Родитель
Сommit
1646e57158

+ 5 - 1
Core/Contents/Source/PolyScreenEntityInstance.cpp

@@ -220,7 +220,11 @@ ScreenEntity *ScreenEntityInstance::loadObjectEntryIntoEntity(ObjectEntry *entry
 	
 	entity->ownsChildren = true;
 	
-	entity->setPositionMode(ScreenEntity::POSITION_CENTER);
+	if((*entry)["positionMode"]) {
+		entity->setPositionMode((*entry)["positionMode"]->intVal);
+	} else {
+		entity->setPositionMode(ScreenEntity::POSITION_CENTER);
+	}
 	
 	entity->color.r = (*entry)["colorR"]->NumberVal;
 	entity->color.g = (*entry)["colorG"]->NumberVal;

+ 3 - 1
IDE/Contents/Include/PolycodeProps.h

@@ -423,10 +423,12 @@ class Transform2DSheet : public PropSheet {
 		Vector2Prop *positionProp;
 		Vector2Prop *scaleProp;	
 		NumberProp *rotationProp;
-		
+		BoolProp *topLeftProp;
+				
 		Vector2 lastPositon;
 		Vector2 lastScale;
 		Number lastRotation;
+		int lastPositionMode;
 		
 		ScreenEntity *entity;
 };

+ 27 - 1
IDE/Contents/Source/PolycodeProps.cpp

@@ -1298,8 +1298,11 @@ Transform2DSheet::Transform2DSheet() : PropSheet("2D TRANSFORM", "transform2d")
 	rotationProp = new NumberProp("Rotation (deg)");
 	addProp(rotationProp);
 
+	topLeftProp = new BoolProp("Topleft anchor");
+	addProp(topLeftProp);
+	
 	entity = NULL;
-	propHeight = 130;
+	propHeight = 160;
 }
 
 void Transform2DSheet::handleEvent(Event *event) {
@@ -1325,6 +1328,18 @@ void Transform2DSheet::handleEvent(Event *event) {
 		dispatchEvent(new Event(), Event::CHANGE_EVENT);
 	}
 
+	if(event->getDispatcher() == topLeftProp  && event->getEventCode() == Event::CHANGE_EVENT) {
+		if(topLeftProp->get()) {
+			lastPositionMode = ScreenEntity::POSITION_TOPLEFT;
+			entity->setPositionMode(lastPositionMode);
+		} else {
+			lastPositionMode = ScreenEntity::POSITION_CENTER;
+			entity->setPositionMode(lastPositionMode);		
+		}
+		dispatchEvent(new Event(), Event::CHANGE_EVENT);
+	}
+
+
 	PropSheet::handleEvent(event);
 }
 
@@ -1342,6 +1357,17 @@ void Transform2DSheet::Update() {
 			scaleProp->set(entity->getScale2D());
 			lastScale = entity->getScale2D();
 		}
+
+		if(entity->getPositionMode() != lastPositionMode) {
+			if(entity->getPositionMode() == ScreenEntity::POSITION_TOPLEFT) {
+				topLeftProp->set(true);
+			} else {
+				topLeftProp->set(false);			
+			}
+		
+			lastPositionMode = entity->getPositionMode();
+		}
+
 		
 		if(entity->getRotation() != lastRotation) {
 			lastRotation = entity->getRotation();

+ 3 - 1
IDE/Contents/Source/PolycodeScreenEditor.cpp

@@ -2223,6 +2223,8 @@ void PolycodeScreenEditor::saveEntityToObjectEntry(ScreenEntity *entity, ObjectE
 	
 	entry->addChild("scaleX", entity->scale.x);	
 	entry->addChild("scaleY", entity->scale.y);
+	
+	entry->addChild("positionMode", entity->getPositionMode());	
 
 	entry->addChild("rotation", entity->getRotation());	
 	
@@ -2321,7 +2323,7 @@ void PolycodeScreenEditorMain::applyEditorProperties(ScreenEntity *entity) {
 	entity->blockMouseInput = true;
 	entity->addEventListener(this, InputEvent::EVENT_MOUSEDOWN);	
 	entity->addEventListener(this, InputEvent::EVENT_MOUSEUP);	
-	entity->setPositionMode(ScreenEntity::POSITION_CENTER);
+//	entity->setPositionMode(ScreenEntity::POSITION_CENTER);
 
 }