Ejemplo n.º 1
0
 public void ConnectTo(FungusNode other)
 {
     if (!nodeConnections.Contains (other)) {
         nodeConnections.Add (other);
         pendingPaths.Add (new PathRequest (this, other));
     }
 }
Ejemplo n.º 2
0
 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);
     }
 }
Ejemplo n.º 3
0
        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 ();
            }
        }
Ejemplo n.º 4
0
        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);
            }
        }
Ejemplo n.º 5
0
        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;
            }
        }
Ejemplo n.º 6
0
        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 ();
            }
        }
Ejemplo n.º 7
0
        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);
            }
        }
Ejemplo n.º 8
0
        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);
            }
        }
Ejemplo n.º 9
0
        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 ();
            }
        }
Ejemplo n.º 10
0
 public SlimePath(FungusNode a, FungusNode b, List<Vector3> path)
 {
     this.a = a;
     this.b = b;
     fullPath = path;
 }
Ejemplo n.º 11
0
 void SpecializeNode(FungusNode fungusNode)
 {
     fungusNode.Specialize(selectedSkill);
 }
Ejemplo n.º 12
0
 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);
     }
 }
Ejemplo n.º 13
0
 void Start()
 {
     if (!rend)
     {
         rend = GetComponent<Renderer>();
     }
     if (!node)
     {
         node = GetComponentInParent<FungusNode>();
     }
     if (!node || !rend) { Destroy(gameObject); }
     SetupNodeConnection();
     SetupMaterial();
     SetupRange();
     SetupHP();
     SetupActive();
 }
Ejemplo n.º 14
0
 public abstract void StopExecution(FungusNode node);
Ejemplo n.º 15
0
 void CheckRemoveDisconnected(FungusNode node)
 {
     if (node == null) {
         return;
     }
     pendingAdds.Add (GetUpdateObject (node.transform.position, sgs.nodeSlimeExtend, true));
     if (!node.IsConnected) {
         GameWorld.Instance.OnNodeWasDisconnected (node);
     }
 }
Ejemplo n.º 16
0
 public bool HasPart(FungusNode node)
 {
     return a == node || b == node;
 }
Ejemplo n.º 17
0
 public PathRequest(FungusNode self, FungusNode other)
 {
     this.other = other;
     path = ABPath.Construct (self.transform.position, other.transform.position);
     AstarPath.StartPath (path);
 }
Ejemplo n.º 18
0
 public void OnNodeConnectionInitiated(FungusNode a, FungusNode b, List<Vector3> path)
 {
     slimeHandler.AddConnection (new SlimePath (a, b, path));
 }
Ejemplo n.º 19
0
 public override void StopExecution(FungusNode node)
 {
     GameObject.Destroy (attackAnimObj);
 }
Ejemplo n.º 20
0
 public void OnFungusNodeWasKilled(FungusNode node)
 {
     if (OnNodeDestroyed != null) {
         OnNodeDestroyed (node);
     }
     Destroy (node.gameObject);
 }
Ejemplo n.º 21
0
 /// <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);
 }
Ejemplo n.º 22
0
 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;
 }
Ejemplo n.º 23
0
 public void ForceConnectTo(FungusNode other)
 {
     if (!nodeConnections.Contains(other))
     {
         nodeConnections.Add(other);
         other.ConnectTo(this);
     }
 }
Ejemplo n.º 24
0
 public void DisconnectionFrom(FungusNode other)
 {
     nodeConnections.Remove (other);
 }
Ejemplo n.º 25
0
 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;
 }
Ejemplo n.º 26
0
 public abstract void Execute(FungusNode node);
Ejemplo n.º 27
0
 public void OnNodeWasDisconnected(FungusNode node)
 {
     if (destroyDisconnectedNodes && nodes.Count > 1) {
         Destroy (node.gameObject);
     }
 }
Ejemplo n.º 28
0
 public override void StopExecution(FungusNode node)
 {
 }