private void MoveEdges(GameTime time)
{
// Wenn die Maus über einer Kante oder einem Pfeil liegt
IGameObject selectedObject = World.SelectedObject;
if (World.SelectedObject is Pipe || World.SelectedObject is Arrow) {
// Berechne die Mausposition in 3D
Vector3 currentMousePosition = World.Camera.To3D (position: Screen.InputManager.CurrentMousePosition, nearTo: selectedObject.Center);
// Wenn die Maus gedrückt gehalten ist und wir mitten im Ziehen der Kante
// an die neue Position sind
if (Screen.InputManager.CurrentInputAction == InputAction.SelectedObjectShadowMove) {
// Wenn dies der erste Frame ist...
if (previousMousePosition == Vector3.Zero) {
previousMousePosition = currentMousePosition;
// dann erstelle die Shadowobjekte und fülle die Liste
// CreateShadowModels ();
}
// Setze die Positionen der Shadowobjekte abhängig von der Mausposition
if (selectedObject is Arrow) {
// Wenn ein Pfeil selektiert wurde, ist die Verschiebe-Richtung eindeutig festgelegt
UpdateShadowPipes (currentMousePosition, (selectedObject as Arrow).Direction, time);
}
else {
// Wenn etwas anderes (eine Kante) selektiert wurde,
// muss die Verschiebe-Richtung berechnet werden
Profiler.ProfileDelegate ["UpdShadowPipes"] = () => {
UpdateShadowPipes (currentMousePosition, time);
};
}
// Zeichne im nächsten Frame auf jeden Fall neu
World.Redraw = true;
}
// Wenn die Verschiebe-Aktion beendet ist (wenn die Maus losgelassen wurde)
else if (Screen.InputManager.CurrentInputAction == InputAction.SelectedObjectMove) {
// Führe die finale Verschiebung durch
if (selectedObject is Arrow) {
// Wenn ein Pfeil selektiert wurde, ist die Verschiebe-Richtung eindeutig festgelegt
MovePipes (currentMousePosition, (selectedObject as Arrow).Direction, time);
}
else {
// Wenn etwas anderes (eine Kante) selektiert wurde,
// muss die Verschiebe-Richtung berechnet werden
MovePipes (currentMousePosition, time);
}
//DestroyShadowModels ();
// Zeichne im nächsten Frame auf jeden Fall neu
World.Redraw = true;
}
// Keine Verschiebeaktion
else {
previousMousePosition = Vector3.Zero;
}
}
}