private void OnHotspotClicked( HotspotWidget hotspotWidget, WidgetEvent widgetEvent) { if (m_currentNavRef.IsValid) { WidgetEvent.MouseClickEventParameters eventParameters = widgetEvent.EventParameters as WidgetEvent.MouseClickEventParameters; Point2d clickPoint = new Point2d(eventParameters.worldX, eventParameters.worldY); HotspotInfo hotspotInfo = hotspotWidget.Userdata as HotspotInfo; switch (hotspotInfo.hotspotType) { case eHotspotType.energy_tank: { EnergyTankData energyTankData = hotspotInfo.hotspotEntity as EnergyTankData; m_contextOverlayController.OnEnergyTankClicked(clickPoint, energyTankData); } break; case eHotspotType.portal: { RoomPortal portal = hotspotInfo.hotspotEntity as RoomPortal; m_contextOverlayController.OnPortalClicked(clickPoint, portal); } break; } } }
// Events public void OnWidgetEvent(WidgetEvent widgetEvent) { if (widgetEvent.EventType == WidgetEvent.eEventType.mouseMove) { UpdateCurrentNavRef(); } if (widgetEvent.EventSource is HotspotWidget) { HotspotWidget hotspotWidget = widgetEvent.EventSource as HotspotWidget; switch (widgetEvent.EventType) { case WidgetEvent.eEventType.mouseOver: OnHotspotEntered(hotspotWidget); break; case WidgetEvent.eEventType.mouseOut: OnHotspotExited(); break; case WidgetEvent.eEventType.mouseClick: OnHotspotClicked(hotspotWidget, widgetEvent); break; } } UpdateMouseCursor(widgetEvent); }
private void UpdateMouseCursor(WidgetEvent widgetEvent) { if (widgetEvent.EventType == WidgetEvent.eEventType.mouseOver || widgetEvent.EventType == WidgetEvent.eEventType.mouseOut || widgetEvent.EventType == WidgetEvent.eEventType.mouseMove) { if (widgetEvent.EventSource is HotspotWidget) { HotspotWidget hotspotWidget = widgetEvent.EventSource as HotspotWidget; HotspotInfo hotspotInfo = hotspotWidget.Userdata as HotspotInfo; switch (hotspotInfo.hotspotType) { case eHotspotType.energy_tank: { EnergyTankData energyTankData = hotspotInfo.hotspotEntity as EnergyTankData; if (energyTankData.ownership != GameConstants.eFaction.player) { // If our faction doesn't control the energy tank, we'll have to hack it SetMouseCursorState(eMouseCursorState.hack_energy_tank); } else if (energyTankData.energy > 0) { // If our faction does control the energy tank, then we can drain it if it has energy SetMouseCursorState(eMouseCursorState.drain_energy_tank); } else { // Otherwise all we can do is walk to it SetMouseCursorState(eMouseCursorState.walk); } } break; case eHotspotType.portal: { Point2d hotspotCenter = hotspotWidget.WorldPosition.Offset(new Vector2d(hotspotWidget.Width / 2.0f, hotspotWidget.Height / 2.0f)); Point2d screenCenter = new Point2d(Screen.width / 2.0f, Screen.height / 2.0f); Vector2d vectorToHotspot = hotspotCenter - screenCenter; MathConstants.eDirection currentHotspotDirection = MathConstants.GetDirectionForVector(vectorToHotspot); switch (currentHotspotDirection) { case MathConstants.eDirection.left: SetMouseCursorState(eMouseCursorState.door_left); break; case MathConstants.eDirection.right: SetMouseCursorState(eMouseCursorState.door_right); break; case MathConstants.eDirection.up: SetMouseCursorState(eMouseCursorState.door_up); break; case MathConstants.eDirection.down: SetMouseCursorState(eMouseCursorState.door_down); break; default: SetMouseCursorState(eMouseCursorState.walk); break; } } break; default: { SetMouseCursorState(eMouseCursorState.defaultCursor); } break; } } else if (widgetEvent.EventSource is TileGridWidget) { if (m_currentNavRef.IsValid) { SetMouseCursorState(eMouseCursorState.walk); } else { SetMouseCursorState(eMouseCursorState.defaultCursor); } } else { SetMouseCursorState(eMouseCursorState.defaultCursor); } } }
private void OnHotspotEntered(HotspotWidget hotspotWidget) { CurrentHotspot = hotspotWidget; }