Example #1
0
 void Shoot(float power)
 {
     Debug.Log(power);
     if (power == 0)
     {
         return;
     }
     RaycastHit[] c = Physics.SphereCastAll(camera.ViewportPointToRay(new Vector3(.5f, .5f)), 2f, power / 200f);
     for (int i = 0; i < c.Length; i++)
     {
         RaycastHit hit = c[i];
         if (hit.collider != null)
         {
             Debug.Log(hit.collider.name);
             if (hit.collider.attachedRigidbody != null)
             {
                 hit.collider.attachedRigidbody.AddForceAtPosition(camera.transform.forward * power / (hit.distance), hit.point);
             }
             Killable k = (hit.collider.GetComponent <Killable>());
             if (k != null)
             {
                 k.Damage(power, hit.point);
             }
         }
     }
 }
Example #2
0
    public void Fire()
    {
        Vector3 shootPos = transform.position + transform.up * offset;

        hit = Physics2D.Raycast(shootPos, transform.up, 200f, mask);

        if (hit.collider != null)
        {
            GameObject go   = hit.collider.gameObject;
            Killable   kill = go.GetComponent <Killable>();

            if (kill)
            {
                kill.Damage(damage * Time.deltaTime);
            }

            /*
             * Rigidbody2D rb = go.GetComponent<Rigidbody2D>();
             *
             * if (rb) {
             *  rb.AddForce(transform.up * damage * Time.deltaTime);
             * }
             */
        }
    }
Example #3
0
    void OnParticleCollision(GameObject other)
    {
        int numCollisionEvents = system.GetCollisionEvents(other, events);

        Rigidbody rb       = other.GetComponent <Rigidbody>();
        Killable  killable = other.GetComponentInChildren <Killable>();

        if (ignoreKillables != null)
        {
            foreach (var k in ignoreKillables)
            {
                if (k == killable)
                {
                    return;
                }
            }
        }

        for (int i = 0; i < numCollisionEvents; i++)
        {
            Vector3 pos   = events[i].intersection;
            Vector3 force = events[i].velocity.normalized * bulletForce;
            if (killable)
            {
                killable.Damage(bulletDamage);
                PoolManager.GetPooledObject("Effects", "BloodSplatSmall", pos);
            }
            if (rb)
            {
                rb.velocity += force;
                //rb.AddForceAtPosition(force, pos);
            }
        }
    }
Example #4
0
    void OnCollisionEnter2D(Collision2D collision)
    {
        Killable killable = collision.gameObject.GetComponent <Killable>();

        if (killable)
        {
            killable.Damage(1);
            Destroy(this.gameObject);
        }
    }
Example #5
0
    void Shoot()
    {
        hit = Physics2D.Raycast(transform.position + (transform.up * offset), transform.up, 200f, mask);
        GameObject go = hit.collider ? hit.collider.gameObject : null;

        if (go && go.CompareTag("Player"))
        {
            Killable kill = go.GetComponent <Killable>();
            kill.Damage(damage);
        }
    }
Example #6
0
    void OnCollisionEnter2D(Collision2D coll)
    {
        gameObject.SetActive(false);
        Killable killable = coll.gameObject.GetComponent <Killable>();

        SoundController.PlayArrowHit();
        if (killable != null)
        {
            killable.Damage(5);
        }
        Destroy(gameObject);
    }
Example #7
0
    private void AttackLightning(Killable unit)
    {
        if (unit == null)
        {
            return;
        }

        AttackAnimation();

        LightningController.Attack(attackPosition, unit, -1 - 15f, 0.3f);
        unit.Damage(randomedDamage, type);
    }
Example #8
0
    void OnCollisionEnter2D(Collision2D coll)
    {
        gameObject.SetActive(false);
        ObjectController.CreateArrowHit(transform.position, transform.rotation, coll.gameObject.transform);
        Killable killable = coll.gameObject.GetComponent <Killable>();

        SoundController.PlayArrowHit();
        ObjectController.CreateSmallSmoke(transform.position + transform.right * 0.5f);
        Camera.main.GetComponent <FollowCamera>().Shake();
        if (killable != null)
        {
            killable.Damage(5);
        }
        Destroy(gameObject);
    }
    void OnCollisionEnter2D(Collision2D collision)
    {
        GameObject obj  = collision.collider.gameObject;
        Killable   kill = obj.GetComponent <Killable>();

        if (kill && kill.team != team)
        {
            kill.Damage(damage);

            if (killOnContact)
            {
                self.Die();
            }
        }
    }
