Ejemplo n.º 1
0
 private void DispatchEnemyDied(HitInformation hitInformation)
 {
     if (OnEnemyDiedEvent != null)
     {
         OnEnemyDiedEvent(hitInformation);
     }
 }
Ejemplo n.º 2
0
    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);
    }
Ejemplo n.º 3
0
        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);
        }
Ejemplo n.º 4
0
        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;
        }
Ejemplo n.º 5
0
    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);
        }
    }
Ejemplo n.º 6
0
        public override void Hit(HitInformation hitInformation)
        {
            base.Hit(hitInformation);

            if (!gameObject.activeInHierarchy)
            {
                return;
            }

            if (pushRoutine != null)
            {
                StopCoroutine(pushRoutine);
                pushRoutine = null;
            }
            pushRoutine = StartCoroutine(PushBackRoutine(hitInformation));
        }
Ejemplo n.º 7
0
        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));
        }
Ejemplo n.º 8
0
        /// <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);
        }
Ejemplo n.º 9
0
 private void OnEnemyDied(HitInformation hitInformation)
 {
     AddScore(ENEMY_SCORE);
 }
Ejemplo n.º 10
0
 public virtual void Hit(HitInformation hitInformation)
 {
     lastHitInformation = hitInformation;
     attributePool.GetAttribute(AttributeType.Health)
     .ChangeValue(-lastHitInformation.Weapon.GetWeaponDefinition().GetDamage());
 }
Ejemplo n.º 11
0
        /*
         * 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);
        }