Inheritance: MonoBehaviour
Exemple #1
0
 void Awake()
 {
     plant_list.Add(this);
     select    = GetComponent <Selectable>();
     destruct  = GetComponent <Destructible>();
     unique_id = GetComponent <UniqueID>();
 }
Exemple #2
0
    // Collision behavior
    public void OnCollisionEnter2D(Collision2D collision)
    {
        // Check if the collision was with a viable target
        foreach (string targetTag in collidableTags)
        {
            if (collision.collider.tag == targetTag)
            {
                //TODO add hit effect
                Destructible e = collision.collider.GetComponent <Destructible>();

                // Hit behavior (allow first frame tolerance so bullet doesn't collide with shooter upon spawn)
                if (e != null)
                {
                    // For simplicity, collision damage is not scaled with angle of contact since the "shell" is big
                    // Hence, there's some part of it that can be considered normal to the armor

                    // Calculate effective damage [Damage = mass1 * mass2 * relative velocity ^ 2 / 256 - effectiveDefense]
                    // Scaling factor by 1/256 to base damage to account for mass and velocity.
                    Rigidbody2D erb     = e.gameObject.GetComponent <Rigidbody2D>();
                    float       edamage = mass * erb.mass * Mathf.Pow((rb.velocity - erb.velocity).magnitude, 2) / 256 - e.defense;
                    float       damage  = edamage + e.defense - defense;
                    Debug.Log("Collision Damage" + damage);
                    e.TakeDamage(edamage);
                    TakeDamage(damage);
                }
            }
        }
    }
Exemple #3
0
    //Spawn an existing one in the save file (such as after loading)
    public static Plant Spawn(string uid)
    {
        SowedPlantData sdata = PlayerData.Get().GetSowedPlant(uid);

        if (sdata != null)
        {
            PlantData pdata = PlantData.Get(sdata.plant_id);
            if (pdata != null)
            {
                GameObject prefab = pdata.GetStagePrefab(sdata.growth_stage);
                GameObject build  = Instantiate(prefab, sdata.pos, prefab.transform.rotation);
                Plant      plant  = build.GetComponent <Plant>();
                plant.data                = pdata;
                plant.was_built           = true;
                plant.unique_id.unique_id = uid;

                Destructible destruct = plant.GetComponent <Destructible>();
                if (destruct != null)
                {
                    destruct.was_built = true;
                }
                return(plant);
            }
        }
        return(null);
    }
    public void explode()
    {
        Collider[] hits = Physics.OverlapSphere(transform.position, explosionRadius);
        foreach (var hit in hits)
        {
            GameObject   hitObj = hit.gameObject;
            float        DistanceDamageMultiplier = Vector3.Distance(transform.position, hitObj.transform.position) / 10;
            Destructible dst = hitObj.GetComponent <Destructible>();
            if (dst != null)
            {
                //Debug.Log("DAMAGE! " + kineticDamage * DistanceDamageMultiplier + " " + electricDamage * DistanceDamageMultiplier);
                dst.TakeDamage(kineticDamage * DistanceDamageMultiplier, electricDamage * DistanceDamageMultiplier);
            }
        }
        if (explosionEffectPrefab != null)
        {
            Instantiate(explosionEffectPrefab, transform.position, transform.rotation);
            //explosionEffect.Play();
        }
        if (soundEffect != null)
        {
            var sfx         = Instantiate(soundEffect, transform.position, transform.rotation);
            var audioSource = sfx.GetComponent <AudioSource>();
            audioSource.volume = GameManager.Instance.miscVolume;
            audioSource.Play();
            sfx.GetComponent <DelayedDestroyer>().StartCountdown();
        }

        killBullet();
    }
