public void ConnectTo(FungusNode other) { if (!nodeConnections.Contains (other)) { nodeConnections.Add (other); pendingPaths.Add (new PathRequest (this, other)); } }
public override void StopExecution(FungusNode node) { if (spores != null) { if (spores.GetComponent<ParticleSystem> ().isPlaying) { spores.GetComponent<ParticleSystem> ().Stop (); ParticleSystem.EmissionModule em = spores.GetComponent<ParticleSystem> ().emission; em.enabled = false; } GameObject.Destroy (sporeAnimObj); } }
public override void Execute(FungusNode node) { if (FungusResources.Instance.CurrentResources >= cost) { FungusResources.Instance.SubResources (cost); FungusCore core = GameWorld.Instance.CoreInRange (node.transform.position, radius); if (core != null) { core.ApplySpeedMod (newSpeed, node, speedUpTime); } } else { node.ToggleActive (); } }
private void InfluenceEnemiesInArea(FungusNode node, Quaternion sporeRot) { Vector3 rotatedVector = sporeRot * Vector3.forward; Vector3 dir = Vector3.Normalize (rotatedVector); //Vector3 tempVector = new Vector3 (0, 0, 0); Collider[] peopleCollider = Physics.OverlapBox (node.transform.position + dir * radius / 2, new Vector3 (influenceRadius / 2, 1, radius / 2), sporeRot, citizenLayer); //Debug.Log ("Caught Citizens with lure: " + peopleCollider.Length); Debug.DrawLine (node.transform.position, node.transform.position + dir * radius, Color.cyan, 4.0f); foreach (Collider c in peopleCollider) { c.GetComponent<Human> ().TriggerBehaviour ("Lure", node); Debug.DrawLine (node.transform.position, c.transform.position, Color.cyan); } }
private void InfluenceEnemyInArea(FungusNode node, Quaternion sporeRot) { Vector3 rotatedVector = sporeRot * Vector3.forward; Vector3 dir = Vector3.Normalize (rotatedVector); //Vector3 tempVector = new Vector3 (0, 0, 0); Collider[] peopleCollider = Physics.OverlapBox (node.transform.position + dir * radius / 2, new Vector3 (influenceRadius / 2, 1, radius / 2), sporeRot, citizenLayer); Debug.DrawLine (node.transform.position, node.transform.position + dir * radius, Color.cyan, 4.0f); if (peopleCollider.Length > 0) { Human h = peopleCollider [0].GetComponent<Human> (); h.SetBehaviour (growthIntelligence); h.TriggerBehaviour ("Infect", node); //h.gameObject.tag = "Infected"; infected = h.gameObject; } }
public override void Execute(FungusNode node) { if (FungusResources.Instance.CurrentResources >= cost) { //Create Animation Sprite Object if (sporeAnimObj == null) { sporeAnimObj = Instantiate (sporeAnimObjPrefab, node.transform.position, node.transform.rotation) as GameObject; sporeAnimObj.transform.SetParent (node.transform); sporeAnimObj.transform.localPosition = new Vector3 (0, 0.57f, 0); sporeAnimObj.transform.localRotation = Quaternion.Euler (90.0f, 0, 0); } if (sporeAnim == null) { sporeAnim = sporeAnimObj.GetComponent<Animator> (); } //Particles if (spores == null) { spores = Instantiate (growthSpores, new Vector3 (node.transform.position.x, node.transform.position.y + 0.5f, node.transform.position.z), Quaternion.Euler (Vector3.zero)) as GameObject; spores.transform.parent = node.transform; ParticleSystem.EmissionModule em = spores.GetComponent<ParticleSystem> ().emission; em.enabled = true; spores.GetComponent<ParticleSystem> ().Play (); } if (!spores.GetComponent<ParticleSystem> ().isPlaying) { spores.GetComponent<ParticleSystem> ().Play (); ParticleSystem.EmissionModule em = spores.GetComponent<ParticleSystem> ().emission; em.enabled = true; } Quaternion sporeRotation = Quaternion.Euler (new Vector3 (Wind.Instance.currentRotation.eulerAngles.x, -Wind.Instance.currentRotation.eulerAngles.z + 90.0f, Wind.Instance.currentRotation.eulerAngles.y)); spores.transform.rotation = sporeRotation; //InfluenceEnemyInArea (node, sporeRotation); if (infected == null) { sporeAnim.SetTrigger ("Attack"); InfluenceEnemyInArea (node, sporeRotation); } } else { node.ToggleActive (); } }
public override void Execute(FungusNode node) { //Create Animation Sprite Object if (attackAnimObj == null) { attackAnimObj = Instantiate (attackAnimObjPrefab, node.transform.position, node.transform.rotation) as GameObject; attackAnimObj.transform.SetParent (node.transform); attackAnimObj.transform.localRotation = Quaternion.Euler (90.0f, 0, 0); } if (attackAnim == null) { attackAnim = attackAnimObj.GetComponent<Animator> (); } attackAnim.SetTrigger ("Attack"); List<Human> enemiesInRadius = GameWorld.Instance.GetHumans (node.transform.position, radius); for (int i = 0; i < enemiesInRadius.Count; i++) { enemiesInRadius[i].ApplySpeedMod(slowDownSpeed, node, slowDownTime); } }
public override void Execute(FungusNode node) { //Create Animation Sprite Object if (attackAnimObj == null) { attackAnimObj = Instantiate (attackAnimObjPrefab, node.transform.position + Vector3.up * 0.1f, node.transform.rotation) as GameObject; attackAnimObj.transform.SetParent (node.transform); attackAnimObj.transform.localRotation = Quaternion.Euler (90.0f, 0, 0); } if (attackAnim == null) { attackAnim = attackAnimObj.GetComponent<Animator> (); } List<Human> enemiesInRadius = GameWorld.Instance.GetHumans (node.transform.position, radius); if (enemiesInRadius.Count > 0) { attackAnim.SetTrigger ("Attack"); } for (int i = 0; i < enemiesInRadius.Count; i++) { enemiesInRadius [i].Damage (node, damage); FungusResources.Instance.AddResources (5.0f); } }
public override void Execute(FungusNode node) { if (FungusResources.Instance.CurrentResources >= cost) { //Create Animation Sprite Object if (sporeAnimObj == null) { sporeAnimObj = Instantiate (sporeAnimObjPrefab, node.transform.position, node.transform.rotation) as GameObject; sporeAnimObj.transform.SetParent (node.transform); sporeAnimObj.transform.localPosition = new Vector3 (0, 0.57f, 0); sporeAnimObj.transform.localRotation = Quaternion.Euler (90.0f, 0, 0); } if (sporeAnim == null) { sporeAnim = sporeAnimObj.GetComponent<Animator> (); } sporeAnim.SetTrigger ("Attack"); FungusResources.Instance.SubResources (cost); if (spores == null) { spores = Instantiate (zombieSpores, node.transform.position, Quaternion.Euler (Vector3.zero)) as GameObject; spores.transform.parent = node.transform; spores.GetComponent<ParticleSystem> ().Play (); } if (!spores.GetComponent<ParticleSystem> ().isPlaying) { spores.GetComponent<ParticleSystem> ().Play (); } Quaternion sporeRotation = Quaternion.Euler (new Vector3 (Wind.Instance.currentRotation.eulerAngles.x, -Wind.Instance.currentRotation.eulerAngles.z + 90.0f, Wind.Instance.currentRotation.eulerAngles.y)); spores.transform.rotation = sporeRotation; InfluenceEnemiesInArea (node, sporeRotation); } else { node.ToggleActive (); } }
public SlimePath(FungusNode a, FungusNode b, List<Vector3> path) { this.a = a; this.b = b; fullPath = path; }
void SpecializeNode(FungusNode fungusNode) { fungusNode.Specialize(selectedSkill); }
void KillHumansInSlimeRadius(FungusNode growSource, Vector3 point) { var humans = citizensOnly ? GameWorld.Instance.GetHumans (point, StandardGameSettings.Get.connectionSlimeWidth * 0.75f, IntelligenceType.Citizen) : GameWorld.Instance.GetHumans (point, StandardGameSettings.Get.connectionSlimeWidth * 0.75f, IntelligenceType.Human); for (var i = 0; i < humans.Count; i++) { humans [i].Kill (growSource); } }
void Start() { if (!rend) { rend = GetComponent<Renderer>(); } if (!node) { node = GetComponentInParent<FungusNode>(); } if (!node || !rend) { Destroy(gameObject); } SetupNodeConnection(); SetupMaterial(); SetupRange(); SetupHP(); SetupActive(); }
public abstract void StopExecution(FungusNode node);
void CheckRemoveDisconnected(FungusNode node) { if (node == null) { return; } pendingAdds.Add (GetUpdateObject (node.transform.position, sgs.nodeSlimeExtend, true)); if (!node.IsConnected) { GameWorld.Instance.OnNodeWasDisconnected (node); } }
public bool HasPart(FungusNode node) { return a == node || b == node; }
public PathRequest(FungusNode self, FungusNode other) { this.other = other; path = ABPath.Construct (self.transform.position, other.transform.position); AstarPath.StartPath (path); }
public void OnNodeConnectionInitiated(FungusNode a, FungusNode b, List<Vector3> path) { slimeHandler.AddConnection (new SlimePath (a, b, path)); }
public override void StopExecution(FungusNode node) { GameObject.Destroy (attackAnimObj); }
public void OnFungusNodeWasKilled(FungusNode node) { if (OnNodeDestroyed != null) { OnNodeDestroyed (node); } Destroy (node.gameObject); }
/// <summary> /// untested, may crash /// </summary> public bool IsConnectedToBrain(FungusNode node) { FungusNode nearestToBrain = GetNearestFungusNode (core.transform.position); //TODO: replace with better guess (Vector Project + distance to projection (slimeradius)) HashSet<FungusNode> traversed = new HashSet<FungusNode> (); return RecurseIsConnectedToBrain (node, nearestToBrain, traversed); }
public List<FungusNode> GetFungusNodes(Vector3 position, float radius, FungusNode except = null) { List<FungusNode> rangeQuery = new List<FungusNode> (); for (int i = 0; i < nodes.Count; i++) { if (except == nodes [i]) { continue; } if (AstarMath.SqrMagnitudeXZ (nodes [i].transform.position, position) <= radius * radius) { rangeQuery.Add (nodes [i]); } } return rangeQuery; }
public void ForceConnectTo(FungusNode other) { if (!nodeConnections.Contains(other)) { nodeConnections.Add(other); other.ConnectTo(this); } }
public void DisconnectionFrom(FungusNode other) { nodeConnections.Remove (other); }
bool RecurseIsConnectedToBrain(FungusNode searchNode, FungusNode currentNode, HashSet<FungusNode> traversed) { if (searchNode == currentNode) { return true; } for (int i = 0; i < currentNode.Connections.Count; i++) { if (!traversed.Add (currentNode.Connections [i])) { continue; } if (RecurseIsConnectedToBrain (searchNode, currentNode.Connections [i], traversed)) { return true; } } return false; }
public abstract void Execute(FungusNode node);
public void OnNodeWasDisconnected(FungusNode node) { if (destroyDisconnectedNodes && nodes.Count > 1) { Destroy (node.gameObject); } }
public override void StopExecution(FungusNode node) { }