/// <summary> /// Detects new nodes. /// WARNING: /// </summary> public void DetectNewNodes() { List <Transform> nodes = new List <Transform>(); int layerMask = ~((1 << 9) | (1 << 10)); foreach (Transform t in transform) { if (t.name.Contains("Node")) { createdNodes.Add(t.GetComponent <NavigationScript>()); RaycastHit hit; if (!Physics.SphereCast(t.position, t.lossyScale.y, t.forward, out hit, 0.01F, layerMask)) { nodes.Add(t); } else { // print ("Hit " + hit.transform.name + " " + t.localScale.y); } } } foreach (Transform n in nodes) { n.parent = gs.transform; n.GetComponent <NavigationScript>().parentHomeID = homeID; n.GetComponent <NavigationScript>().parentBasketID = basketID; n.GetComponent <NavigationScript>().parentResourceID = resourceID; gs.AddNode(n.gameObject); } gs.RecalculatePaths(); }
// Update is called once per frame void Update() { if (isPlayer) { if (Input.GetKeyDown(KeyCode.Mouse0)) { int layerMask = ~((1 << 10) | (1 << 8)); RaycastHit hit; if (Physics.SphereCast(Camera.main.transform.position, 0.5F, Camera.main.transform.forward, out hit, 7F, layerMask)) { print(hit.transform.name); if (hit.transform.name.Equals("Rock(Clone)")) { if (CurrentInventoryAmount() < maxCarryLimit) { rock++; Spawn rockSpawn = hit.transform.GetComponent <Spawn>(); List <NavigationScript> nodesToDestroy = rockSpawn.createdNodes; GraphScript gs = GameObject.Find("NavigationGraph").GetComponent <GraphScript>(); for (int i = 0; i < nodesToDestroy.Count; i++) { gs.nodes.Remove(nodesToDestroy[i]); Destroy(nodesToDestroy[i].gameObject); } Destroy(hit.transform.gameObject); gs.RecalculatePaths(); } } if (hit.transform.name.Equals("RockResource")) { if (hit.transform.gameObject.GetComponent <Generator>().transform.childCount < hit.transform.gameObject.GetComponent <Generator>().maxConcurrentResources) { hit.transform.gameObject.GetComponent <Generator>().SpawnResource(transform.position, -Random.Range((transform.position - hit.transform.position).magnitude / 6F, (transform.position - hit.transform.position).magnitude / 4F), Random.Range(110, 250)); } } if (hit.transform.name.Contains("basket")) { GameObject basket = hit.transform.gameObject; Storage basketStorage = basket.GetComponent <Storage>(); if (basketStorage.storedQuantity > 0) { rock += basketStorage.TakeResourcesFromPile(basketStorage.storedQuantity); } else { basketStorage.AddResourceIntoPile(Storage.Resource.Rock, rock); rock = 0; } } } } } }