Exemple #5
0
    public void OnTriggerEnter2D(Collider2D collision)
    {
        if (pookie == null)
        {
            pookie = GameObject.FindGameObjectWithTag("Player");
        }
        if (collision.gameObject.tag == "Enemy")
        {
            enemy = (Enemy)collision.gameObject.GetComponent(typeof(Enemy));
            if (Time.time > nextDamage)
            {
                nextDamage = Time.time + damageCooldown;
                enemy.getDamaged(damage, pookie);
            }
        }

        if (collision.gameObject.tag == "Destructible")
        {
            Destructible destructible = (Destructible)collision.gameObject.GetComponent(typeof(Destructible));
            if (Time.time > nextDamage)
            {
                nextDamage = Time.time + damageCooldown;
                destructible.getDamaged(damage, pookie);
            }
        }
    }
    public void ExplodeLevePalette()
    {
        Instantiate(explosionEffect, transform.position, transform.rotation);
        CameraShaker.Instance.ShakeOnce(5f, 5f, .2f, 2f);
        FindObjectOfType <AudioManager>().Play("LevelPalette");
        Debug.Log("Boom from little car !");
        Collider[] collidersToDestroy = Physics.OverlapSphere(transform.position, radius);

        foreach (Collider nearbyObject in collidersToDestroy)
        {
            Destructible dest = nearbyObject.GetComponent <Destructible>();
            if (dest != null)
            {
                dest.Destroy();
                Destroy(this);
            }
        }
        Collider[] collidersToMove = Physics.OverlapSphere(transform.position, radius);

        foreach (Collider nearbyObject in collidersToMove)
        {
            Rigidbody rb = nearbyObject.GetComponent <Rigidbody>();
            if (rb != null)
            {
                rb.AddExplosionForce(force, transform.position, radius);
                Destroy(this);
            }
        }
    }
Exemple #7
0
 void OnDamage(Destructible sender, float damage)
 {
     if (sender.destroyed)
     {
         Impact();
     }
 }
    public int ReactToHit(Color color)   //color = color of gun
    {
        float r = rend.material.color.r, g = rend.material.color.g, b = rend.material.color.b;
        int   score = 0;

        //we take off the colors from the gun on the candy.
        if (color.r == 1 && r == 1)
        {
            r = 0;
            score++;
        }
        if (color.g == 1 && g == 1)
        {
            g = 0;
            score++;
        }
        if (color.b == 1 && b == 1)
        {
            b = 0;
            score++;
        }
        rend.material.color = new Color(r, g, b, 1.0f);
        if (r == g && r == b && r == 0) //if the candy has no more color, we destroy it.
        {
            Destructible des = GetComponent <Destructible>();
            des.Die();
        }
        return(score);
    }
Exemple #9
0
    void Shoot()
    {
        muzzleFlash.Play();

        currentAmmo--;

        RaycastHit hit;

        if (Physics.Raycast(weaponCamera.transform.position, weaponCamera.transform.forward, out hit, range))
        {
            Destructible target = hit.transform.GetComponent <Destructible>();

            if (target != null)
            {
                target.TakeDamage(damage);
            }
            if (hit.rigidbody != null)
            {
                hit.rigidbody.AddForce(-hit.normal * weaponStrength);
            }

            ParticleSystem bulletHole = Instantiate(impactEffect, hit.point, Quaternion.LookRotation(hit.normal));
            bulletHole.transform.SetParent(hit.transform);
        }
    }
Exemple #10
0
    //Spawn an existing one in the save file (such as after loading)
    public static Construction Spawn(string uid)
    {
        BuiltConstructionData bdata = PlayerData.Get().GetConstructed(uid);

        if (bdata != null)
        {
            ConstructionData cdata = ConstructionData.Get(bdata.construction_id);
            if (cdata != null)
            {
                GameObject   build     = Instantiate(cdata.construction_prefab, bdata.pos, cdata.construction_prefab.transform.rotation);
                Construction construct = build.GetComponent <Construction>();
                construct.data                = cdata;
                construct.was_built           = true;
                construct.unique_id.unique_id = uid;

                Destructible destruct = construct.GetComponent <Destructible>();
                if (destruct != null)
                {
                    destruct.was_built = true;
                }
                return(construct);
            }
        }
        return(null);
    }
Exemple #11
0
 public Attack(Destructible target, string layer, Entity entity) : base(entity)
 {
     this.target  = target;
     lastPosition = target.transform.position;
     ignoreLayer  = LayerMask.GetMask(layer);
     finalMask    = interactalbeLayer | doorLayer | projectileLayer | defaultLayer | ignoreLayer;
 }