Example #10
0
    public void Update(float deltaTime)
    {
        if (Vector2.Distance(target.mapPosition, mapPosition) > 0.1f)
        {
            Vector2 direction = (target.mapPosition - mapPosition);
            direction.Normalize();

            mapPosition += direction * deltaTime * speed;
            layer        = target.layer;
        }
        else
        {
            target.Damage(damage, towerType);
            Destroy();
        }
    }
    public void Update(float deltaTime)
    {
        if (Vector2.Distance(target.mapPosition, mapPosition) > 0.1f)
        {
            progress += deltaTime * speed;

            float x2 = target.mapPosition.x - startPosition.x;
            float y2 = target.mapPosition.y - startPosition.y;

            /*
             * Vector2 dx = new Vector2 (target.mapPosition.x, 0);
             * parabolicHeight = 1;
             *
             * Vector2 resultPosition = startPosition + progress*dx;
             *
             *
             * //resultPosition += (Vector2.up).normalized*parabolicHeight*( Mathf.Pow (progress*dx.x, 2) - (Mathf.Pow (target.mapPosition.x, 2)
             * //                                                            - (Mathf.Pow (target.mapPosition.x, 2) - target.mapPosition.y)*progress*dx.x/target.mapPosition.x ) );
             *
             * float x2 = Mathf.Abs (target.mapPosition.x - startPosition.x);
             * float y2 = target.mapPosition.y - startPosition.y ;
             * resultPosition -= (Vector2.up)*parabolicHeight*( Mathf.Abs (progress*dx.x)*( Mathf.Abs (progress*dx.x) - (x2*x2-y2)/x2));
             *
             * mapPosition = resultPosition;
             */

            /*
             * Vector2 direction = (new Vector2  (startPosition.x + (x2*x2-y2)/x2, 0)  - startPosition);
             * Vector2 resultPosition = startPosition + progress*direction;
             * resultPosition += (new Vector2 (direction.y, Mathf.Abs (direction.x))).normalized*parabolicHeight*(1 - Mathf.Pow (2*progress - 1, 2));
             * mapPosition = resultPosition;
             */

            Vector2 direction      = (target.mapPosition - startPosition);
            Vector2 resultPosition = startPosition + progress * direction;
            //resultPosition += (new Vector2 (direction.y, Mathf.Abs (direction.x))).normalized*parabolicHeight*(1 - Mathf.Pow (2*progress - 1, 2));
            mapPosition = resultPosition;

            layer = target.layer;
        }
        else
        {
            target.Damage(damage, towerType);
            Destroy();
        }
    }
Example #12
0
    private void AttackLazer(Killable unit)
    {
        if (unit == null)
        {
            return;
        }

        attackAnimatonTime = 0.3f;

        AttackAnimation();

        UpdateController.Timer(attackAnimatonTime / 2f, () => {
            new Lazer(attackPosition, unit, new Color(0, 1f, 1f), () => {
                unit.Damage(randomedDamage, type);
            }, 0.6f, 0.4f);
        });
    }
Example #13
0
    private void OnCollisionEnter(Collision collision)
    {
        //Debug.Log(collision.gameObject);
        Killable killable = collision.collider.GetComponent <Killable>();

        if (killable != null)
        {
            killable.Damage(damage);
        }
        if (explosionPrefab != null)
        {
            Instantiate(explosionPrefab, transform.position, Quaternion.Euler(collision.GetContact(0).normal));
        }

        particles.Stop();
        GetComponent <Light>().enabled    = false;
        GetComponent <Collider>().enabled = false;
    }
