示例#1
0
    private void Awake()
    {
        // setup events
        //knightDeathEvent = new KnightDeathEvent();
        //EventManager.AddKnightDeathInvoker(this);
        enemyDeathEvent     = new EnemyDeathEvent();
        enemyResurrectEvent = new EnemyResurrectEvent();

        animator             = GetComponent <Animator>();
        rb2d                 = GetComponent <Rigidbody2D>();
        isKinematicInitially = rb2d.isKinematic;

        col2D           = GetComponent <CapsuleCollider2D>();
        halfColHeight   = col2D.size.y / 2;
        halfColWidth    = col2D.size.x / 2;
        colliderOffsetY = col2D.offset.y;
        colliderOffsetX = col2D.offset.x;

        moveTimer = gameObject.AddComponent <Timer>();
        moveTimer.AddTimerFinishedEventListener(StartMoving);

        // rewind setup
        states = new List <EnemyTimeState>();

        // make the enemies be at slightly different depths
        float   offsetZ  = Random.Range(-0.01f, 0.01f);
        Vector3 position = transform.position + offsetZ * Vector3.forward;

        transform.position = position;
    }
示例#2
0
    }                                                   // Is the agent alive or not?

    #endregion

    #region Methods

    // Use this for initialization
    protected virtual void Start()
    {
        //Debug.Log("Called");
        Alive = true;

        // Initialize events
        mouseOverEvent   = new EnemyMouseOverEvent();
        enemyDeathEvent  = new EnemyDeathEvent();
        enemyPursueEvent = new EnemyFoundEvent();

        // Add this script to the list of invokers for the EnemyMouseOverEvent
        EventManager.AddEnemyMouseOverInvoker(this);
        EventManager.AddEnemyDeathInvoker(this);
        GetComponentInChildren <FOVScript>().AddEnemyFoundEventListener(OnEnemyAttackEvent);

        // Initialize object variables
        speed           = MAX_SPEED;
        nextSpot        = 0;
        patrolDirection = PatrolDirection.FORWARD;
        path            = new List <Vector3>();
        animator        = GetComponent <Animator>();

        // Start in the wait state
        TransitionToWaitState();
    }
示例#3
0
    IEnumerator DeathAnimCoroutine(Enemy enemy)
    {
        if (!enemy.isDead)
        {
            enemy.canAttack = false;
            enemy.isDead    = true;
            if (enemy.GetComponent <LookAtPlayer>() != null)
            {
                enemy.GetComponent <LookAtPlayer>().canLookAt = false;
            }
            var     playerPos   = GameObject.Find("Player").transform.position;
            var     distance    = new Vector3(playerPos.x, enemy.gameObject.transform.position.y, playerPos.z) - enemy.gameObject.transform.position;
            Vector3 direction   = -distance.normalized * 2.5f;
            var     origin      = enemy.gameObject.transform.position;
            var     destination = origin + direction;
            var     speedRatio  = 10;
            while (enemy.gameObject.transform.position != destination)
            {
                enemy.transform.position = Vector3.Lerp(enemy.gameObject.transform.position, destination, 2f * speedRatio * (Time.deltaTime) * Config.TimeScale);
                speedRatio++;
                yield return(0);
            }
            yield return(new WaitForSeconds(0.01f));

            enemy.gameObject.SetActive(false);


            var go = GameObject.Instantiate(enemyParticle, enemy.gameObject.transform.position, Quaternion.identity);
            SFXManager.PlaySFX(SFXManager.Explosion, go.GetComponent <AudioSource>());
            go.AddComponent <ParticleStoper>();
            EnemyDeathEvent?.Invoke();
            enemy.setPositionInitialPOsition();
        }
    }
示例#4
0
    private void Awake()
    {
        onDeathEvent = new EnemyDeathEvent();

        movement = GetComponent <Movement>();
        attack   = GetComponent <Attack>();
        health   = GetComponent <Health>();
    }