Exemple #12
0
    public void FinishContruction()
    {
        building_mode      = false;
        is_overlap         = false;
        selectable.enabled = true;
        foreach (Collider collide in colliders)
        {
            collide.isTrigger = false;
        }

        destruct = GetComponent <Destructible>();
        if (destruct)
        {
            destruct.enabled   = true;
            destruct.was_built = true;
        }

        SetModelColor(Color.white);

        BuiltConstructionData cdata = PlayerData.Get().AddConstruction(data.id, SceneNav.GetCurrentScene(), transform.position);

        unique_id.unique_id = cdata.uid;

        if (build_fx != null)
        {
            Instantiate(build_fx, transform.position, Quaternion.identity);
        }
        TheAudio.Get().PlaySFX("construction", build_audio);

        if (onBuild != null)
        {
            onBuild.Invoke();
        }
    }
    void FireRay()
    {
        RaycastHit hit;


        Ray ray = new Ray(flameGameobject.transform.position, flameGameobject.transform.forward);

        if (Physics.Raycast(ray, out hit, 1000f))
        {
            if (hit.collider.tag == "environment" || hit.collider.tag == "Soldier")
            {
                Debug.Log("Collision with environment");
                Collider[] colliders = Physics.OverlapSphere(hit.point, explosionRadius);

                GameObject cubehit = Instantiate(GameObject.CreatePrimitive(PrimitiveType.Cube), hit.point, Quaternion.identity);
                Destroy(cubehit, 0.2f);
                foreach (Collider collider in colliders)
                {
                    Rigidbody rb = collider.GetComponent <Rigidbody>();
                    if (rb != null)
                    {
                        rb.AddExplosionForce(explosionForce, hit.point, explosionRadius);
                    }

                    Destructible dest = collider.GetComponent <Destructible>();
                    if (dest != null)
                    {
                        dest.Destroy();
                    }
                }
            }
        }
    }
    void Explosion()
    {
        if (Input.GetMouseButton(0))
        {
            Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);

            RaycastHit hit;

            if (Physics.Raycast(ray, out hit, 1000))
            {
                Collider[] colliders = Physics.OverlapSphere(hit.point, explosionRadius);

                foreach (Collider collider in colliders)
                {
                    Rigidbody rb = collider.GetComponent <Rigidbody>();
                    if (rb != null)
                    {
                        rb.AddExplosionForce(explosionForce, hit.point, explosionRadius);
                    }

                    Destructible dest = collider.GetComponent <Destructible>();
                    if (dest != null)
                    {
                        dest.Destroy();
                    }
                }
            }
        }
    }
Exemple #15
0
    // Use this for initialization
    void Start()
    {
        GameObject asteroidGroup = new GameObject();

        asteroidGroup.name = "Asteroid Field";
        for (float i = 0; i < totalNumberOfAsteroids; ++i)
        {
            Vector3 distance = (new Vector3(Random.value, Random.value, Random.value) - new Vector3(0.5f, 0.5f, 0.5f));
            distance.x *= distanceFromFactory.x;
            distance.y *= distanceFromFactory.y;
            distance.z *= distanceFromFactory.z;
            GameObject iAsteroid   = Instantiate(asteroids[Random.Range(0, asteroids.Length)], transform.position + distance, Random.rotation) as GameObject;
            float      randomScale = maxSize - (maxSize - minSize) * Random.value;
            iAsteroid.transform.localScale *= randomScale;
            iAsteroid.rigidbody.mass       *= randomScale;
            Destructible destructibleScript = iAsteroid.GetComponent <Destructible>();
            destructibleScript.maxHealth = (int)(destructibleScript.maxHealth * randomScale);
            destructibleScript.curHealth = (int)(destructibleScript.curHealth * randomScale);
            if (randomScale > 1)
            {
                i += (randomScale) - 1;
            }
            iAsteroid.transform.parent = asteroidGroup.transform;
        }
    }
