示例#1
0
    //普通怪物的血条
    public void ShowHpBar(GameObject go)
    {
        hpBarGo.SetActive(true);      //显示普通怪血条
        bossHpBarGo.SetActive(false); //隐藏Boss血条

        //修改血条属性,
        Enermy enermy = go.GetComponent <Enermy>();

        hpSlider       = hpBarGo.transform.GetComponent <UISlider>();
        nameLabel      = hpBarGo.transform.GetComponentInChildren <UILabel>();
        nameLabel.text = enermy.monsterName;
        GameObject deadMarkGo = hpBarGo.transform.Find("DeadMark").gameObject;
        int        hp         = enermy.hp > 0 ? enermy.hp : 0;

        //Debug.Log("ShowHpBar hp=" + hp);
        hpSlider.value = hp / enermy.OriginHp;
        if (!enermy.isDead) //敌人未死亡
        {
            deadMarkGo.SetActive(false);
        }

        else //敌人已死亡
        {
            deadMarkGo.SetActive(true);
            //注意:因为该脚本绑定在多个gameObject上,所以会对多个gameObject判断
            if (this.gameObject.activeInHierarchy)
            {
                StartCoroutine("DestroyHpBar");
            }
        }
    }
示例#2
0
    void TakeDamageResponse(string guid, int hp, int hurtNum)
    {
        GameObject enermyGo = null;

        enermyGoDict.TryGetValue(guid, out enermyGo);
        HUDText hudText = null;

        if (null != enermyGo)
        {
            if (enermyGo.GetComponent <Enermy>())
            {
                Enermy enermy = enermyGo.GetComponent <Enermy>();
                if (enermy == null)
                {
                    Debug.LogError("the enermy is not exist!");
                    return;
                }
                enermy.isSyncEnermy = false;
                hudText             = enermy.hudText;
            }
            else if (enermyGo.GetComponent <Boss>())
            {
                Boss boss = enermyGo.GetComponent <Boss>();
                if (boss == null)
                {
                    Debug.LogError("the boss is not exist!");
                    return;
                }
                boss.isSyncBoss = false;
                hudText         = boss.hudText;
            }
        }
    }
示例#3
0
 public void SetAttack(Enermy e)
 {
     checkEnermy = false;
     attack = true;
     animator.SetBool ("attack", true);
     targetMon = e;
 }
示例#4
0
 // needed to reset status when monster  dead
 public void ResetAttack()
 {
     checkEnermy = true;
     attack = false;
     animator.SetBool ("attack", false);
     targetMon = null;
 }
示例#5
0
    void SpawnEnermy()
    {
        int ranEnermy = UnityEngine.Random.Range(0, 3); // L M S 비행기 세가지 종류
        int ranPoint  = UnityEngine.Random.Range(0, 9); //다섯가지 포인트 + 4가지 우측좌측 추가

        //프리팹 생성
        GameObject enermy = objectManager.MakeObj(enermyObjs[ranEnermy]);

        /*Instantiate(enermyObjs[ranEnermy],
         *            spawnPoints[ranPoint].position,
         *            spawnPoints[ranPoint].rotation);*/
        enermy.transform.position = spawnPoints[ranPoint].position;

        Rigidbody2D r2d         = enermy.GetComponent <Rigidbody2D>();
        Enermy      enermyLogic = enermy.GetComponent <Enermy>();

        enermyLogic.player        = player;
        enermyLogic.objectManager = objectManager;

        if (ranPoint == 5 || ranPoint == 6) //Right Spawn
        {
            enermy.transform.Rotate(Vector3.back * 45);
            r2d.velocity = new Vector2(enermyLogic.speed * (-1), -1);
        }
        else if (ranPoint == 7 || ranPoint == 8) //Left Spawn
        {
            enermy.transform.Rotate(Vector3.forward * 45);
            r2d.velocity = new Vector2(enermyLogic.speed, -1);
        }
        else // Front Spawn
        {
            r2d.velocity = new Vector2(0, enermyLogic.speed * (-1));
        }
    }
示例#6
0
 public override void OnRobotDeath(RobotDeathEvent e)
 {
     if (e.Name == target.name)
     {
         target = null;
     }
 }
示例#7
0
    void UpdateTarget()
    {
        if (GameManager.endGame)
        {
            return;
        }
        GameObject[] enermies      = GameObject.FindGameObjectsWithTag("Enermy");
        float        shortestDir   = Mathf.Infinity;
        GameObject   nearestEnermy = null;

        foreach (var enermy in enermies)
        {
            float dis = Vector3.Distance(transform.position, enermy.transform.position);
            if (dis < shortestDir)
            {
                nearestEnermy = enermy;
                shortestDir   = dis;
            }
        }
        if (nearestEnermy != null && shortestDir <= range)
        {
            target       = nearestEnermy.transform;
            targetEnermy = nearestEnermy.GetComponent <Enermy>();
        }
        else
        {
            target = null;
        }
    }
