public SelectableDisplayObject ShowBuilding(Building building, TilePosition positionForDisplay) { GameObject model = null; for (int i = 0; i < buildingDisplay.Length; i++) { if (buildingDisplay[i] != null && buildingDisplay[i].Type == building.Type) { model = buildingDisplay[i].Model; break; } } if (model == null) { model = DebugBuildingPreviewPrefab; } GameObject gameObject = GameObject.Instantiate( model, new Vector3(positionForDisplay.X, positionForDisplay.Height * LevelHeightOffset, positionForDisplay.Y), Quaternion.identity, BuildingsParent.transform ); RotateGameObject(gameObject, building.Rotation); SelectableDisplayObject selectableDisplayObject = gameObject.GetComponentInChildren<SelectableDisplayObject>(); selectableDisplayObject.AssignModelObject(building); building.AssignDisplayObject(selectableDisplayObject); return selectableDisplayObject; }
public void AssignDisplayObject(SelectableDisplayObject displayObject) { if (displayObject is CharacterDisplayObject) { DisplayObject = (CharacterDisplayObject)displayObject; } else if (displayObject == null) { DisplayObject = null; } }
void DoRaycast() { ray = Camera.main.ScreenPointToRay(Input.mousePosition); charactersHit.Clear(); buildingsHit.Clear(); // To zwraca wszystkie collidery int hitNumber = Physics.RaycastNonAlloc(ray, raycastResults, rayMaxDistance, rayLayerMask, QueryTriggerInteraction.Ignore); for (int i = 0; i < hitNumber; i++) { SelectableDisplayObject hitDisplayObject = raycastResults[i].transform.GetComponentInParent <SelectableDisplayObject>(); if (hitDisplayObject.ModelObject is Character) { charactersHit.Add((Character)hitDisplayObject.ModelObject, raycastResults[i]); } else if (hitDisplayObject.ModelObject is ConstructionSite) { buildingsHit.Add(((ConstructionSite)hitDisplayObject.ModelObject).Building, raycastResults[i]); } else if (hitDisplayObject.ModelObject is Building) { if (buildingsHit.ContainsKey((Building)hitDisplayObject.ModelObject) == false) { buildingsHit.Add((Building)hitDisplayObject.ModelObject, raycastResults[i]); } } } if (charactersHit.Count > 0) { Character selectedCharacter = null; float distance = rayMaxDistance; foreach (Character character in charactersHit.Keys) { float newDistance = Mathf.Abs(Vector3.Magnitude( Camera.main.transform.position - charactersHit[character].point)); if (newDistance < distance) { distance = newDistance; selectedCharacter = character; } } // Mamy postać! Select(selectedCharacter); } else if (buildingsHit.Count > 0) { Building selectedBuilding = null; float distance = rayMaxDistance; foreach (Building building in buildingsHit.Keys) { float newDistance = Mathf.Abs(Vector3.Magnitude( Camera.main.transform.position - buildingsHit[building].point)); if (newDistance < distance) { distance = newDistance; selectedBuilding = building; } } // Mamy budynek! Select(selectedBuilding); } else { // Nie trafiliśmy nic RemoveSelection(); } }
public void AssignDisplayObject(SelectableDisplayObject displayObject) { DisplayObject = displayObject; }