예제 #1
0
    public void ChangeMaterial(StatusController.DotStatus status)
    {
        switch (status)
        {
        case StatusController.DotStatus.Controled:
            GetComponent <SpriteRenderer>().sprite = ControledSprite;

            break;

        case StatusController.DotStatus.Enemy:
            GetComponent <SpriteRenderer>().sprite = EnemySprite;

            break;

        case StatusController.DotStatus.Normal:
            GetComponent <SpriteRenderer>().sprite = NormalSprite;

            break;

        case StatusController.DotStatus.Poisoned:
            GetComponent <SpriteRenderer>().sprite = PoisonedSprite;

            break;

        case StatusController.DotStatus.Zombie:
            GetComponent <SpriteRenderer>().sprite = ZombieSprite;

            break;
        }
    }
예제 #2
0
    // Update is called once per frame
    void Update()
    {
        humans          = new List <GameObject>(GameObject.FindGameObjectsWithTag("Human"));
        indexMin        = -1;
        minimumDistance = 1000 * 1000 * 1000;
        if (status.currentStatus == StatusController.DotStatus.Zombie)
        {
            //Debug.Log(this.gameObject.name + " " + "Jest Zombie");
            for (int i = 0; i < humans.Count; i++)
            {
                dotStatus = humans[i].GetComponent <StatusController>().currentStatus;
                if (humans[i] != this)
                {
                    if (dotStatus != StatusController.DotStatus.Zombie && Vector2.Distance(transform.position, humans[i].transform.position) < minimumDistance)
                    {
                        var          layerMask = (1 << 8);
                        RaycastHit2D hit       = Physics2D.Raycast(transform.position,
                                                                   (humans[i].transform.position - transform.position).normalized,
                                                                   Vector3.Distance(transform.position, humans[i].transform.position), layerMask);
                        if (hit.collider == null)
                        {
                            indexMin        = i;
                            minimumDistance = Vector2.Distance(transform.position, humans[i].transform.position);
                        }
                    }
                }
            }
            //if (indexMin != -1) //Debug.Log("Zombie " + this.gameObject.name + "znalazl najblizszy cel " + humans[indexMin].name);
            //else Debug.Log("Zombie nie znalazl partnerki");
        }
        else if (status.currentStatus == StatusController.DotStatus.Enemy)
        {
            for (int i = 0; i < humans.Count; i++)
            {
                var          layerMask = (1 << 8);
                RaycastHit2D hit       = Physics2D.Raycast(transform.position,
                                                           (humans[i].transform.position - transform.position).normalized,
                                                           Vector3.Distance(transform.position, humans[i].transform.position), layerMask);
                if (hit.collider == null)
                {
                    dotStatus = humans[i].GetComponent <StatusController>().currentStatus;
                    if (dotStatus == StatusController.DotStatus.Controled)
                    {
                        indexMin        = i;
                        minimumDistance = Vector2.Distance(transform.position, humans[i].transform.position);
                    }
                }
            }
        }
        else if (status.currentStatus == StatusController.DotStatus.Normal || status.currentStatus == StatusController.DotStatus.Poisoned)
        {
            for (int i = 0; i < humans.Count; i++)
            {
                var          layerMask = (1 << 8);
                RaycastHit2D hit       = Physics2D.Raycast(transform.position,
                                                           (humans[i].transform.position - transform.position).normalized,
                                                           Vector3.Distance(transform.position, humans[i].transform.position), layerMask);
                if (hit.collider == null)
                {
                    dotStatus = humans[i].GetComponent <StatusController>().currentStatus;
                    if (dotStatus == StatusController.DotStatus.Zombie)
                    {
                        indexMin        = i;
                        minimumDistance = Vector2.Distance(transform.position, humans[i].transform.position);
                    }
                }
            }
        }


        if (indexMin != -1)
        {
            isUsingGrid = false;

            //Debug.Log(this.gameObject.name + " Widzi przeciwnika " + humans[indexMin].name + " I idzie do niego");

            GetComponent <Rigidbody2D>().velocity =
                (Time.deltaTime * GetComponent <DotStatistics>().movementSpeed
                 *(humans[indexMin].transform.position - transform.position).normalized
                 * 100f);
            if (gameObject.GetComponent <StatusController>().currentStatus == StatusController.DotStatus.Enemy)
            {
                GetComponent <Rigidbody2D>().velocity *= 0.5f;
            }
        }
        else
        {
            //Debug.Log("Zombie niech wraca na siatke");
            isUsingGrid = true;

            humansMovement.SetNearestCheckpointAsTarget(gameObject);
            //Debug.Log("BUILDING DETECTED");
        }
    }