예제 #1
0
    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;
    }
예제 #2
0
 public void AssignDisplayObject(SelectableDisplayObject displayObject)
 {
     if (displayObject is CharacterDisplayObject)
     {
         DisplayObject = (CharacterDisplayObject)displayObject;
     }
     else if (displayObject == null)
     {
         DisplayObject = null;
     }
 }
예제 #3
0
    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();
        }
    }
예제 #4
0
 public void AssignDisplayObject(SelectableDisplayObject displayObject)
 {
     DisplayObject = displayObject;
 }