Example #1
0
    protected void Shoot(Vector3 clickPos)
    {
        Vector3 difference = clickPos - transform.position;
        float   distance   = difference.magnitude;
        Vector2 direction  = difference / distance;

        direction.Normalize();
        ProjectileMove instance = Instantiate(projectile, transform.position, Quaternion.identity);

        instance.SetTileBreaker(GetComponent <WorldModifier>());
        //instance.SetColliderMap(colliderMap);
        instance.GetComponent <Rigidbody2D>().velocity = direction * bulletSpeed;
    }
Example #2
0
    /// <summary>
    /// 普通攻击的入口函数
    /// </summary>
    public static void NormalAttackWork(FightUnit attacker, FightUnit target, NormalAttack skill)
    {
        if (target == null || target.health == 0 || attacker == null || attacker.health == 0)
        {
            return;
        }
        switch ((SkillCurve)skill.attack.curve)
        {
        case SkillCurve.None:
        case SkillCurve.Melee:
            NormalAttackDamage(attacker, target, skill, skill.curHitEffect);
            break;

        case SkillCurve.Directional:
            GameObject obj = ProjectileMove.CreateProjectile(skill.name + "_" + attacker.mTrans.name, attacker.mTrans.parent, skill.flyEffectFromPos, skill.curFlyEffect.speed, target.Body, delegate(SpecialEffect fx)
            {
                if (attacker != null && target != null)
                {
                    NormalAttackDamage(attacker, target, skill, fx);
                }
            });
            obj.GetComponent <ProjectileMove>().hitEffect = skill.curHitEffect;
            skill.StartCoroutine(skill.DisplayFlyEffect(obj.transform));
            break;

        case SkillCurve.Parabola:
            Vector3 targetPos;
            bool    isHeroSkill = attacker.parentGroup.group == FightGroup.GroupType.Mine;
            if (skill.flyEffect.distance > 0)
            {
                targetPos = attacker.mTrans.localPosition + (isHeroSkill? -1 : 1) * Vector3.right * skill.flyEffect.distance;
            }
            else
            {
                targetPos = target.mTrans.localPosition + target.Body.localPosition;
            }
            GameObject obj_1 = ProjectileMove.CreateProjectile(skill.name, attacker.mTrans.parent, skill.flyEffectFromPos, skill.curFlyEffect.speed, skill.curFlyEffect.height, targetPos, delegate(SpecialEffect fx)
            {
                if (attacker != null && target != null)
                {
                    NormalAttackDamage(attacker, target, skill, fx);
                }
            });
            obj_1.GetComponent <ProjectileMove>().hitEffect = skill.curHitEffect;
            if (!isHeroSkill)
            {
                obj_1.AddComponent <DragRecord>();
            }
            break;
        }
    }
Example #3
0
    /// <summary>
    /// 抛物线投射物
    /// </summary>

    public static GameObject CreateProjectile(string goName, Transform parent, Vector3 goPos, float xSpeed, float yLength, Vector3 targetPos, ProjectileHandler callBack)
    {
        GameObject obj = new GameObject(goName);

        obj.transform.parent        = parent;
        obj.transform.localScale    = Vector3.one;
        obj.transform.localPosition = goPos;
        ProjectileMove move = obj.AddComponent <ProjectileMove>();

        move._targetPos        = targetPos;
        move.xSpeed            = xSpeed;
        move.yLength           = yLength;
        move.OnProjectileReach = callBack;
        move.CaculateA();
        return(obj);
    }
    void SpawnVFX()
    {
        GameObject vfx;

        if (firePoint != null)
        {
            vfx = Instantiate(effectToSpawn, firePoint.transform.position, Quaternion.identity);
            ProjectileMove vfxMoveController = vfx.GetComponent <ProjectileMove>();
            vfxMoveController.whoShooting = gameObject;

            vfx.transform.localRotation = gameObject.transform.rotation;
        }
        else
        {
            Debug.Log("no fire point");
        }
    }
    void OnGUI()
    {
        GUILayout.BeginArea(guiAreaRect);
        GUILayout.BeginVertical();

        foreach (ProjectileMove projectile in projectileList)
        {
            if (projectile != null)
            {
                if (GUILayout.Button(projectile.projectileLogo, GUILayout.Width(50), GUILayout.Height(50)))
                {
                    currentProjectile = projectile;
                    Debug.Log(currentProjectile);
                }
            }
        }
        GUILayout.EndVertical();
        GUILayout.EndArea();
    }
