Esempio n. 1
0
    //Clear snapped from cache and clean up any dictionaries
    public IEnumerator RemoveSnapper(BuildingSnapper snapper)
    {
        buildingSnappers[snapper.buildingType][snapper.transform.position].Remove(snapper);
        Vector3       pos  = snapper.transform.position;
        BuildingTypes type = snapper.buildingType;

        //No more supports exist at this snapper's position - if a building component exists there, destroy it
        if (buildingSnappers[type][pos].Count == 0)
        {
            if (type != BuildingTypes.foundation)
            {
                if (structures[type].ContainsKey(pos))
                {
                    NewBuildingComponent component = structures[type][pos];
                    yield return(new WaitForSeconds(delayDominoTime));

                    if (component)
                    {
                        Destroy(component.gameObject);
                    }
                }
            }
            buildingSnappers[type].Remove(pos);
        }
        else  //Activate the most recently instantiated snapper at this position
        {
            EnableLastSnapperAtPos(type, pos);
        }
    }
Esempio n. 2
0
 // Update is called once per frame
 void Update()
 {
     if (Input.GetKeyDown(KeyCode.Mouse0))
     {
         RaycastHit hit = new RaycastHit();
         if (Physics.Raycast(transform.position, child.forward, out hit, 100, layerMask, QueryTriggerInteraction.Ignore))
         {
             BuildingSnapper snapper = hit.transform.GetComponentInParent <BuildingSnapper>();
             if (snapper)
             {
                 if (snapper.faceCamera)
                 {
                     Vector3 one = new Vector3(transform.position.x, 0, transform.position.z);
                     Vector3 two = new Vector3(snapper.transform.position.x, 0, snapper.transform.position.z);
                     snapper.transform.rotation         = Quaternion.LookRotation(one - two, Vector3.up);
                     snapper.transform.localEulerAngles = new Vector3(0, Mathf.Round(snapper.transform.localEulerAngles.y / 90) * 90, 0);
                 }
                 Instantiate(buildingComponents[(int)snapper.buildingType], snapper.transform.position, snapper.transform.rotation);
                 snapper.gameObject.SetActive(false);
             }
         }
     }
     else if (Input.GetKeyDown(KeyCode.Mouse1))
     {
         RaycastHit hit = new RaycastHit();
         if (Physics.Raycast(transform.position, child.forward, out hit, 100, layerMask, QueryTriggerInteraction.Ignore))
         {
             if (hit.transform.GetComponent <NewBuildingComponent>())
             {
                 Destroy(hit.transform.GetComponentInParent <NewBuildingComponent>().gameObject);
             }
         }
     }
 }
Esempio n. 3
0
    //Add snapper
    public void AddSnapper(BuildingSnapper snapper)
    {
        if (buildingSnappers[snapper.buildingType].ContainsKey(snapper.transform.position) == false)
        {
            buildingSnappers[snapper.buildingType].Add(snapper.transform.position, new List <BuildingSnapper>());
        }
        else
        { //Deactivate last one at this position
            List <BuildingSnapper> snapperList = buildingSnappers[snapper.buildingType][snapper.transform.position];
            if (snapperList != null)
            {
                if (snapperList.Count > 1)
                {
                    snapperList[snapperList.Count - 1].gameObject.SetActive(false);
                }
            }
        }

        buildingSnappers[snapper.buildingType][snapper.transform.position].Add(snapper);
    }