public bool Select_NextNamed() { bool changed = false; MapObjectNamed toBeSelected = null, cur = null; MapObjectNamed[] selectedObjects = GetSelectionNamed(); int i; if (SelectionNameless != null) { changed = true; SelectionNameless = null; } if (selectedObjects.Count() == 0) { if (NamedObjects.Count == 0) { return(changed); } NamedObjects[0].Selected = true; return(true); } if (selectedObjects.Count() == NamedObjects.Count) { if (NamedObjects.Count == 1) { return(changed); } for (i = NamedObjects.Count - 1; i >= 0; i--) { NamedObjects[i].Selected = false; } return(Select_NextNamed()); } i = 0; bool foundSelected = false; while (toBeSelected == null) { cur = NamedObjects[i]; if (!cur.Selected && foundSelected) { toBeSelected = cur; } if (selectedObjects.Contains(cur)) { foundSelected = true; } i = (i + 1) % NamedObjects.Count; } for (i = NamedObjects.Count - 1; i >= 0; i--) { NamedObjects[i].Selected = false; } toBeSelected.Selected = true; return(true); }
private void RemoveNamedObject(MapObjectNamed item) { if (item.Imported) { int j = 0; for (int i = 0; i < NamedObjects.Count && NamedObjects[i] != item; i++) { j += NamedObjects[i].Imported ? 1 : 0; } NamedIdList.RemoveAt(j); } NamedObjects.Remove(item); }
public bool Select_AtPoint(int x, int z, int pixelsInOne, double y_scale = 0.0, bool additive = false, bool removative = false) { List <MapObjectNamed> objectsSelectedUnderCursor = new List <MapObjectNamed>(); List <MapObjectNamed> objectsUnderCursor = new List <MapObjectNamed>(); List <MapObjectNamed> objectsSelectedNotUnderCursor = new List <MapObjectNamed>(); int i; bool changed = false; if (_selectionNameless != null) { changed = true; _selectionNameless = null; } foreach (MapObjectNamed item in NamedObjects) { if ((Math.Sqrt(Math.Pow(item.Coordinates.X_Scr - x, 2) + Math.Pow(item.Coordinates.Z_Scr - z, 2)) < item._selectionSize * (item._selectionAbsolute ? 1 : pixelsInOne)) || (Math.Sqrt(Math.Pow(item.Coordinates.X_Scr - x, 2) + Math.Pow(item.Coordinates.Z_Scr - item.Coordinates.Y_Scr * y_scale - z, 2)) < item._selectionSize * (item._selectionAbsolute ? 1 : pixelsInOne))) { objectsUnderCursor.Add(item); if (item.Selected) { objectsSelectedUnderCursor.Add(item); } } else { if (item.Selected) { objectsSelectedNotUnderCursor.Add(item); } } } if (additive) { //if there are objects under cursor that are not selected and those that are => select them in usual order if (objectsUnderCursor.Count > objectsSelectedUnderCursor.Count && objectsSelectedUnderCursor.Count > 0) { MapObjectNamed toBeSelected = null, cur = null; i = 0; bool foundSelected = false; while (toBeSelected == null) { cur = objectsUnderCursor[i]; if (!cur.Selected && foundSelected) { toBeSelected = cur; } if (objectsSelectedUnderCursor.Contains(cur)) { foundSelected = true; } i = (i + 1) % objectsUnderCursor.Count; } toBeSelected.Selected = true; return(true); } //if there are objects under cursor that are not selected and none under cursor are selected => select first from the list if (objectsUnderCursor.Count > 0 && objectsSelectedUnderCursor.Count == 0) { objectsUnderCursor[0].Selected = true; return(true); } return(changed); } if (removative) { if (objectsSelectedUnderCursor.Count > 0) { objectsSelectedUnderCursor[0].Selected = false; return(true); } return(changed); } //If more than one selected total and at least one selected under cursor => deselect everything and try again if (objectsSelectedUnderCursor.Count + objectsSelectedNotUnderCursor.Count > 1 && objectsSelectedUnderCursor.Count > 0) { for (i = NamedObjects.Count - 1; i >= 0; i--) { NamedObjects[i].Selected = false; } return(Select_AtPoint(x, z, pixelsInOne)); } //If there is something to select under cursor and nothing is selected there => just select first (and deselect everything else) if (objectsUnderCursor.Count > 0 && objectsSelectedUnderCursor.Count == 0) { for (i = NamedObjects.Count - 1; i >= 0; i--) { NamedObjects[i].Selected = false; } objectsUnderCursor[0].Selected = true; return(true); } //If only one object under cursor and its already selected => do nothing, let it remain selected if (objectsUnderCursor.Count == 1 && objectsSelectedUnderCursor.Count == 1) { return(changed); } //If there is something to select under cursor but something is already selected there = > we will select the next unselected after a selected one if (objectsUnderCursor.Count > 0 && objectsSelectedUnderCursor.Count > 0) { MapObjectNamed toBeSelected = null, cur = null; i = 0; bool foundSelected = false; while (toBeSelected == null) { cur = objectsUnderCursor[i]; if (!cur.Selected && foundSelected) { toBeSelected = cur; } if (objectsSelectedUnderCursor.Contains(cur)) { foundSelected = true; } i = (i + 1) % objectsUnderCursor.Count; } for (i = NamedObjects.Count - 1; i >= 0; i--) { NamedObjects[i].Selected = false; } toBeSelected.Selected = true; return(true); } //If there is nothing to select under cursor but something selected elsewhere - clear it if (objectsSelectedNotUnderCursor.Count > 0) { for (i = NamedObjects.Count - 1; i >= 0; i--) { NamedObjects[i].Selected = false; } return(true); } //If nothing is or was selected if (objectsSelectedNotUnderCursor.Count == 0 && objectsUnderCursor.Count == 0) { return(changed); } throw new Exception("Select_AtPoint reached the end in normal mode! This means an error in function's logic."); //return false; }
public object AddObject(string type, int posX = 0, int posY = 0, int posZ = 0, int angle = 0, bool makeSelected = false) { MapObjectNamed mo = null; MapObjectNameless nmo = null; switch (type) { case "station": mo = new MapObjectNamed_station(posX, posY, posZ, makeSelected, angle); break; case "neutral": mo = new MapObjectNamed_neutral(posX, posY, posZ, makeSelected, angle); break; case "player": mo = new MapObjectNamed_player(posX, posY, posZ, makeSelected, angle); break; case "monster": mo = new MapObjectNamed_monster(posX, posY, posZ, makeSelected, angle); break; case "Anomaly": mo = new MapObjectNamed_Anomaly(posX, posY, posZ, "", makeSelected); break; case "blackHole": mo = new MapObjectNamed_blackHole(posX, posY, posZ, "", makeSelected); break; case "enemy": mo = new MapObjectNamed_enemy(posX, posY, posZ, makeSelected, angle); break; case "genericMesh": mo = new MapObjectNamed_genericMesh(posX, posY, posZ, makeSelected, angle); break; case "whale": mo = new MapObjectNamed_whale(posX, posY, posZ, makeSelected, angle); break; case "nameless": nmo = new MapObjectNameless(posX, posY, posZ, ""); break; case "nebulas": nmo = new MapObjectNameless(posX, posY, posZ, "nebulas"); break; case "asteroids": nmo = new MapObjectNameless(posX, posY, posZ, "asteroids"); break; case "mines": nmo = new MapObjectNameless(posX, posY, posZ, "mines"); break; default: break; } if (mo == null && nmo == null) { throw new NotImplementedException("Attempting to add object of unknown type " + type); } if (mo != null) { NamedObjects.Add(mo); return(mo); } else { NamelessObjects.Add(nmo); if (makeSelected) { Select_None(); SelectionNameless = nmo; } return(nmo); } }
public void FromXml(string text) { XmlDocument xDoc = new XmlDocument(); try { xDoc.LoadXml(text); } catch (Exception ex) { Log.Add("Failed to load space map from xml for the following reasons:"); Log.Add(ex); return; } XmlNode root = null; foreach (XmlNode node in xDoc.ChildNodes) { if (node.Name == "createInput" || node.Name == "statementInput" || node.Name == "bgInput" || node.Name == "output") { root = node; } } if (root == null) { Log.Add("Failed to load space map from xml for the following reasons:"); Log.Add("Root node \"createInput\" or \"statementInput\" or \"bgInput\" or \"output\"not found!"); return; } if (root.Name == "createInput" || root.Name == "bgInput" || root.Name == "output") { bool bg = root.Name == "bgInput"; if (!bg) { Clear(); } foreach (XmlNode item in root.ChildNodes) { MapObjectNamed mo = MapObjectNamed.NewFromXml(item); MapObjectNameless nmo = MapObjectNameless.NewFromXml(item); if (bg) { if (mo != null) { BacgkroundNamedObjects.Add(mo); } if (nmo != null) { BackgroundNamelessObjects.Add(nmo); } } else { if (mo != null) { NamedObjects.Add(mo); } if (nmo != null) { NamelessObjects.Add(nmo); } } } } if (root.Name == "statementInput") { Clear(); SelectionSpecial = MapObjectSpecial.NewFromXml(root.ChildNodes[0]); } }