public void MouseMove(int x, int y) { // If our left mouse button is down, we can apply dragging // processing on our focused scene object. if (this.MouseLeftDown && this._curFocus != null) { this._curFocus.Drag(x, y); } // Make sure that we actually initialized the scene system. if (this._UIObject != null) { // Make sure that we actually have scene objects in our current state. if (this._UIObject[(int)Game.State] != null) { // Loop through all possible values for the ZOrder. for (int z = ZOrder.GetHighZ(); z >= 0; z--) { // Loop through every scene object we have in our current state. foreach (var obj in this._UIObject[(int)Game.State]) { obj.HasMouse = false; // Does the object's ZIndex match the ZOrder? if (obj.Z == z) { // Is the object visible? if (obj.Visible) { // Did we move our mouse within the area of the scene object? if (x >= obj.Left && x <= obj.Left + obj.Width) { if (y >= obj.Top && y <= obj.Top + obj.Height) { // We did. Invoke appropriate event-handling methods. obj.MouseMove(x - obj.Left, y - obj.Top); // We assume we have the object we moused over. // Return so that we don't apply similar logic on scene objects that // should not receive this processing. return; } } } // This break will break out of the current loop through all the scene objects for a respective Z value. // It ensures we don't waste time looking for another object that can't exist. break; } } } } } }
public void MouseDown(string button, int x, int y) { // Set the states of the appropriate mouse button to pressed. switch (button) { case "left": this.MouseLeftDown = true; break; case "middle": this.MouseMiddleDown = true; break; case "right": this.MouseRightDown = true; break; } // Make sure that the scene system has actually been initialized. if (this._UIObject != null) { // Make sure that we actually have scene objects in our current state. if (this._UIObject[(int)TowerDefense.State] != null) { // Loop through every possible ZOrder value. for (int z = ZOrder.GetHighZ(); z >= 0; z--) { // Loop through all the scene objects in our current state. foreach (var obj in this._UIObject[(int)TowerDefense.State]) { // Does the ZIndex match the ZOrder? if (obj.Z == z) { // Make sure that the object is visible. if (obj.Visible) { // Did we click within the area of the scene object? if (x >= obj.Left && x <= obj.Left + obj.Width) { if (y >= obj.Top && y <= obj.Top + obj.Height) { //If we had a previous scene object, let that object // know that it no longer has the focus. if (this._curFocus != null) { this._curFocus.HasFocus = false; } // Assign this scene object as our currently focused scene object and // let it know that it has our focus. this._curFocus = obj; this._curFocus.HasFocus = true; // Invoke the appropriate event handling methods. this._curFocus.MouseDown(x - obj.Left, y - obj.Top); this._curFocus.BeginDrag(x - obj.Left, y - obj.Top); // We assume that we have the object we clicked on. // Return so that we don't apply similar logic on scene objects that // should not receive this processing. return; } } } // This break will break out of the current loop through all the scene objects for a respective Z value. // It ensures we don't waste time looking for another object that can't exist. break; } } } } } }