Exemple #16
0
    void Explode()
    {
        Instantiate(explosionEffect, transform.position, Quaternion.identity);
        Collider[] colliders = Physics.OverlapSphere(transform.position, explosionRadius);
        foreach (var nearbyObject in colliders)
        {
            if (nearbyObject.gameObject == FPSPlayer)
            {
                FPSPlayer.GetComponent <Target>().Die();
            }

            Rigidbody rb = nearbyObject.GetComponent <Rigidbody>();
            if (rb != null)
            {
                rb.AddExplosionForce(explosionForce, transform.position, explosionRadius);
            }

            Destructible dest = nearbyObject.GetComponent <Destructible>();
            if (dest != null)
            {
                dest.Destroy();
            }
        }
        Destroy(gameObject);
    }
Exemple #17
0
    void Explode()
    {
        GameObject CurExplosion = Instantiate(Explosion, transform.position + Vector3.up, Quaternion.identity);
        Transform  player       = GameObject.FindGameObjectWithTag("Player").transform;
        float      Distance     = Vector3.Distance(transform.position, player.position);

        if (Distance < 30)
        {
            CameraShake shaker = CameraShake.instance;
            shaker.duration    = ShakeDuration;
            shaker.power       = ShakeStrenght - Distance / 100;
            shaker.ShouldShake = true;
        }
        //Destroy nearby enemies
        Collider[] Enemies;
        Enemies = Physics.OverlapSphere(transform.position, Radius);
        for (int i = 0; i < Enemies.Length; i++)
        {
            Destructible destructible = Enemies[i].GetComponent <Destructible>();
            if (destructible != null)
            {
                destructible.OnDamage(damage);
            }
        }
        //Destroy trash
        Destroy(CurExplosion, 5);
        Destroy(gameObject);
    }
Exemple #18
0
 void OnTriggerExit2D(Collider2D other)
 {
     so        = null;
     sensedObj = null;
     //player.sensingDestructible = false;
     senseDestructible = false;
 }
Exemple #19
0
    public void OnModuleDamaged(Destructible subject)
    {
        if (OnHpAmountChanged != null)
        {
            OnHpAmountChanged();

            if (this.GetComponent <ShipController>() != null)
            {
                string name = subject.referencedObject.type.ToString().ToLower();
                name = char.ToUpper(name[0]) + name.Substring(1);
                if (name.IndexOf("_") >= 0)
                {
                    name = name.Substring(0, name.IndexOf('_')) + char.ToUpper(name[name.IndexOf('_') + 1]) + name.Substring(name.IndexOf('_') + 2);
                }
                float hp    = 0;
                float maxHp = 0;
                for (int i = 0; i < modules.Count; i++)
                {
                    if (modules[i].referencedObject.type == subject.referencedObject.type)
                    {
                        hp    += modules[i].referencedObject.hp;
                        maxHp += modules[i].referencedObject.maxHp;
                    }
                }
                GameObject module = GameObject.Find("GUI").transform.FindChild("Game").FindChild("Modules").FindChild(name).gameObject;
                if (!module.activeSelf)
                {
                    module.SetActive(true);
                }
                GameObject.Find("GUI").transform.FindChild("Game").FindChild("Modules").FindChild(name).GetComponent <Text>().text = (int)(hp / (maxHp / 100)) + "%";
            }
        }
    }
Exemple #20
0
    void Explode()
    {
        Instantiate(explosionEffect, transform.position, transform.rotation);
        Collider[] collidersToDestroy = Physics.OverlapSphere(transform.position, radius);
        foreach (Collider nearbyObject in collidersToDestroy)
        {
            Destructible dest = nearbyObject.GetComponent <Destructible>();
            if (dest != null)
            {
                dest.Destroy();
            }
        }
        Collider[] collidersToMove = Physics.OverlapSphere(transform.position, radius);
        foreach (Collider nearbyObject in collidersToMove)
        {
            Rigidbody rb = nearbyObject.GetComponent <Rigidbody>();
            if (rb != null)
            {
                rb.AddExplosionForce(force, transform.position, radius);
            }
        }


        Debug.Log("Boom!");
        Destroy(gameObject);
    }
