private void OnStandClick(DataUnit dataUnit, Transform transform) { var data = new Dictionary <string, object>(); data.Add(typeof(DataUnit).FullName, dataUnit); data.Add(typeof(Transform).FullName, transform); OnUnitClick.OnNext(data); }
/// <summary> /// Check if there has been a click. Ifso then raycast and check if there has been clicked on a specific game object. Ifso fire an event with the click object as a parameter. /// </summary> private void CheckObjectsClick() { // Gives errors // if (Input.GetMouseButtonDown(0) && !_manager.SwipeController.IsSwipeHappening) if (Input.GetMouseButtonDown(0)) { var unitClick = new OnUnitClick(); var buildingClick = new OnBuildingClick(); var highlightClick = new OnHighlightClick(); Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition); RaycastHit hit; if (Physics.Raycast(ray, out hit)) { foreach (Unit unit in lm.CurrentLevel.CurrentPlayer.OwnedUnits) { if (unit.UnitGameObject.collider == hit.collider) { unitClick.unit = unit.UnitGameObject; break; } } foreach (Building building in lm.CurrentLevel.CurrentPlayer.OwnedBuildings) { if (building.BuildingGameObject.collider == hit.collider) { buildingClick.building = building.BuildingGameObject; break; } } foreach (HighlightObject highlightObj in highlight.HighlightObjects) { if (highlightObj.collider == hit.collider) { highlightClick.highlight = highlightObj; break; } } } if (unitClick.unit == null && highlightClick.highlight == null && !movement.NeedsMoving || (highlight.IsHighlightOn && unitClick.unit != null)) { highlight.ClearHighlights(); } EventHandler.dispatch(unitClick); EventHandler.dispatch(buildingClick); EventHandler.dispatch(highlightClick); } }
/// <summary> /// Gets called whenever an OnUnitClick event is fired. /// </summary> /// <param Name="evt"></param> public void ShowHighlight(OnUnitClick evt) { if (evt.unit != null) { if (!IsHighlightOn && !movement.NeedsMoving && !animInfo.IsAnimateFight) { UnitSelected = evt.unit; IsHighlightOn = true; if (!UnitSelected.UnitGame.HasMoved) { UnitSelected.UnitGame.PlaySound(UnitSoundType.Select); UnitSelected.SelectionBox.enabled = true; var movementListt = TileHelper.GetAllTilesWithinRange(UnitSelected.Tile.Coordinate, UnitSelected.UnitGame.MoveRange); foreach (var item in movementListt) { foreach (KeyValuePair <int, Tile> tile in item.Value) { if (!tile.Value.HasUnit() && tile.Value.environmentGameObject.EnvironmentGame.IsWalkable) { List <Node> path = movement.CalculateShortestPath(UnitSelected.Tile, tile.Value, false); if (path != null && path.Count <= UnitSelected.UnitGame.MoveRange) { tile.Value.Highlight.ChangeHighlight(HighlightTypes.highlight_move); HighlightObjects.Add(tile.Value.Highlight); } } } } attack.ShowAttackHighlights(UnitSelected, UnitSelected.UnitGame.GetAttackMoveRange); } else if (UnitSelected.UnitGame.CanAttackAfterMove && !UnitSelected.UnitGame.HasAttacked) { attack.ShowAttackHighlights(UnitSelected, UnitSelected.UnitGame.AttackRange); } } } }