private void DispatchEnemyDied(HitInformation hitInformation) { if (OnEnemyDiedEvent != null) { OnEnemyDiedEvent(hitInformation); } }
public HitInformation[] GetHitInformations() { HitInformation[] hitInformations = new HitInformation[RaysNumber]; Vector3 startPos = transform.TransformPoint(startOffset); float[] raysAngles = GetRayAngles(raysPerDirection, maxRayDegrees); for (int i = 0; i < hitInformations.Length; ++i) { Vector3 endPos = startPos + transform.rotation * (Quaternion.Euler(rayOrientation) * Quaternion.AngleAxis(raysAngles[i], Vector3.up) * Vector3.forward) * rayLength + endOffset; Vector3 rayDirection = Vector3.Normalize(endPos - startPos); RaycastHit rayHit; bool hasHit = Physics.Raycast(startPos, rayDirection, out rayHit, rayLength, rayLayerMask); GameObject hitObject = hasHit ? rayHit.collider.gameObject : null; float distance = hasHit ? rayHit.distance : 10000f; hitInformations[i] = new HitInformation { hasHit = hasHit, hitObject = hitObject, distance = distance, direction = rayDirection }; } return(hitInformations); }
public virtual void Hit(HitInformation hitInformation) { lastHitInformation = hitInformation; int hitDamage = lastHitInformation.Weapon.GetWeaponDefinition().GetDamage() - (int)attributePool.GetAttribute(AttributeType.Armor).CurrentValue; hitDamage = Mathf.Clamp(hitDamage, 0, lastHitInformation.Weapon.GetWeaponDefinition().GetDamage()); attributePool.GetAttribute(AttributeType.Health) .ChangeValue(-hitDamage); }
private IEnumerator PushBackRoutine(HitInformation hitInformation) { Vector3 direction = hitInformation.HitPosition - hitInformation.Shooter.transform.position; rigidbody.isKinematic = false; rigidbody.AddForce(direction.normalized * 30, ForceMode.Impulse); yield return(new WaitForSeconds(0.05f)); rigidbody.isKinematic = true; }
void DrawRaycastGizmos(HitInformation hi, float alpha = 1.0f) { // Color color = Color.Lerp(rayHitColor, rayMissColor, Mathf.Pow(hi.distance / RayLength, 2f)); Color color = hi.hasHit ? rayHitColor : rayMissColor; color.a *= alpha; Gizmos.color = color; Gizmos.DrawRay(transform.TransformPoint(startOffset), hi.direction * (hi.hasHit ? hi.distance : rayLength)); // Draw the hit point as a sphere. If using rays to cast (0 radius), use a small sphere. if (hi.hasHit) { Gizmos.DrawWireSphere(transform.TransformPoint(startOffset) + hi.direction * hi.distance, displayHitSphereRadius); } }
public override void Hit(HitInformation hitInformation) { base.Hit(hitInformation); if (!gameObject.activeInHierarchy) { return; } if (pushRoutine != null) { StopCoroutine(pushRoutine); pushRoutine = null; } pushRoutine = StartCoroutine(PushBackRoutine(hitInformation)); }
public override void Hit(HitInformation hitInformation) { base.Hit(hitInformation); if (!gameObject.activeInHierarchy) { return; } pathAgentController.SetDestination(hitInformation.Shooter.transform.position); if (pushRoutine != null) { StopCoroutine(pushRoutine); pushRoutine = null; } //pushRoutine = StartCoroutine(PushBackRoutine(hitInformation)); }
/// <summary> /// initialize component /// </summary> /// <returns>is initialization success</returns> public virtual bool initialize() { m_SphereCollider = GetComponent <SphereCollider>(); if (!m_SphereCollider) { Debug.LogError("SphereCollider component missing." + " < " + this.ToString() + ">"); return(false); } m_Rigidbody = GetComponent <Rigidbody>(); if (!m_Rigidbody) { Debug.LogError("cannot find 'Rigidbody' component." + " < " + this.ToString() + ">"); return(false); } m_HitInfo = new HitInformation(); return(true); }
private void OnEnemyDied(HitInformation hitInformation) { AddScore(ENEMY_SCORE); }
public virtual void Hit(HitInformation hitInformation) { lastHitInformation = hitInformation; attributePool.GetAttribute(AttributeType.Health) .ChangeValue(-lastHitInformation.Weapon.GetWeaponDefinition().GetDamage()); }
/* * private void DispatchGameStarted() * { * if (GameStartedEvent != null) * GameStartedEvent(); * * } * * private void SpawnPlayer() * { * PlayerUnit playerClone = Instantiate(playerPrefab).GetComponent<PlayerUnit>(); * playerClone.transform.SetParent(this.transform); * playerClone.Initialize(); * * Transform randomSpawnPosition = GetRandomSpawPoint(); * playerClone.transform.position = randomSpawnPosition.position; * * DispatchOnPlayerSpawnEvent(playerClone); * } * * private void DispatchOnPlayerSpawnEvent(PlayerUnit targetPlayer) * { * if (OnPlayerSpawnEvent != null) * OnPlayerSpawnEvent(targetPlayer); * }*/ public void EnemyDied(HitInformation lastHitInformation) { DispatchEnemyDied(lastHitInformation); }