private void SaveProperties(PhControl sender) { Component selectedComponent = propertiesWindowTarget; Entity selectedEntity = selectedComponent as Entity; if (selectedComponent == null) return; foreach (Component c in propertiesWindow.Components) { PhTextEdit edit = c as PhTextEdit; if (edit != null) { if (edit.Caption == "X" && selectedEntity!=null) { float.TryParse(edit.Text, out selectedEntity.Position.X); } else if (edit.Caption == "Y" && selectedEntity != null) { float.TryParse(edit.Text, out selectedEntity.Position.Y); } else if (edit.Caption == "Orientation" && selectedEntity != null) { if (float.TryParse(edit.Text, out selectedEntity.Orientation)) { selectedEntity.Orientation = MathHelper.ToRadians(selectedEntity.Orientation); } } else { switch (edit.Type) { case PhTextEdit.ValueType.String: selectedComponent.Properties.Objects[edit.Caption] = edit.Text; break; case PhTextEdit.ValueType.Int: int i = 0; int.TryParse(edit.Text, out i); selectedComponent.Properties.Ints[edit.Caption] = i; break; case PhTextEdit.ValueType.Color: int col = 0; int.TryParse(edit.Text.Substring(1), NumberStyles.HexNumber, null, out col); selectedComponent.Properties.Objects[edit.Caption] = col.ToColor(); break; case PhTextEdit.ValueType.Float: float f = 0; float.TryParse(edit.Text, out f); selectedComponent.Properties.Floats[edit.Caption] = f; break; } } } } if (selectedEntity!=null) selectedEntity.Integrate(0); selectedComponent.HandleMessage(Messages.PropertiesChanged, null); propertiesWindow.Hide(); windows.RemoveComponent(propertiesWindow); propertiesWindow = null; }
private void CreatePropertiesWindow(string name, Component component) { propertiesWindowTarget = component; propertiesWindow = new PhWindow(100, 100, 500, 500, name+ " Properties"); propertiesWindow.AddComponent(new PhButton(300, 450, 80, 32, "OK", SaveProperties)); propertiesWindow.AddComponent(new PhButton(400, 450, 80, 32, "Cancel", CloseProperties)); int x = 100; int y = 30; if (component is Entity) { propertiesWindow.AddComponent(new PhTextEdit(x, y, 100, 20, (component as Entity).Position.X.ToString(), "X", PhTextEdit.ValueType.Float, null, null)); y += 24; propertiesWindow.AddComponent(new PhTextEdit(x, y, 100, 20, (component as Entity).Position.Y.ToString(), "Y", PhTextEdit.ValueType.Float, null, null)); y += 24; propertiesWindow.AddComponent(new PhTextEdit(x, y, 100, 20, MathHelper.ToDegrees((component as Entity).Orientation).ToString(), "Orientation", PhTextEdit.ValueType.Float, null, null)); y += 24; } foreach (KeyValuePair<string, int> property in component.Properties.Ints) { if (property.Key[0] >= 'A' && property.Key[0] <= 'Z') { propertiesWindow.AddComponent(new PhTextEdit(x, y, 100, 20, property.Value.ToString(), property.Key, PhTextEdit.ValueType.Int, null, null)); y+=24; if (y>500-30) { y = 30; x += 200; } } } foreach (KeyValuePair<string, float> property in component.Properties.Floats) { if (property.Key[0] >= 'A' && property.Key[0] <= 'Z') { propertiesWindow.AddComponent(new PhTextEdit(x, y, 100, 20, property.Value.ToString(), property.Key, PhTextEdit.ValueType.Float, null, null)); y += 24; if (y > 500 - 30) { y = 30; x += 200; } } } foreach (KeyValuePair<string, object> property in component.Properties.Objects) { if (property.Key[0] >= 'A' && property.Key[0] <= 'Z') { if (property.Value is string) { propertiesWindow.AddComponent(new PhTextEdit(x, y, 100, 20, property.Value as String, property.Key, PhTextEdit.ValueType.String, null, null)); y += 24; } if (property.Value is Color) { string hex = "#" + ((Color)property.Value).A.ToString("X2") + ((Color)property.Value).R.ToString("X2") + ((Color)property.Value).G.ToString("X2") + ((Color)property.Value).B.ToString("X2"); propertiesWindow.AddComponent(new PhTextEdit(x, y, 100, 20, hex, property.Key, PhTextEdit.ValueType.Color, null, null)); y += 24; } if (y > 500 - 30) { y = 30; x += 200; } } } windows.AddComponent(propertiesWindow); }
private void CreateWindows() { windows = new PhControl(0, 0, PhantomGame.Game.Resolution.Width, PhantomGame.Game.Resolution.Height); windows.Ghost = true; AddComponent(windows); main = new PhWindow(100, 100, 500, 500, "Main Menu"); main.Ghost = true; int y = 30; main.AddComponent(new PhButton(10, y += 32, 480, 24, "Layers", StartSelectLayer)); main.AddComponent(new PhButton(10, y += 32, 480, 24, "Entities", StartSelectEntity)); main.AddComponent(new PhButton(10, y += 32, 480, 24, "Clear Map", ClearMap)); main.AddComponent(new PhButton(10, y += 32, 480, 24, "Save Map", SaveMap)); main.AddComponent(new PhButton(10, y += 32, 480, 24, "Open Map", OpenMap)); main.AddComponent(new PhButton(10, y += 32, 480, 24, "Close Menu", CloseMenu)); main.AddComponent(new PhButton(10, y += 32, 480, 24, "Close Editor", CloseEditor)); windows.AddComponent(main); layerWindow = new PhWindow(100, 100, 500, 500, "Layers"); layerWindow.Ghost = true; for (int i = 0; i < layers.Count; i++) layerWindow.AddComponent(new PhButton(10, 30+i*32, 480, 24, layers[i].Name, SelectLayer)); windows.AddComponent(layerWindow); tilesWindow = new PhWindow(100, 100, 500, 500, "Tiles"); tilesWindow.Ghost = true; int x = 10; y = 30; tilesWindow.AddComponent(new PhButton(x, y, 160, 24, "<none>", SelectEntity)); y += 32; for (int i = 0; i < MapLoader.TileList.Length; i++) { tilesWindow.AddComponent(new PhButton(x, y, 160, 24, MapLoader.ShortTypeName(MapLoader.TileList[i]), SelectEntity)); y += 32; if (y > 500 - 32) { x += 168; y = 30; } } windows.AddComponent(tilesWindow); entitiesWindow = new PhWindow(100, 100, 500, 500, "Entities"); entitiesWindow.Ghost = true; x = 10; y = 30; for (int i = 0; i < MapLoader.EntityList.Length; i++) { entitiesWindow.AddComponent(new PhButton(x, y, 160, 24, MapLoader.ShortTypeName(MapLoader.EntityList[i]), SelectEntity)); y += 32; if (y > 500 - 32) { x += 168; y = 30; } } windows.AddComponent(entitiesWindow); }
private void CloseProperties(PhControl sender) { propertiesWindow.Hide(); windows.RemoveComponent(propertiesWindow); propertiesWindow = null; }