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); } } }
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); }
// 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); }