Example #14
0
    public override void LiveUpdate()
    {
        var displacement = (_initSpeed + MissileSpeed) * Time.deltaTime;
        var observationPosition = Universe.Current.ViewPort.transform.position;
        var toOberverSquared = (transform.position - observationPosition).sqrMagnitude;
        if (toOberverSquared < _rayCheckMaxDistSquared)
        {
            if (!_hasHit)
            {
                var missileRay = new Ray(transform.position, transform.forward);

                RaycastHit missileHit;

                if (Physics.Raycast(missileRay, out missileHit, displacement, _mask))
                {
                    if (missileHit.collider.gameObject != Owner)
                    {
                        _killable = missileHit.collider.GetComponentInParent<Killable>();
                        if (_killable != null)
                        {
                            if (PlayerController.Current.VehicleInstance != null && Owner == PlayerController.Current.VehicleInstance.gameObject)
                                HeadsUpDisplay.Current.TriggerCrosshairPulse();
                            _killable.Damage(Damage, missileHit.point, missileHit.normal, Owner);
                        }
                        var rBody = missileHit.collider.GetComponentInParent<Rigidbody>();
                        if (rBody != null)
                            rBody.AddForceAtPosition(MissileForce * missileRay.direction, missileHit.point, ForceMode.Impulse);
                        _hasHit = true;
                        _hitPosition = missileHit.point;
                        PlaceHitEffects(missileHit.point, missileHit.normal, missileHit.collider.gameObject.transform);
                    }
                }
            }
        }
        else
        {
            if (toOberverSquared > _stopDistanceSquared)
            {
                Stop();
            }
        }
        _shiftable.Translate(transform.forward * displacement);
    }
Example #15
0
    void Explode(GameObject[] targets)
    {
        foreach (GameObject target in targets)
        {
            Killable kill = target.GetComponent <Killable>();
            if (kill)
            {
                kill.Damage(damage);
            }
        }

        Instantiate(explodeParticles, transform.position, Quaternion.identity);

        Killable self = GetComponent <Killable>();

        if (self)
        {
            self.Die();
        }
    }
Example #16
0
    // Update is called once per frame
    void Update()
    {
        //Move shot towards target
        transform.position += (Target - transform.position).normalized * (Speed * Time.deltaTime);

        //Damage if shot lands and destroy shot object
        if (Vector3.Distance(transform.position, Target) < CheckDistance)
        {
            Collider[] victims = Physics.OverlapSphere(transform.position, Radius, LayerMask.GetMask("Enemies"));

            foreach (Collider victim in victims)
            {
                Killable victimKillable = victim.gameObject.GetComponent <Killable> ();

                victimKillable.Damage(Damage);
            }

            Destroy(gameObject);
        }
    }
Example #17
0
    private void Explode()
    {
        var explodeInstance = ResourcePoolManager.GetAvailable(ExplodePrefab, transform.position, transform.rotation); //(GameObject)Instantiate(ExplodePrefab, transform.position, transform.rotation);

        explodeInstance.transform.localScale = transform.localScale;
        var explodeShiftable = explodeInstance.GetComponent<Shiftable>();
        var ownerShiftable = GetComponent<Shiftable>();

        if (explodeShiftable != null && ownerShiftable != null)
        {
            var univPos = Universe.Current.GetUniversePosition(transform.position);
            explodeShiftable.SetShiftPosition(univPos);
        }

        var count = Physics.OverlapSphereNonAlloc(transform.position, MaxExplodeRadius, _damageColliders, _detectableMask);
        for (var i = 0; i < count; i++)
        {
            _detectable = _damageColliders[i].GetComponent<Detectable>();
            if (_detectable != null)
            {
                _killable = _detectable.TargetTransform.GetComponent<Killable>();
                var damage = Mathf.Round(MaxExplodeDamage * GetDamageFraction(_detectable.transform.position, transform.position, MinExplodeRadius, MaxExplodeRadius));
                _killable.Damage(damage, transform.position, Vector3.up, Owner);
            }
            var rBody = _damageColliders[i].GetComponentInParent<Rigidbody>();
            if (rBody != null)
                rBody.AddExplosionForce(MissileForce, transform.position, MaxExplodeRadius, 0f, ForceMode.Impulse);
        }

        Stop();
    }