private void AddAdvancedSearchButton(int row, int mapObjectId) { Button advancedSearchBtn = CreateAdvancedSearchButton(); Grid.SetRow(advancedSearchBtn, row); Grid.SetColumn(advancedSearchBtn, DynamicGrid.ColumnDefinitions.Count - 1); DynamicGrid.Children.Add(advancedSearchBtn); advancedSearchBtn.Click += (s, e) => { MapObject chosenMapObject = new MapObjectController().GetMapObjectById(mapObjectId); selectedObjectId = chosenMapObject.Id; if (chosenMapObject.MapObjectDescription == null) { ShowHospitalMapPage(); } else { MapObjectDescription description = chosenMapObject.MapObjectDescription; ShowBuildingPage(description.FloorNumber, description.BuildingId); } this.Close(); }; }
public void SetCursorOn(MapObjectType type, MapData mapData) { this.currentCursorType = type; cursorDescription = objectsMapper.GetDescriptionByType(type); positiveCursor = cursorDescription.PositiveCursor; positiveRotator = positiveCursor.GetComponent <BuildingBlockRotator>(); negativeCursor = cursorDescription.NegativeCursor; negativeRotator = negativeCursor.GetComponent <BuildingBlockRotator>(); this.mapData = mapData; isCursorOn = true; }
private bool CanIBuildAndWhere(Vector3Int parentPosition, Vector3 raycastPosition, out Vector3Int newCursorPosition) { MapObjectType parentType = mapData.GetObjectTypeAt(parentPosition); MapObjectDescription parentDescription = objectsMapper.GetDescriptionByType(parentType); BuildCondition.RelativePosition relativePosition; bool canBuildHere = parentDescription.CanBeBuildNearMe(CurrentCursorType, out relativePosition); newCursorPosition = parentPosition; if (!canBuildHere) { newCursorPosition = parentPosition; return(canBuildHere); } else { /// If maybe can build //// switch (relativePosition) { case BuildCondition.RelativePosition.OVER: newCursorPosition.y += parentDescription.Dimensions.Height; break; case BuildCondition.RelativePosition.ON_THE_SIDE: // Let's fing appropriate position on side of the selected (raycast hit) map object /// // So far implementation for 1x1 objects only // Vector3Int frontPos = CalculateOnTheSidePosition(parentPosition, raycastPosition); newCursorPosition = frontPos; break; case BuildCondition.RelativePosition.INSTEAD: newCursorPosition = parentPosition; break; } if (relativePosition != BuildCondition.RelativePosition.INSTEAD) { //for (int ix = ) TODO: for building objects greater than 1x1x1? // for(int iy=) // for(int iz = ) MapObjectType type = mapData.GetObjectTypeAt(newCursorPosition); if (type != MapObjectType.AIR) { // if candidate place is already occupied /// // Let's check if we can replace object in the cell /// MapObjectDescription candidatePlaceDescription = objectsMapper.GetDescriptionByType(type); BuildCondition.RelativePosition relPos; canBuildHere = candidatePlaceDescription.CanBeBuildNearMe(currentCursorType, out relPos); //Debug.Log("newCurPosType = " + type.ToString() + " " + canBuildHere + " " + relPos.ToString()); if (!canBuildHere || relPos != BuildCondition.RelativePosition.INSTEAD) { canBuildHere = false; } } } } // if (maybe can build) /// return(canBuildHere); } // CanIBuildAndWhere() /////