示例#5
0
 private void OnEnemyDeath(EnemyDeathEvent obj)
 {
     enemies.Remove(obj.enemy);
     if (!lastEnemySpawned)
     {
         return;
     }
     if (enemies.Count == 0)
     {
         DispatchWaveFinishedEvent();
     }
 }
示例#6
0
        public override void Awake()
        {
            base.Awake();

            OnPlayerShot     = new PlayerShotEvent();
            OnEnemyDeath     = new EnemyDeathEvent();
            OnEnemyHitPlayer = new UnityEvent();
            OnPlayerDeath    = new UnityEvent();
            OnUpdateHeath    = new UpdateHeathEvent();
            OnUpdateScore    = new UpdateScoreEvent();
            OnUpgradeLevel   = new UpgradeLevelEvent();
        }
 void Awake()
 {
     CheckpointReachedEvent.Register(OnCheckpointPassed);
     EnemyDeathEvent.Register(onEnemyKilled);
     GameOverEvent.Register(onGameOver);
     PickUpEvent.Register(onPickup);
     PlayerDamagedEvent.Register(onPlayerDamaged);
     PlayerDeathEvent.Register(onPlayerDeath);
     GameStartEvent.Register(onGameStart);
     respawnCounter    = Lives;
     RespawnFadeObject = GameObject.Find(RespawnFadeObjectName);
 }
    private void OnAIDeathEvent(EnemyDeathEvent data)
    {
        if (data.ParticleEffectType == ParticleEffectType.None)
        {
            return;
        }
        GameObject gameObject = GetParticleOfType(data.ParticleEffectType, particleEffects[data.ParticleEffectType].ParticleEffectVisual);

        gameObject.SetActive(true);
        gameObject.transform.position = data.Position;
        gameObject.transform.rotation = Random.rotation;
        PlayParticle(gameObject, particleEffects[data.ParticleEffectType].ParticleDuration);
    }
示例#9
0
    public EnemyDeathEvent DeathEventData()
    {
        EnemyDeathEvent deathEvent = new EnemyDeathEvent()
        {
            GameObject         = gameObject,
            Position           = transform.position,
            ParticleEffectType = ParticleEffectType.EnemyDeath,
            EnemyType          = GetComponent <AI_Behaviour>().EnemyType,
            HealthPoint        = this,
            AI_Behaviour       = GetComponent <AI_Behaviour>(),
        };

        return(deathEvent);
    }
示例#10
0
    // Enemy death event
    private void OnDeathEvent(EnemyDeathEvent deathEvent)
    {
        EnemyType enemy = deathEvent.EnemyType;

        int loops = enemyScore.Length;

        for (var i = 0; i < loops; i++)
        {
            if (enemy == enemyScore[i].enemy)
            {
                // Score
                AddPlayerScore(enemyScore[i].killScore);
            }
        }
    }
示例#11
0
    protected override void EnemyDeath(EnemyDeathEvent e)
    {
        if (e.DeathEnemy is Solider && soilders.Contains((Solider)e.DeathEnemy))
        {
            int index = soilders.IndexOf((Solider)e.DeathEnemy);

            soilders.RemoveAt(index);
            GameObject obj = objPool[index];
            //objPool.Remove(obj);
            //Destroy(obj);
            Debug.Log(soilders.Count + "마리 남았다");
        }
        else
        {
            Debug.LogWarning("잘못된 엔티티가 넘어왔습니다.");
        }
    }
示例#12
0
    /// <summary>
    /// Enemy 사망 시 1회 호출되는 함수.
    /// </summary>
    void OnDeath()
    {
        //사망 애니메이션 업데이트
        AnimController.SetBool("IsDead", true);

        //컨트롤러 비활성화.
        Controller.Stop();

        ///사망 이벤트 전달.
        var deathEvent = new EnemyDeathEvent()
        {
            Sender = this
        };

        SoundManager.Instance.PlayClipAtPoint("EnemyDeath1", transform.position);

        MessageSystem.Instance.Publish(deathEvent);

        //GameObject 비활성화.
        gameObject.SetActive(false);
        Debug.Log($"나 {gameObject.name}, 여기서 죽다.");
    }