示例#8
0
    void Damage(Transform enermy)
    {
        Enermy e = enermy.GetComponent <Enermy>();

        if (e != null)
        {
            e.TakeDamage(dame);
        }
    }
示例#9
0
    public void Init(Vector3 vel, float dmg, Vector3 pos, Enermy par)
    {
        velocity = vel;
        damage   = dmg;
        position = pos;
        parent   = par;

        transform.position = position;
    }
示例#10
0
    public void Init(Transform t, Vector3 vel, float dmg, Vector3 pos, Enermy par)
    {
        target = t;

        velocity = vel;
        position = pos;
        parent   = par;
        damage   = dmg;
        speed    = vel.magnitude;
    }
示例#11
0
    public bool CheckRangeAttack()
    {
        if( !bInit)
        {
            Debug.Log("AttackDetect doesn't initial");
        }

        enermiesInAttRange.Clear();
        bDetect = false;
        targetEnermy = null;
        RaycastHit hit;
        Vector3 orig = new Vector3 (transform.position.x, transform.position.y + fHeight, transform.position.z);

        for(int i = -8; i < 8; i+=2)
        {

            Vector3 v = new Vector3 ();

            Vector3 p = Vector3.Cross (Vector3.up, transform.forward.normalized);
            v = transform.forward.normalized * nRange + (p.normalized * i);

            Debug.DrawRay(orig, v, Color.red);
            if ( Physics.Raycast (orig, (v.normalized), out hit, nRange))
            {
                if (hit.collider.gameObject.layer == collideLayer)
                {

                    Enermy target = hit.collider.gameObject.GetComponent<Enermy>();
                    if( target && !target.IsDead()  )
                    {
                        targetEnermy =  hit.collider.gameObject.GetComponent<Enermy>();
                        bDetect = true;
                    }
                    bool bFound = false;
                    foreach(Enermy e in enermiesInAttRange)
                    {
                        if( e== target)
                            bFound = true;

                    }
                    if(!bFound){
                        enermiesInAttRange.Add(target);
                        Debug.Log("the Enermy Added in the list");
                    }

                }
            }
        }
        return enermiesInAttRange.Count > 0;
    }
示例#12
0
    protected override void OnStart()
    {
        enermiesInAttRange = new List<Enermy>();
        checkEnermy = true;
        monLayer = LayerMask.NameToLayer ("Monster");
        animator = GetComponent<Animator> ();
        collider = GetComponent<CapsuleCollider> ();
        targetMon = null;
        currentBaseState = 0;

        attdetect = GetComponent<AttackDetect>();
        attdetect.Init(7,collider.height /2, monLayer);
        StartCoroutine (CheckRangeAttack ());
    }
示例#13
0
        public override void OnScannedRobot(ScannedRobotEvent e)
        {
            if (!IsTeammate(e.Name))
            {
                target = new Enermy(e);
                double firePower = Math.Min((600 / e.Distance), 3);
                if (Energy < firePower)
                {
                    fsm.enqueEvent(FiniteStateMachine.Events.lowEnergy);
                }
                if (e.Energy == 0 || (e.Energy < 45 && e.Energy < Energy))
                {
                    fsm.enqueEvent(FiniteStateMachine.Events.ramable);
                }
                if (e.Energy > 45 || e.Energy > Energy)
                {
                    fsm.enqueEvent(FiniteStateMachine.Events.notRamable);
                }
                if (Energy > firePower)
                {
                    fsm.enqueEvent(FiniteStateMachine.Events.highEnergy);
                }

                fsm.Transition();

                if (fsm.gameState == FiniteStateMachine.GameState.attack)
                {
                    Attack(e, firePower);
                }

                if (fsm.gameState == FiniteStateMachine.GameState.ram)
                {
                    Ram(e, firePower);
                }

                if (fsm.gameState == FiniteStateMachine.GameState.flee)
                {
                    Flee(e, firePower);
                }
            }
            else
            {
                if (e.Distance < 80)
                {
                    moveDirection *= -1;
                }
            }
        }
