Ejemplo n.º 1
0
    void OnCollisionEnter2D(Collision2D CollisionInfo)
    {
        GameObject OtherObj = CollisionInfo.collider.gameObject;

        if (OtherObj != Owner)
        {
            if (OtherObj.tag == "Player")
            {
                GPlayer     PlayerScript = OtherObj.GetComponent <GPlayer>();
                FPlayerInfo PlayerInfo   = PlayerScript.GetPlayerInfo();

                float TotalDamage = PlayerInfo.Health * 0.65f;

                FDamageInfo DamageInfo = new FDamageInfo();
                DamageInfo.DamageDone = TotalDamage;

                PlayerScript.SendMessage("TakeDamage", DamageInfo);

                Destroy(this.gameObject);
            }
            else if (OtherObj.tag == "Environment")
            {
                //TODO::Splash damage
                Destroy(this.gameObject);
            }
        }
    }
Ejemplo n.º 2
0
    private IEnumerator Detonate()
    {
        yield return(new WaitForSeconds(DetonationTime));

        Vector3 GrenadePosition = transform.position;

        for (int PlayerIdx = 0; PlayerIdx < PlayerObjects.Length; ++PlayerIdx)
        {
            GameObject PlayerObj      = PlayerObjects[PlayerIdx];
            Vector3    PlayerPosition = PlayerObj.transform.position;

            float DistanceSquared = (PlayerPosition - GrenadePosition).sqrMagnitude;
            if (DistanceSquared < BlastRadiusSquared)
            {
                FDamageInfo DamageInfo = new FDamageInfo();
                DamageInfo.DamageDone    = MaxDamage / DistanceSquared;
                DamageInfo.DamageImpulse = BlastImpulse / DistanceSquared;
                DamageInfo.DamageOrigin  = gameObject.transform.position;
                PlayerObj.GetComponent <GPlayer>().TakeDamage(DamageInfo);
            }
        }

        GameObject GrenadeExplosion = Instantiate <GameObject>(Resources.Load("Prefabs/Gameplay/Weapons/GrenadeExplosion") as GameObject);

        GrenadeExplosion.transform.position = GrenadePosition;
        Destroy(GrenadeExplosion, 1.0f);

        Destroy(this.gameObject);
    }
Ejemplo n.º 3
0
    public void TakeDamage(FDamageInfo DamageInfo)
    {
        if (bCanBeDamaged)
        {
            ElapsedHealthRegenDelay = 0;

            Health -= DamageInfo.DamageDone;
            if (DamageInfo.DamageImpulse > 0)
            {
                // Apply an impulse from the direction the damage is coming from.
                Vector3 ImpulseDirection = transform.position - DamageInfo.DamageOrigin;
                ImpulseDirection.Normalize();

                PhysicsBody.AddForce(DamageInfo.DamageImpulse * ImpulseDirection, ForceMode2D.Force);
            }

            float CurrentGrenadeImpulse = PlayerActions.GetGrenadeImpulse();
            if (CurrentGrenadeImpulse > 0)
            {
                PlayerActions.ReleaseGrenade();
            }
        }
    }