示例#13
0
    public void Handle(EnemyDeathEvent @event)
    {
        _inRangeEnemies.Remove(@event.Enemy);

        FindClosestEnemy();
    }
示例#14
0
 protected abstract void EnemyDeath(EnemyDeathEvent e);
示例#15
0
 private void AddScore(EnemyDeathEvent e)
 {
     score += e.DeathEnemyWorth;
 }
示例#16
0
 private void OnDisable()
 {
     OnEnemyDeath -= Death;
 }
示例#17
0
 private void Awake()
 {
     OnEnemyDeath += Death;
 }
 void onEnemyKilled(EnemyDeathEvent enemyDeathEvent)
 {
     tempStatsData.EnemiesKilled++;
     print("KILLED ENEMY TRACKED");
 }
示例#19
0
 void Start()
 {
     audioSource = GetComponent <AudioSource>();
     EnemyDeathEvent.Register(onEnemyDeath);
 }
示例#20
0
 public void Handle(EnemyDeathEvent @event)
 {
     _configData.PlayerData.Money += _configData.KillReward;
 }
示例#21
0
 private void OnEnemyDeath(EnemyDeathEvent deathEvent)
 {
     enemyTypeBehaviour[deathEvent.EnemyType].Remove(deathEvent.AI_Behaviour);
     enemies.Remove(deathEvent.AI_Behaviour);
 }
示例#22
0
    private void OnDeathEvent(EnemyDeathEvent deathEvent)
    {
        bool foundID    = false;
        int  instanceID = deathEvent.GameObject.GetInstanceID();

        int loopsTier1 = arraySize;

        for (var i = 0; i < loopsTier1; i++)
        {
            // Only check limited (list)
            if (spawnActiveMax[i] == 0)
            {
                continue;
            }

            List <int> instanceIDList = spawnActiveMaxListHolder[spawnActiveMaxIndex[i]];

            int loopsTier2 = spawnActiveMaxListHolder[spawnActiveMaxIndex[i]].Count;
            for (var j = 0; j < loopsTier2; j++)
            {
                // Match
                if (instanceIDList[j] == instanceID)
                {
                    instanceIDList.RemoveAt(j);

                    // Stop loop
                    foundID = true;
                    break;
                }
            }

            // Stop loop
            if (foundID == true)
            {
                break;
            }
        }



        // Clear stage
        if (clearStage == false)
        {
            return;
        }

        foundID    = false;
        instanceID = deathEvent.GameObject.GetInstanceID();

        loopsTier1 = arraySize;
        for (var i = 0; i < loopsTier1; i++)
        {
            // Only check limited (list)
            if (spawnLimited[i] == false || spawnClearDone[i] == true)
            {
                continue;
            }

            List <int> instanceIDList = spawnClearListHolder[spawnClearIndex[i]];

            int loopsTier2 = spawnClearListHolder[spawnClearIndex[i]].Count;
            for (var j = 0; j < loopsTier2; j++)
            {
                // Match
                if (instanceIDList[j] == instanceID)
                {
                    instanceIDList.RemoveAt(j);
                    spawnClearCount[i]++;

                    // List done
                    if (spawnClearCount[i] == spawnLimit[i])
                    {
                        spawnClearCountDone++;
                        spawnClearDone[i] = true;
                    }

                    // Stop loop
                    foundID = true;
                    break;
                }
            }

            // Stop loop
            if (foundID == true)
            {
                break;
            }
        }

        // Next stage
        if (spawnClearCountDone == spawnClearCountMax)
        {
            nextStage = true;
        }
    }
示例#23
0
 void onEnemyDeath(EnemyDeathEvent enemyDeathEvent)
 {
     audioSource.PlayOneShot(audioClip);
 }