示例#14
0
    //SyncEnermyHpResponse
    void SyncEnermyHpResponse(Dictionary <byte, object> parameters)
    {
        object o    = null;
        string guid = "";

        parameters.TryGetValue((byte)ParameterCode.EnermyHp, out o);
        int hp = (int)o;

        parameters.TryGetValue((byte)ParameterCode.EnermyGuid, out o);
        guid = o.ToString();
        parameters.TryGetValue((byte)ParameterCode.EnermyHurtNum, out o);
        int hurtNum = (int)o;

        Debug.Log("SyncEnermyHpResponse hurtNum/hp=" + hurtNum + "/" + hp);

        GameObject enermyGo = null;

        enermyGoDict.TryGetValue(guid, out enermyGo);
        if (enermyGo != null)
        {
            if (enermyGo.GetComponent <Enermy>()) //普通怪物
            {
                Enermy enermy = enermyGo.GetComponent <Enermy>();
                if (enermy == null)
                {
                    Debug.LogError("the enermy is not exist!");
                    return;
                }
                enermy.hp           = hp;
                enermy.isSyncEnermy = false;
                HpBarController.Instance.ShowHpBar(enermyGo);//显示敌人血条
            }
            else if (enermyGo.GetComponent <Boss>())
            {
                Boss boss = enermyGo.GetComponent <Boss>();
                if (boss == null)
                {
                    Debug.LogError("the boss is not exist!");
                    return;
                }
                boss.hp         = hp;
                boss.isSyncBoss = false;
                HpBarController.Instance.ShowBossHpBar(enermyGo);//显示敌人血条
            }
        }
    }
示例#15
0
    public void Attack(Enermy sender, float dmg)
    {
        if (!isProtect)
        {
            hp -= dmg;

            isProtect = true;

            m_source.clip = hitSound;
            m_source.Play();

            m_velocity = Vector3.zero;

            centerSprite.transform.DOShakePosition(1f, 0.5f);

            var seq = DOTween.Sequence();
            seq.Append(centerSprite.DOColor(Color.gray, 0.5f).SetEase(Ease.InOutCubic));
            seq.Append(centerSprite.DOColor(Color.white, 0.5f).SetEase(Ease.InOutCubic));
            seq.Append(centerSprite.DOColor(Color.gray, 0.5f).SetEase(Ease.InOutCubic));
            seq.Append(centerSprite.DOColor(Color.white, 0.5f).SetEase(Ease.InOutCubic));
            seq.Append(centerSprite.DOColor(Color.gray, 0.5f).SetEase(Ease.InOutCubic));
            seq.Append(centerSprite.DOColor(Color.white, 0.5f).SetEase(Ease.InOutCubic));
            seq.AppendCallback(delegate {
                isProtect = false;
            });

            var hitE = Instantiate(hitEffect);
            hitE.transform.parent        = transform;
            hitE.transform.localPosition = Vector3.zero;

            if (hp <= 0 && hp > -10f)
            {
                Subtitles.show("You're died. But in this prototype. You can keep playing.");
            }
        }
        else
        {
            m_source.clip = hitSound;
            m_source.Play();

            var hitE = Instantiate(hitEffect);
            hitE.transform.parent        = transform;
            hitE.transform.localPosition = Vector3.zero;
        }
    }
示例#16
0
    /*
     *
     * Estimate Distance Between This(player) to Target(Enermy)
     * return value = Distance
     */
    public float EstimateDistance(Player From, Enermy To)
    {
        if (From == null)
        {
            Debug.Log("Player value is Null ");
            return(99.0f);
        }
        float result = 0.0f;

        Vector3 playerPos = From.transform.position;
        Vector3 targetPos = To.transform.position;

        //result = Mathf.Sqrt(
        //    Mathf.Abs(playerPos.x  -  targetPos.x)+     Mathf.Abs(playerPos.y - targetPos.y)+     Mathf.Abs(playerPos.z  -  targetPos.z)   );
        // result = playerPos - targetPos;
        Debug.Log("result Distance : " + result);
        return(result);
    }
示例#17
0
    public void Init(float explosionDuration, float dmg, Vector3 pos, Enermy par)
    {
        velocity = Vector3.zero;
        position = pos;
        parent   = par;
        damage   = dmg;

        var col = GetComponent <CircleCollider2D>();

        if (col != null)
        {
            float radius = col.radius;
            col.radius = radius * 0.5f;
            DOTween.To(() => col.radius, (x) => col.radius = x, radius, explosionDuration).OnComplete(delegate() {
                col.enabled = false;
                Destroy(gameObject, 10f);
            });
        }

        transform.position = position;
    }
示例#18
0
文件: GameView.cs 项目: hihijack/wqz
 public void SetEnermyHPUI(Enermy enermy)
 {
     UILabel txtHp = Tools.GetComponentInChildByPath<UILabel>(mGobjTargetUI, "hp/txt");
     txtHp.text = enermy.hpCur + "/" + enermy.hpMax;
     UISlider sliderHp = Tools.GetComponentInChildByPath<UISlider>(mGobjTargetUI, "hp");
     sliderHp.value = (float)enermy.hpCur / enermy.hpMax;
 }