Exemple #21
0
    void OnTriggerEnter(Collider other)
    {
        //Vector3 closest = other.ClosestPoint(transform.position);
        Vector3 dir = (other.transform.position - transform.position).normalized; //((closest - transform.position ).normalized  + Vector3.up * 0.1f).normalized;

        Debug.DrawLine(transform.position, transform.position + dir, Color.magenta, 4);

        Rigidbody rigid = FindRigidbody(other.transform);

        if (rigid != null)
        {
            rigid.AddForce(dir * 3, ForceMode.Impulse);
            rigid.AddForce(Vector3.up * 1.5f, ForceMode.Impulse);

            AlarmClock alarm = rigid.gameObject.GetComponent <AlarmClock>();
            if (alarm != null)
            {
                alarm.Snooze();
            }
        }



        Destructible dest = rigid != null?rigid.gameObject.GetComponent <Destructible>() : FindDestructible(other.transform);

        if (dest != null)
        {
            dest.SufferDamage();
        }
    }
    void Explode()
    {
        Instantiate(explosionEffect, transform.position, transform.rotation);

        //function that allows us to create a shpere that we want the objects to interact with
        //returns array
        Collider[] collidersToDestroy = Physics.OverlapSphere(transform.position, radius);
        //in the first loop we destroy and in the second we apply forces
        foreach (Collider nearbyObject in collidersToDestroy)
        {
            //destroy in pieces
            Destructible des = nearbyObject.GetComponent <Destructible>();
            if (des != null)
            {
                des.Destroy();
            }
        }

        Collider[] collidersToMove = Physics.OverlapSphere(transform.position, radius);

        foreach (Collider nearbyObject in collidersToMove)
        {
            Rigidbody rb = nearbyObject.GetComponent <Rigidbody>();
            if (rb != null)
            {
                //built in unity function
                rb.AddExplosionForce(force, transform.position, radius);
            }
        }

        Destroy(gameObject);
    }
            static void Prefix(Destructible __instance)
            {
                Dbgl($"destroyed destructible {__instance.name}");

                foreach (string key in seedsDic.Keys)
                {
                    Dbgl($"key: {key}");
                }

                string name = seedsDic.FirstOrDefault(s => __instance.name.StartsWith(s.Key)).Value;

                if (name != null)
                {
                    Dbgl($"destroyed trunk {__instance.name}, trying to spawn {name}");
                    GameObject prefab = ZNetScene.instance.GetPrefab(name);
                    if (prefab != null)
                    {
                        Dbgl($"trying to spawn new tree");
                        context.StartCoroutine(SpawnTree(prefab, __instance.transform.position));
                    }
                    else
                    {
                        Dbgl($"prefab is null");
                    }
                }
            }
    void OnTriggerEnter2D(Collider2D col)
    {
        EnemyController  enemy  = col.GetComponent <EnemyController>();
        EnemyController1 enemy1 = col.GetComponent <EnemyController1>();
        EnemyController3 enemy3 = col.GetComponent <EnemyController3>();
        EnemyController4 enemy4 = col.GetComponent <EnemyController4>();
        EnemyController5 enemy5 = col.GetComponent <EnemyController5>();
        Destructible     des    = col.GetComponent <Destructible>();

        if (enemy != null)
        {
            enemy.TakeDamage(40);
        }
        else if (enemy1 != null)
        {
            enemy1.TakeDamage(40);
        }
        else if (enemy3 != null)
        {
            enemy3.TakeDamage(40);
        }
        else if (enemy4 != null)
        {
            enemy4.TakeDamage(40);
        }
        else if (enemy5 != null)
        {
            enemy5.TakeDamage(40);
        }
        else if (des != null)
        {
            des.TakeDamage(40);
        }
        Destroy(gameObject);
    }
        protected void ReloadCharacterNew()
        {
            //base.ReloadCharacter();
            if (base.CharacterObject == null)
            {
                return;
            }
            //this.m_enableDifficultyIndicators = (GameState.Option.LevelScaling == LevelScalingOption.None && GameState.Option.ShowDifficultyIndicators);
            m_enableDifficultyIndicators = true; // always force

            Destructible component = ComponentUtils.GetComponent <Destructible>(base.CharacterObject as MonoBehaviour);

            if (component != null || SingletonBehavior <PartyManager> .Instance.IsActivePartyMember(base.CharacterObject as CharacterStats))
            {
                this.m_sprite.alpha = 0f;
                return;
            }
            if (this.m_onlyIfHostile)
            {
                Faction component2 = ComponentUtils.GetComponent <Faction>(base.CharacterObject as MonoBehaviour);
                if (component2 && component2.GetRelationshipToPlayer() != Relationship.Hostile)
                {
                    this.m_sprite.alpha = 0f;
                    return;
                }
            }
            else
            {
                string levelDifficultySprite = GetLevelDifficultySprite(base.CharacterObject);
                this.m_sprite.spriteName = levelDifficultySprite;
                this.m_sprite.MakePixelPerfect();
                this.m_sprite.alpha = (string.IsNullOrEmpty(levelDifficultySprite) ? 0f : 1f);
            }
        }