Example #6
0
    private void OnCollisionEnter(Collision collision)
    {
        CollisionDestroy targetLifeCycle = collision.gameObject.GetComponent <CollisionDestroy>();

        if (targetLifeCycle != null)
        {
            if (this.isCharacter && targetLifeCycle.isEnemy)
            {
                Destroy(gameObject);
            }
            if (targetLifeCycle.isProjectile)
            {
                projectileController = collision.gameObject.GetComponent <ProjectileMove>();
                bool isFirendlyFire = projectileController != null && projectileController.whoShooting.name == gameObject.name;
                if (!isFirendlyFire)
                {
                    Destroy(gameObject);
                }
            }
        }
    }
    private void Attack()
    {
        Vector3 MyPos = transform.position;

        //_target.GetComponent<Bot> ().Life -= _damage;

        _targetToProjectile = Instantiate(_projectile, MyPos, Quaternion.Euler(0, 0, 0));
        ProjectileMove projM = _targetToProjectile.GetComponent <ProjectileMove>();

        projM.SetScale(transform.localScale.x + 0.5f);
        projM.Target = _target;
        projM.SetDamage(_damage);

        if (_target.GetComponent <Bot> ().Life <= 0)
        {
            _player.Coin += _target.GetComponent <Bot>().GetDiff() * Random.Range(10, 13) + 30;
            _target.GetComponent <Bot> ().Die();
            _target   = null;
            _targetOk = false;
        }
    }
Example #8
0
    /// <summary>
    /// 绝技的入口函数,涉及到有弹道,回调
    /// </summary>
    public static void UniqueSkillWork(FightUnit attacker, FightUnit target, UniqueSkill skill)
    {
        switch ((SkillCurve)skill.specialSkill.curve)
        {
        case SkillCurve.None:
        case SkillCurve.Melee:
            UniqueSkillSelect(attacker, target, skill);
            break;

        case SkillCurve.Directional:
            GameObject obj = ProjectileMove.CreateProjectile(skill.name + "_" + attacker.mTrans.name, attacker.mTrans.parent, skill.flyEffectFromPos, skill.flyEffect.speed, target.Body, delegate(SpecialEffect fx)
            {
                UniqueSkillSelect(attacker, target, skill);
            });
            skill.StartCoroutine(skill.DisplayFlyEffect(obj.transform));
            break;

        case SkillCurve.Parabola:
            Vector3 targetPos;
            bool    isHeroSkill = attacker.parentGroup.group == FightGroup.GroupType.Mine;
            if (skill.flyEffect.distance > 0)
            {
                targetPos = attacker.mTrans.localPosition + (isHeroSkill ? -1 : 1) * Vector3.right * skill.flyEffect.distance;
            }
            else
            {
                targetPos = target.mTrans.localPosition + target.Body.localPosition;
            }
            GameObject obj_1 = ProjectileMove.CreateProjectile(skill.name, attacker.mTrans.parent, skill.flyEffectFromPos, skill.flyEffect.speed, skill.flyEffect.height, targetPos, delegate(SpecialEffect fx)
            {
                UniqueSkillSelect(attacker, target, skill);
            });
            if (!isHeroSkill)
            {
                obj_1.AddComponent <DragRecord>();
            }
            skill.StartCoroutine(skill.DisplayFlyEffect(obj_1.transform));
            break;

        case SkillCurve.Magica:
            if (skill.dmgEffect == null)
            {
                return;
            }
            if (skill.dmgEffect.target == 4 || skill.dmgEffect.target == 5)
            {
                skill.StartCoroutine(UniqueSkillMagic_Whole(attacker, target, skill));
            }
            else
            {
                UniqueSkillSelect(attacker, target, skill);
            }
            break;

        case SkillCurve.LineAoe:
            bool isRight = (attacker.parentGroup.group == FightGroup.GroupType.Mine && !attacker.isConfused) ||
                           (attacker.parentGroup.group == FightGroup.GroupType.Enemy && attacker.isConfused);
            GameObject obj_2 = LineAoeMove.CreateLineAoe(skill.name + "_" + attacker.mTrans.name, attacker.mTrans.parent, skill.flyEffectFromPos, skill.flyEffect.speed, isRight, delegate(FightUnit unit)
            {
                UniqueSkillDamage(attacker, unit, skill);
            });
            skill.StartCoroutine(skill.DisplayFlyEffect(obj_2.transform));
            break;
        }
    }
Example #9
0
 protected override void OnAwake()
 {
     m_collider  = GetComponent <SphereCollider>();
     m_rigidbody = gameObject.AddComponent <Rigidbody>();
     Move        = new ProjectileMove(this);
 }