示例#19
0
 private void Start()
 {
     enermy = GetComponent <Enermy>();
     target = Path.paths[0];
 }
示例#20
0
    void Boom()
    {
        if (!Input.GetButton("Fire2"))
        {
            return;
        }
        if (isBoomTime)
        {
            return;
        }
        if (boom == 0)
        {
            return;
        }

        boom--;
        isBoomTime = true;
        gameManager.UpdateBoomIcon(boom);

        //Effect Visible
        boomEffect.SetActive(true);
        Invoke("OffBoomEffect", 4f);

        //Remove Enermy
        //FindGameGobject s WithTag => 게임 내에 태그를 가진 오브젝트 들을불러오는 함수

        //GameObject[] enermyArr = GameObject.FindGameObjectsWithTag("Enermy");
        // find 계열 함수는 성능하락을 유발

        GameObject[] enemiesL = objectManager.GetPool("EnemyL");
        GameObject[] enemiesM = objectManager.GetPool("EnemyM");
        GameObject[] enemiesS = objectManager.GetPool("EnemyS");

        for (int i = 0; i < enemiesL.Length; i++)
        {
            /*Enermy eneLogic = enermyArr[i].GetComponent<Enermy>();
             * eneLogic.OnHit(1000);*/
            if (enemiesL[i].activeSelf)
            {
                Enermy eneLogic = enemiesL[i].GetComponent <Enermy>();
                eneLogic.OnHit(1000);
            }
        }
        for (int i = 0; i < enemiesM.Length; i++)
        {
            if (enemiesM[i].activeSelf)
            {
                Enermy eneLogic = enemiesM[i].GetComponent <Enermy>();
                eneLogic.OnHit(1000);
            }
            //Enermy eneLogic = enermyArr[i].GetComponent<Enermy>();
            //eneLogic.OnHit(1000);
        }
        for (int i = 0; i < enemiesS.Length; i++)
        {
            if (enemiesS[i].activeSelf)
            {
                Enermy eneLogic = enemiesS[i].GetComponent <Enermy>();
                eneLogic.OnHit(1000);
            }
            //Enermy eneLogic = enermyArr[i].GetComponent<Enermy>();
            //eneLogic.OnHit(1000);
        }

        //Remove Bullet
        //GameObject[] bullets = GameObject.FindGameObjectsWithTag("EnermyBullet");

        GameObject[] bulletsA = objectManager.GetPool("BulletEnemyA");
        GameObject[] bulletsB = objectManager.GetPool("BulletEnemyB");

        for (int i = 0; i < bulletsA.Length; i++)
        {
            if (bulletsA[i].activeSelf)
            {
                bulletsA[i].SetActive(false);
            }
            //Destroy(bullets[i]);
        }
        for (int i = 0; i < bulletsB.Length; i++)
        {
            if (bulletsB[i].activeSelf)
            {
                bulletsB[i].SetActive(false);
            }
            //Destroy(bullets[i]);
        }
    }
示例#21
0
 public void EnermyDead(Enermy e)
 {
     enermyList.Remove(e);
     deadEnermyList.Add(e);
 }
示例#22
0
 public void RegisterEnermy(Enermy e)
 {
     enermyList.Add(e);
 }
示例#23
0
 public void Reset()
 {
     bDetect = false;
     enermiesInAttRange.Clear();
     targetEnermy = null;
 }
示例#24
0
文件: Hero.cs 项目: hihijack/wqz
    void OnControllerColliderHit(ControllerColliderHit hit)
    {
        if(hit.moveDirection.y < 0 && Mathf.Abs(hit.moveDirection.x) < 0.3f ){
            g_gobjCurStepOn = hit.gameObject;
        }

        // killed when hit enermy
        if(hit.collider.CompareTag("enermy")){
            isInBattleState = true;
            Enermy enermy = hit.collider.gameObject.GetComponent<Enermy>();
            curTarget = enermy;
            updataState(new IActorAction(EFSMAction.HERO_ATTACK));
            gameView.ShowTrargetUI();

            enermy.curTarget = this;
            enermy.updataState(new IActorAction(EFSMAction.NPC_ATTACK));
        }
    }
示例#25
0
 void GiveDamage(Enermy gameObject, int push)
 {
     Vector3 forceDir = gameObject.transform.position - transform.position;
     gameObject.ApplyDamage( forceDir.normalized * 10, defaultDMG);
     Debug.Log ("Player is Sending DMG : " + defaultDMG.ToString ());
 }
示例#26
0
 public void Start()
 {
     obj     = GameObject.Find("Enermy");
     _Enermy = obj.GetComponent <Enermy> ();
 }