Exemple #26
0
    private void OnTriggerStay(Collider other)
    {
        float distance            = Vector3.Distance(transform.position, other.transform.position);
        float distanceCoefficient = 1.0f - distanceDependency * distance / range;

        switch (other.gameObject.layer)
        {
        case GameLayer.Units:
        {
            if (other.gameObject == owner.gameObject)
            {
                break;
            }
            Unit targetUnit = other.GetComponent <Unit>();
            targetUnit.ReceiveDamage(damage * distanceCoefficient * Time.deltaTime, damageType);
            break;
        }

        case GameLayer.Items:
        {
            Item targetItem = other.GetComponent <Item>();
            targetItem.ReceiveDamage(damage * distanceCoefficient * Time.deltaTime, damageType);
            break;
        }

        case GameLayer.Destructibles:
        {
            Destructible targetDestructible = other.GetComponent <Destructible>();
            targetDestructible.ReceiveDamage(damage * distanceCoefficient * Time.deltaTime, damageType);
            break;
        }
        }
    }
Exemple #27
0
    void Update()
    {
        Destructible d = GetComponent <Destructible>();

        if (!d.Destroyed)
        {
            if (CurrentTarget != null)
            {
                Destructible targetDest = CurrentTarget.GetComponent <Destructible>();
                if (!targetDest.Destroyed)
                {
                    Actor  a = GetComponent <Actor>();
                    Weapon w = a.MainWeapon();

                    Vector3 vecToTarget  = CurrentTarget.transform.position - transform.position;
                    float   distToTarget = vecToTarget.magnitude;

                    if (distToTarget < w.Projectile.Range)
                    {
                        Vector3 dirToTarget = vecToTarget.normalized;
                        transform.rotation = Quaternion.LookRotation(dirToTarget, Vector3.up);
                        w.Fire(gameObject, dirToTarget, a.Velocity);
                    }
                }
            }
        }
    }
Exemple #28
0
    void Explode()
    {
        GameObject spawnedParticle = Instantiate(exploParticle, transform.position, transform.rotation);

        Destroy(spawnedParticle, 1);

        Collider [] collidersToDeatroy = Physics.OverlapSphere(transform.position, radius);

        foreach (Collider nearbyObject in collidersToDeatroy)
        {
            Destructible dest = nearbyObject.GetComponent <Destructible>();
            if (dest != null)
            {
                dest.OnGrenadeExplosion();
                if (dest.towerLifeLevel <= 0)
                {
                    dest.DestroyDestructible();
                }
            }
        }

        Collider [] collidersToPunch = Physics.OverlapSphere(transform.position, radius);
        foreach (Collider nearbyObject in collidersToPunch)
        {
            Rigidbody rb = nearbyObject.GetComponent <Rigidbody>();
            if (rb != null)
            {
                rb.AddExplosionForce(force, transform.position, radius);
            }
        }

        hasExploded = true;
        Destroy(gameObject);
    }
Exemple #29
0
    private void OnStartRepair()
    {
        Destructible repairTarget = null;

        // Find close-by destructible and start repairing it
        var colliders = Physics.OverlapSphere(transform.position, RepairRadius, RepairableLayerMask, QueryTriggerInteraction.Collide);

        foreach (var collider in colliders)
        {
            if (!collider.CompareTag("DestructibleStaticTrigger"))
            {
                continue;
            }

            var destructible = collider.GetComponentInParent <Destructible>();
            if (destructible == null || destructible.Intact)
            {
                continue;
            }
            if (destructible.Repairable == false)
            {
                continue;
            }

            repairTarget = destructible;
        }

        if (repairTarget == null)
        {
            return;
        }

        _currentRepairTarget = repairTarget;
        repairTarget.StartRepair();
    }
