public void Convert(ConvertionActions action)
 {
     if (absolved || dead)
     {
         return;
     }
     currentAction      = action;
     convertionTimeLeft = convertionEffectTime;
 }
 private void Convert(ConvertionActions action)
 {
     Collider[] colliders = Physics.OverlapSphere(transform.position, convertionRadius);
     foreach (Collider collider in colliders)
     {
         PoorSoulController psc = collider.gameObject.GetComponentInChildren<PoorSoulController>();
         if (psc != null)
         {
             psc.Convert(action);
         }
     }
 }
Example #3
0
 private void Convert(ConvertionActions action)
 {
     Collider[] colliders = Physics.OverlapSphere(transform.position, convertionRadius);
     foreach (Collider collider in colliders)
     {
         PoorSoulController psc = collider.gameObject.GetComponentInChildren <PoorSoulController>();
         if (psc != null)
         {
             psc.Convert(action);
         }
     }
 }
    // Update is called once per frame
    void Update()
    {
        if (dead)
        {
            float direction = absolved ? 1 : -1;
            if (transform.position.y > heavenHeight || transform.position.y < -heavenHeight)
            {
                Debug.Log("Destroy dead body");
                Destroy(gameObject);
                return;
            }

            ascensionSpeed.y = Mathf.Clamp(ascensionSpeed.y + ascensionAccel * Time.deltaTime, 0, maxAscensionSpeed);
            transform.localPosition += ascensionSpeed * direction * Time.deltaTime;
        }

        if (currentAction != ConvertionActions.None)
        {
            float reaction = 0;
            if (reactions.TryGetValue(currentAction, out reaction))
            {
                belief += reaction * player.conversionPower * Time.deltaTime;
            }
            convertionTimeLeft -= Time.deltaTime;
            if (convertionTimeLeft <= 0)
            {
                convertionTimeLeft = 0;
                currentAction = ConvertionActions.None;
            }
            if (Vector3.Distance(transform.position, player.transform.position) > player.convertionRadius)
            {
                convertionTimeLeft = 0;
                currentAction = ConvertionActions.None;
            }

        }

        LookAtPlayer();
        if (absolved)            // DO nothing, just await for death
        {
            return;
        }
        if (confessed) // Follow player waiting for absolution
        {
            FollowPlayer();
            return;
        }
        belief = Mathf.Clamp(belief, 0, belief - beliefLostPerSecond * Time.deltaTime);
        if (IsConverted)
        {
            // if player is around, follow him peacefully. If not, stay in place enjoying your inner peace
            FollowPlayer();
        }
        else
        {
            // Chase the player if it's not being converted
            if (currentAction == ConvertionActions.None)
            {
                ChasePlayer();
            }
        }
        float beliefRatio = Mathf.Clamp(belief, 0, beliefForConversion) / beliefForConversion;
        halo.GetComponentInChildren<MeshRenderer>().material.color = Color.Lerp(Color.red, Color.yellow, beliefRatio);
        halo.transform.localPosition = Vector3.Slerp(halo.transform.localPosition, new Vector3(0, 0.5f + (beliefRatio * 0.5f), 0), 0.1f);
    }
 public void Convert(ConvertionActions action)
 {
     if (absolved || dead)
     {
         return;
     }
     currentAction = action;
     convertionTimeLeft = convertionEffectTime;
 }
    // Update is called once per frame
    void Update()
    {
        if (dead)
        {
            float direction = absolved ? 1 : -1;
            if (transform.position.y > heavenHeight || transform.position.y < -heavenHeight)
            {
                Debug.Log("Destroy dead body");
                Destroy(gameObject);
                return;
            }

            ascensionSpeed.y         = Mathf.Clamp(ascensionSpeed.y + ascensionAccel * Time.deltaTime, 0, maxAscensionSpeed);
            transform.localPosition += ascensionSpeed * direction * Time.deltaTime;
        }

        if (currentAction != ConvertionActions.None)
        {
            float reaction = 0;
            if (reactions.TryGetValue(currentAction, out reaction))
            {
                belief += reaction * player.conversionPower * Time.deltaTime;
            }
            convertionTimeLeft -= Time.deltaTime;
            if (convertionTimeLeft <= 0)
            {
                convertionTimeLeft = 0;
                currentAction      = ConvertionActions.None;
            }
            if (Vector3.Distance(transform.position, player.transform.position) > player.convertionRadius)
            {
                convertionTimeLeft = 0;
                currentAction      = ConvertionActions.None;
            }
        }


        LookAtPlayer();
        if (absolved)            // DO nothing, just await for death
        {
            return;
        }
        if (confessed) // Follow player waiting for absolution
        {
            FollowPlayer();
            return;
        }
        belief = Mathf.Clamp(belief, 0, belief - beliefLostPerSecond * Time.deltaTime);
        if (IsConverted)
        {
            // if player is around, follow him peacefully. If not, stay in place enjoying your inner peace
            FollowPlayer();
        }
        else
        {
            // Chase the player if it's not being converted
            if (currentAction == ConvertionActions.None)
            {
                ChasePlayer();
            }
        }
        float beliefRatio = Mathf.Clamp(belief, 0, beliefForConversion) / beliefForConversion;

        halo.GetComponentInChildren <MeshRenderer>().material.color = Color.Lerp(Color.red, Color.yellow, beliefRatio);
        halo.transform.localPosition = Vector3.Slerp(halo.transform.localPosition, new Vector3(0, 0.5f + (beliefRatio * 0.5f), 0), 0.1f);
    }