Exemple #30
0
    public override void ActionUpdate(float timekey)
    {
        timer += timekey;

        if (timer > spawnDelay && !projectileSpawned)
        {
            // apply damage
            Vector3 spawnPoint = character.transform.position + character.transform.TransformDirection(projectileSpawn);

            projectileInstance = GameObject.Instantiate(projectile);
            projectileInstance.transform.position = spawnPoint;
            projectileInstance.character          = character;
            projectileInstance.velocity           = velocity;

            projectileSpawned = true;
        }

        if (timer > spawnDelay + timeOfFlight)
        {
            projectileInstance.Destroy();

            Destructible destructible = target.GetComponent <Destructible>();

            if (destructible != null)
            {
                destructible.Damage(CombatUtils.GetDamageToDestructible(destructible, baseDamage * damageModifer));
            }

            Done();
        }
    }
 void renderShieldAndHealthBar()
 {
     if(!destructibleForPlayer){
         destructibleForPlayer = transform.root.gameObject.GetComponent<Destructible>();
     }
     if(destructibleForPlayer){
     renderShieldBar((float)destructibleForPlayer.curShield/destructibleForPlayer.maxShield);
     renderHealthBar((float)destructibleForPlayer.curHealth/destructibleForPlayer.maxHealth);
     }
 }
 public float this[Destructible.ATTRIBUTE name]
 {
     set
     {
         int ID = getAttributeIndex(name);
         if (ID < 0) return;
         Attributes[ID].value = value;
     }
     get
     {
         int ID = getAttributeIndex(name);
         if (ID < 0)
         {
             Debug.Log("Uh Oh" + name.ToString()); return -1;
         }
         return Attributes[ID].value;
     }
 }
    //
    //Indexed Properties
    //
    //
    //Most current indexed property
    public float this[Destructible.STAT name, Stat.statPart stat]
    {
        get
        {
            int ID = getStatIndex(name);
            if (ID < 0) return -1;
            return Stats[ID][stat];
        }
        set
        {
            int ID = getStatIndex(name);
            if (ID < 0)
            {
                Debug.Log("SOMETHING WENT WRONG!!   " + name);
                return;
            }

            Stats[ID][stat] = value;
        }
    }
 public virtual bool IsInGroup(Destructible destructible)
 {
     foreach (var v in GetDestructibles())
         if (v == destructible) return true;
     return false;
 }
        private void Hit(Destructible target)
        {
            int damage = CalculateDamage(target);
            if (IsCritting)
                target.Hit(Performer, damage, CritAttackType, this);
            else
                target.Hit(Performer, damage, AttackType, this);

            if (ApplyBuffToTargets != null && target is Unit)
            {
                var b = (Buff)ApplyBuffToTargets.Clone();
                ((Unit)target).AddBuff(b, (Unit)Performer, Mediator);
            }

            OnHit(target);
        }
 public override float AIPriority(Unit performer, Vector3 targetPosition, Destructible targetUnit)
 {
     float mod = 1;
     if (Performer.HitPoints > 0.8f * Performer.MaxHitPoints) mod = 0.0001f;
     return base.AIPriority(performer, targetPosition, targetUnit) * mod;
 }
 protected override int GetValue(Destructible d)
 {
     var u = d as Unit;
     return u.CanPerformAbilitiesBlockers;
 }
 protected override void EndPerform(bool aborted)
 {
     base.EndPerform(aborted);
     if (unit != null)
     {
         unit.TakesDamage -= new TakesDamageEventHandler(unit_TakesDamage);
         unit = null;
     }
 }
 protected virtual int GetMaxValue(Destructible d)
 {
     return GetValue(d);
 }
 public virtual bool IsInEffectiveRange(Destructible target, float tolerance)
 {
     return Common.Math.CircleArcIntersection(Common.Math.ToVector2(target.Position),
         target.HitRadius,
         Common.Math.ToVector2(MediatorOffsetedPosition), EffectiveRange * tolerance, Mediator.LookatDir,
         EffectiveAngle);
 }
 protected abstract void SetValue(Destructible d, int value);
 public override float AIPriority(Unit performer, Vector3 targetPosition, Destructible targetUnit)
 {
     if (IsPerforming) return 2;
     if (!IsValidTarget(targetUnit)) return -100;
     if (!IsEffectiveTowardsTarget(targetPosition, targetUnit)) return -50;
     if (CurrentCooldown >= 0) return 0.1f;
     if (!IsInEffectiveRange(targetUnit)) return 0.5f;
     return 1;
 }
 public bool IsInEffectiveRange(Destructible target)
 {
     return IsInEffectiveRange(target, 1);
 }
 public virtual bool AIIsInEffectiveRange(Destructible target)
 {
     return IsInEffectiveRange(target, AIEffectiveRangeTolerance);
 }
 protected override int GetValue(Destructible d)
 {
     var u = d as Unit;
     return u.CanControlRotationBlockers;
 }
 protected override void SetValue(Destructible d, int value)
 {
     var u = d as Unit;
     u.CanControlRotationBlockers = value;
 }
 public override float AIPriority(Unit performer, Vector3 targetPosition, Destructible targetUnit)
 {
     float d = Math.Max(1, (targetUnit.Position - Game.Instance.Map.MainCharacter.Position).Length());
     return base.AIPriority(performer, targetPosition, targetUnit) + 0.01f / d;
 }
        public override bool IsPerformableTowardsTarget(Vector3 targetPosition, Destructible targetEntity)
        {
            float d;
            if (targetEntity != null) d = targetEntity.HitDistance(Mediator.Translation);
            else d = (Mediator.Translation - targetPosition).Length();

            return d < PerformableRange &&
                Performer.State == UnitState.Alive &&
                //Performer.MotionUnit.IsOnGround &&
                base.IsPerformableTowardsTarget(targetPosition, targetEntity);
        }
 public override bool IsEffectiveTowardsTarget(Vector3 targetPosition, Destructible targetEntity)
 {
     return targetEntity != null && base.IsEffectiveTowardsTarget(targetPosition, targetEntity);
 }
 public override bool IsEffectiveTowardsTarget(Vector3 targetPosition, Destructible targetEntity)
 {
     if (!(targetEntity is Unit)) return false;
     return ((Unit)targetEntity).CanAddBuff(Buff) && base.IsEffectiveTowardsTarget(targetPosition, targetEntity);
 }
 protected abstract int GetValue(Destructible d);
 protected virtual int CalculateDamage(Destructible target)
 {
     if (IsCritting)
     {
         return (int)(Damage * CritDamageMultiplier *
             Math.Pow(1 + CritRowMultiplier, nCritsInRow));
     }
     else
         return Damage;
 }
 protected override void StartEffectivePerform()
 {
     base.StartEffectivePerform();
     unit = Game.Instance.Scene.GetByName(Unit) as Destructible;
     unit.TakesDamage += new TakesDamageEventHandler(unit_TakesDamage);
 }
 protected virtual bool CanHit(Destructible target)
 {
     return true;
 }
 protected override void SetValue(Destructible d, int value)
 {
     var u = d as Unit;
     u.CanPerformAbilitiesBlockers = value;
 }
 protected virtual void OnHit(Destructible target)
 {
 }
 public override bool IsInEffectiveRange(Destructible target, float tolerance)
 {
     if ((Performer.Position - target.Position).Length() < 4) return false;
     return base.IsInEffectiveRange(target, tolerance);
 }
        protected void TryHit(Destructible target)
        {
            if (!IsInEffectiveRange(target)) return;
            if (!CanHit(target)) return;

            Hit(target);
        }
Exemple #59
0
 // Use this for initialization
 void Start()
 {
     _destructible = GetComponent<Destructible>();
     StartCoroutine(UpdateHealthRoutine());
 }
 public override bool IsInGroup(Destructible destructible)
 {
     var region = Game.Instance.Map.GetRegion(Region);
     return region.BoundingRegion.GetNodeAt(destructible.Translation) != null;
 }