public override void AIStart(EnemyCore enemy)
        {
            base.AIStart(enemy);

            Debug.Log("AIStart");
            enemy.Agent.updateRotation = false;
        }
        public override void AIStart(EnemyCore enemy)
        {
            base.AIStart(enemy);

            enemy.Agent.updateRotation = false;
            enemy.Agent.updatePosition = false;
        }
Beispiel #3
0
    private void SpawnPentagonMoveUpAndDown_Type_A(Transform spawnTr, Transform targetTr)
    {
        EnemyCore enemyCore = m_EnemyManager.SpawnEnemy(EnemyType.Pentagon, spawnTr.position, Quaternion.identity);

        Transform[] enemyFireTransforms = enemyCore.GetEnemyFireTransforms();


        int              bulletDamage     = 10;
        float            bulletSpeed      = 60.0f;
        EntityBulletType EntityBulletType = EntityBulletType.SmallVulcan;

        enemyCore
        .SetInvincible(false)
        .SetPenetrable(false)
        .EventCore()
        .Sequence()
        .AppendActionMoveTo(targetTr.position, 20.0f)
        .Run();

        enemyCore
        .EventCore()
        .Sequence()
        .Wait(1.0f)
        .AppendAttackCornShot(enemyFireTransforms[0], bulletDamage, bulletSpeed, EntityBulletType, 60.0f, 5)
        .Wait(1.0f)
        .AppendAttackCornShot(enemyFireTransforms[0], bulletDamage, bulletSpeed, EntityBulletType, 60.0f, 5)
        .Wait(1.0f)
        .AppendAttackTornadoShot(enemyFireTransforms[0], bulletDamage, 50.0f, EntityBulletType, 25, 0.1f, true, AllyFlag.Enemy, Vector3.down, EventAttack.TornadoShot.Direction.ClockWise)
        .AppendAttackTornadoShot(enemyFireTransforms[0], bulletDamage, 50.0f, EntityBulletType, 25, 0.1f, true, AllyFlag.Enemy, Vector3.down, EventAttack.TornadoShot.Direction.CounterClockWise)
        .Loop(true)
        .Run();
    }
Beispiel #4
0
        public override void AIUpdate(EnemyCore enemy)
        {
            base.AIUpdate(enemy);

            var enemyPos = enemy.transform.position;

            if (!Target)
            {
                return;
            }

            enemy.Attack();

            var targetPos = Target.transform.position;
            var dist      = targetPos - enemyPos;
            var sqrLength = dist.sqrMagnitude;

            //移動先の設定
            var attackRadius = enemy.AIParameter.MoveStartRadius;

            if (sqrLength > Mathf.Pow(attackRadius + enemy.AIParameter.MoveStartDifference, 2))
            {
                enemy.Agent.destination = targetPos;
            }
        }
Beispiel #5
0
    private void SpawnPentagonMoveUpAndDown_Type_B(Transform spawnTr, Transform targetTr)
    {
        EnemyCore enemyCore = m_EnemyManager.SpawnEnemy(EnemyType.Pentagon, spawnTr.position, Quaternion.identity);

        Transform[] enemyFireTransforms = enemyCore.GetEnemyFireTransforms();


        int              bulletDamage     = 10;
        float            bulletSpeed      = 50.0f;
        EntityBulletType EntityBulletType = EntityBulletType.SmallVulcan;

        enemyCore
        .SetInvincible(false)
        .SetPenetrable(false)
        .EventCore()
        .Sequence()
        .AppendActionMoveTo(targetTr.position, 20.0f)
        .Run();

        enemyCore
        .EventCore()
        .Sequence()
        .Wait(0.5f)
        .AppendAttackCornShot(enemyFireTransforms[0], bulletDamage, bulletSpeed, EntityBulletType, 0, 1)
        .Wait(0.5f)
        .AppendAttackCornShot(enemyFireTransforms[0], bulletDamage, bulletSpeed, EntityBulletType, 0, 1)
        .Wait(0.5f)
        .AppendAttackCornShot(enemyFireTransforms[0], bulletDamage, bulletSpeed, EntityBulletType, 0, 1)
        .Wait(1.0f)
        .Loop(true)
        .Run();
    }
Beispiel #6
0
    private void SpawnCircleStaying_Type_A(Transform spawnTr)
    {
        EnemyCore enemyCore = m_EnemyManager.SpawnEnemy(EnemyType.Circle, spawnTr.position, Quaternion.identity);

        Transform[] enemyFireTransforms = enemyCore.GetEnemyFireTransforms();

        int              bulletDamage     = 10;
        float            bulletSpeed      = 30.0f;
        EntityBulletType EntityBulletType = EntityBulletType.MediumBean;

        enemyCore
        .EventCore()
        .Sequence()
        .AppendActionMoveBy(new Vector3(0, -20), 5.0f)
        .Wait(12.0f)
        .AppendActionMoveBy(new Vector3(0, 50), 12.5f)
        .Run();

        enemyCore
        .EventCore()
        .Sequence()
        .AppendAttackTornadoShot(enemyFireTransforms[0], bulletDamage, bulletSpeed, EntityBulletType, 30, 0.1f, true, AllyFlag.Enemy, Vector3.down, EventAttack.TornadoShot.Direction.ClockWise)
        .Loop(true)
        .Run();
    }
Beispiel #7
0
    /// <summary>
    /// Create player
    /// </summary>
    /// <param name="id">プレイヤーID</param>
    /// <param name="pos">初期ポジション</param>
    /// <param name="Respawnpos">リスポーンポジション</param>
    /// <returns></returns>
    EnemyCore Create(int id, Vector3 pos, Vector3 Respawnpos)
    {
        //Instantiate Player prefab
        EnemyCore prefab = Instantiate(EnemyPrefab, pos, Quaternion.LookRotation(Vector3.back));

        var core = prefab.GetComponent <EnemyCore>();

        //initialization player
        core.Initialize(id, pos, this);
        _enemies.Add(id, core);
        return(core);
    }
Beispiel #8
0
    public void RemoveTargetedEntity(EnemyCore core)
    {
        if (m_TargetedEntityPool.ContainsValue(core) == false)
        {
            throw new Exception(core.GetEntityType() + "의 데이터가 존재하지 않습니다");
        }

        foreach (var pair in m_TargetedEntityPool.Where(s => s.Value == core).ToList())
        {
            m_TargetedEntityPool.Remove(pair.Key);
        }
    }
Beispiel #9
0
    private void RaycastWeapon()
    {
        Ray ray = new Ray(mainCamera.transform.position, mainCamera.transform.forward);

        if (Physics.Raycast(ray, out RaycastHit hit))
        {
            EnemyCore enemy = hit.transform.GetComponentInParent <EnemyCore>();
            if (enemy)
            {
                enemy.Damage(hit.transform.tag, weaponDamage);
            }
        }
    }
Beispiel #10
0
        private void OnCollisionEnter(Collision collision)
        {
            var otherLayer = collision.collider.gameObject.layer;

            if ((HarmLayer & 1 << otherLayer) == 1 << otherLayer)
            {
                EnemyCore enemy = collision.gameObject.GetComponent <EnemyCore>();
                if (!_takenDamageFrom.ContainsKey(enemy))
                {
                    var newCoroutine = StartCoroutine(DamagerPlayer(enemy.EnemyDescription, 1f));
                    _takenDamageFrom.Add(enemy, newCoroutine);
                }
            }
        }
Beispiel #11
0
        public override void OnAttackedOther(EnemyCore enemy, IAttacker attacker, int damage)
        {
            base.OnAttackedOther(enemy, attacker, damage);

            //振りむき
            //Debug.Log("OnAttack");
            switch (attacker)
            {
            case CharacterAttacker cAttacker:
                enemy.Agent.SetDestination(cAttacker.Attacker.transform.position);
                AICheckTiming(enemy);
                break;
            }
        }
Beispiel #12
0
        private void OnCollisionExit(Collision collision)
        {
            var otherLayer = collision.collider.gameObject.layer;

            if ((HarmLayer & 1 << otherLayer) == 1 << otherLayer)
            {
                EnemyCore enemy = collision.gameObject.GetComponent <EnemyCore>();
                if (_takenDamageFrom.ContainsKey(enemy))
                {
                    StopCoroutine(_takenDamageFrom[enemy]);
                    _takenDamageFrom.Remove(enemy);
                }
            }
        }
Beispiel #13
0
    /// <summary>
    /// 初期化処理
    /// </summary>
    private void Start()
    {
        //コアにプレイヤーコアをいれるよ
        Core = GetComponent <EnemyCore>();

        //オーディオマネージャ
        AudioManager = AudioManager.Instance;

        //Coreの情報が確定したら初期化を呼び出す
        Core.OnInitializeAsync
        .Subscribe(_ => OnInitialize());

        OnStart();
    }
        public override void AICheckTiming(EnemyCore enemy)
        {
            base.AICheckTiming(enemy);

            Target = null;

            var enemyPos = enemy.transform.position;
            var player   = RetrieveNearestPlayer(enemyPos);

            if (!player)
            {
                return;
            }

            var targetPos = player.transform.position;
            var dist      = targetPos - enemyPos;
            var sqrLength = dist.sqrMagnitude;

            //視界チェック
            if (sqrLength > Mathf.Pow(enemy.AIParameter.ViewRadius, 2))
            {
                return;
            }
            Debug.Log("RadiusPass");
            if (HasObstacleBetweenTarget(enemy, player))
            {
                return;
            }
            Debug.Log("ObstaclePass");
            if (!CanViewAngleTarget(enemy.transform, dist, enemy.AIParameter.ViewAngle))
            {
                return;
            }
            Debug.Log("ViewAnglePass");

            Target = player;

            //移動先の設定
            var pos = targetPos + -dist.normalized * enemy.AIParameter.KeepRange;

            //変化が一定値以上ある場合に移動
            if ((pos - enemyPos).sqrMagnitude > Mathf.Pow(enemy.AIParameter.MoveStartDifference, 2))
            {
                enemy.Agent.SetDestination(pos);
            }

            //向きの設定
            SetRotarion(dist);
        }
        public override void OnAttackedOther(EnemyCore enemy, IAttacker attacker, int damage)
        {
            base.OnAttackedOther(enemy, attacker, damage);

            //振りむき
            //Debug.Log("OnAttack");
            switch (attacker)
            {
            case CharacterAttacker cAttacker:
                var targetPos = cAttacker.Attacker.transform.position;
                var dist      = targetPos - enemy.transform.position;

                //向きの設定
                SetRotarion(dist);
                AICheckTiming(enemy);
                break;
            }
        }
Beispiel #16
0
        public override void AICheckTiming(EnemyCore enemy)
        {
            base.AICheckTiming(enemy);

            Target = null;

            var enemyPos = enemy.transform.position;
            var player   = RetrieveNearestPlayer(enemyPos);

            if (!player)
            {
                return;
            }

            var targetPos     = player.transform.position;
            var dist          = targetPos - enemyPos;
            var sqrLength     = dist.sqrMagnitude;
            var sqrViewRadius = enemy.AIParameter.ViewRadius * enemy.AIParameter.ViewRadius;

            //視界チェック
            if (sqrLength > sqrViewRadius)
            {
                return;
            }
            Debug.Log("Radius");
            if (HasObstacleBetweenTarget(enemy, player))
            {
                return;
            }
            Debug.Log("Obstacle");
            if (!CanViewAngleTarget(enemy.transform, dist, enemy.AIParameter.ViewAngle))
            {
                return;
            }
            Debug.Log("ViewAngle");

            Target = player;

            //移動先の設定
            if (sqrLength > Mathf.Pow(enemy.AIParameter.MoveStartRadius, 2))
            {
                enemy.Agent.destination = targetPos;
            }
        }
        public override void AIUpdate(EnemyCore enemy)
        {
            base.AIUpdate(enemy);

            var enemyPos = enemy.transform.position;

            if (!Target)
            {
                return;
            }

            enemy.Attack();

            var targetPos = Target.transform.position;
            var dist      = targetPos - enemyPos;

            //向きの設定
            SetRotarion(dist);
        }
Beispiel #18
0
        public virtual void AIUpdate(EnemyCore enemy)
        {
            //タイミングチェック
            if ((_timer -= Time.deltaTime) < 0)
            {
                _timer += enemy.AIParameter.CheckTimer;
                AICheckTiming(enemy);
            }

            //向きの更新
            if (!enemy.Agent.updateRotation)
            {
                var transform = enemy.transform;
                transform.rotation =
                    Quaternion.RotateTowards(
                        transform.rotation,
                        Quaternion.Euler(0, transform.eulerAngles.y + Vector3.SignedAngle(transform.forward, _targetDirection, Vector3.up), 0),
                        enemy.AIParameter.AngularSpeed * Time.deltaTime);
            }
        }
        /// <summary>
        /// Создать на сцене противника со случайным описанием
        /// </summary>
        public void SpawnRandomEnemy()
        {
            //Берем случайное описание врага
            var randomDesc = _enemiesData[Random.Range(0, _enemiesData.Count)];

            //Копируем описание
            var descriptionInstance = Instantiate(randomDesc);

            EnemyCore newEnemy = GetAvailableEnemy();

            if (newEnemy != null)
            {
                newEnemy.transform.position = new Vector3(Random.Range(-MaximumSpawnPosition, MaximumSpawnPosition), 1.5f, Random.Range(-MaximumSpawnPosition, MaximumSpawnPosition));
                newEnemy.EnemyDescription   = descriptionInstance;
                newEnemy.gameObject.SetActive(true);
            }
            else
            {
                Debug.LogError("Слишком много врагов на сцене");
            }
        }
        public override void OnAttackedOther(EnemyCore enemy, IAttacker attacker, int damage)
        {
            base.OnAttackedOther(enemy, attacker, damage);

            //振りむき
            //Debug.Log("OnAttack");
            switch (attacker)
            {
            case CharacterAttacker cAttacker:

                var targetPos = cAttacker.Attacker.transform.position;
                var dist      = targetPos - enemy.transform.position;
                var pos       = targetPos + -dist.normalized * enemy.AIParameter.KeepRange;

                //向きの設定
                SetRotarion(dist);

                enemy.Agent.SetDestination(pos);
                AICheckTiming(enemy);
                break;
            }
        }
Beispiel #21
0
    private void SpawnCircleUpLoopFollowing()
    {
        EnemyCore enemyCore = m_EnemyManager.SpawnEnemy(EnemyType.Circle, m_PathHolderList[0][0].position, Quaternion.identity);

        Transform[] enemyFireTransforms = enemyCore.GetEnemyFireTransforms();

        EntityBulletType EntityBulletType = EntityBulletType.MediumBean;
        int   bulletDamage = 10;
        float bulletSpeed  = 50.0f;

        List <Vector3> vectorList = new List <Vector3>();

        for (int i = 0; i < m_PathHolderList[0].Count; i++)
        {
            vectorList.Add(m_PathHolderList[0][i].position);
        }

        enemyCore
        .EventCore()
        .Sequence()
        .AppendActionMovePaths(vectorList.ToArray(), 15.0f)
        .Run();

        enemyCore
        .EventCore()
        .Sequence()
        .Wait(1.5f)
        .AppendAttackCornShot(enemyFireTransforms[1], bulletDamage, bulletSpeed, EntityBulletType, 0f, 1)
        .AppendAttackCornShot(enemyFireTransforms[2], bulletDamage, bulletSpeed, EntityBulletType, 0f, 1)
        .AppendAttackCornShot(enemyFireTransforms[3], bulletDamage, bulletSpeed, EntityBulletType, 0f, 1)
        .AppendAttackCornShot(enemyFireTransforms[4], bulletDamage, bulletSpeed, EntityBulletType, 0f, 1)
        .Wait(1.0f)
        .AppendAttackTornadoShot(enemyFireTransforms[0], bulletDamage, bulletSpeed, EntityBulletType, 10, 0.1f, true, AllyFlag.Enemy, Vector3.down, EventAttack.TornadoShot.Direction.ClockWise)
        .Loop(true)
        .Run();
    }
Beispiel #22
0
    public EnemyCore SpawnEnemy(EnemyType type, Vector3 positiom, Quaternion rotation)
    {
        EnemyCore core = (EnemyCore)Instantiate(GetEnemyPrefabObject(type), positiom, rotation).GetComponent <EnemyCore>();

        if (core == null)
        {
            throw new System.Exception("코어가 널값입니다.");
        }

        switch (type)
        {
        case EnemyType.Pentagon:
            return(core.SetEnemyType(type)
                   .SetEntityType(EntityType.Enemy)
                   .SetScore(50)
                   .SetHp <EnemyCore>(50));

        case EnemyType.Circle:
            return(core.SetEnemyType(type)
                   .SetEntityType(EntityType.Enemy)
                   .SetScore(100)
                   .SetHp <EnemyCore>(50));

        case EnemyType.BossHexagon:
            return(core.SetEnemyType(type)
                   .SetEntityType(EntityType.Enemy)
                   .SetScore(1500)
                   .SetHp <EnemyCore>(2500));

        default:
            break;
        }


        return(null);
    }
Beispiel #23
0
 private void Awake()
 {
     core = GetComponent <EnemyCore>();
     DoAwake();
 }
 void Start()
 {
     cEnemyCore = GetComponent <EnemyCore>();
     agent      = GetComponent <NavMeshAgent>();
     navTimer   = Random.Range(0.0f, 2.0f);
 }
Beispiel #25
0
 private void _stage_onEnemySpawned(EnemyCore enemy)
 {
     enemy.onDied += Enemy_onDied;
 }
Beispiel #26
0
 public void BindCore(EnemyCore core)
 {
     enemyCore = core;
 }
Beispiel #27
0
 public void SetResist(EnemyCore in_core)
 {
     in_core.OnDied
     .Subscribe(d => deadReasons.Add(d))
     .AddTo(gameObject);
 }
Beispiel #28
0
    private void SpawnBoss()
    {
        EnemyCore enemyCore = m_EnemyManager.SpawnEnemy(EnemyType.BossHexagon, new Vector3(30.0f, 107.5f, -5.0f), Quaternion.identity);

        Transform[] enemyFireTransforms = enemyCore.GetEnemyFireTransforms();

        int              bulletDamage     = 10;
        float            bulletSpeed      = 50.0f;
        EntityBulletType EntityBulletType = EntityBulletType.BigBean;

        enemyCore
        .OnDestroyCallBack(() => RemoveTargetedEntity("BOSS"))
        .EventCore()
        .Spawn()
        .AppendActionMovePaths(new Vector3[]
        {
            new Vector3(30.0f, 80.0f, -5.0f),
            new Vector3(20.0f, 70.0f, -5.0f),
            new Vector3(40.0f, 65.0f, -5.0f),
            new Vector3(30.0f, 80.0f, -5.0f),
        }, 20.0f)
        .AppendCallBack(() =>
        {
            enemyCore.EventCore()
            .Wait(1.0f)
            .AppendAttackCornShot(enemyFireTransforms[0], bulletDamage, bulletSpeed, EntityBulletType, 360.0f, 10)
            .Wait(1.0f)
            .AppendAttackCornShot(enemyFireTransforms[1], bulletDamage, bulletSpeed, EntityBulletType, 360.0f, 10)
            .Wait(1.0f)
            .AppendAttackCornShot(enemyFireTransforms[0], bulletDamage, bulletSpeed, EntityBulletType, 360.0f, 10)
            .Wait(1.0f)
            .AppendAttackCornShot(enemyFireTransforms[1], bulletDamage, bulletSpeed, EntityBulletType, 360.0f, 10)
            .Wait(1.0f)
            .AppendAttackCornShot(enemyFireTransforms[0], bulletDamage, bulletSpeed, EntityBulletType, 360.0f, 10)
            .Wait(1.0f)
            .AppendAttackCornShot(enemyFireTransforms[1], bulletDamage, bulletSpeed, EntityBulletType, 360.0f, 10)
            .Wait(1.0f)
            .AppendAttackCornShot(enemyFireTransforms[0], bulletDamage, bulletSpeed, EntityBulletType, 360.0f, 10)
            .Wait(1.0f)
            .AppendAttackCornShot(enemyFireTransforms[1], bulletDamage, bulletSpeed, EntityBulletType, 360.0f, 10)
            .Wait(1.0f)
            .AppendAttackCornShot(enemyFireTransforms[0], bulletDamage, bulletSpeed, EntityBulletType, 360.0f, 10)
            .Wait(1.0f)
            .AppendAttackCornShot(enemyFireTransforms[1], bulletDamage, bulletSpeed, EntityBulletType, 360.0f, 10)

            //
            .Wait(1.0f)
            .AppendAttackCornShot(enemyFireTransforms[0], bulletDamage, bulletSpeed, EntityBulletType, 360.0f, 10)
            .Wait(1.0f)
            .AppendAttackCornShot(enemyFireTransforms[1], bulletDamage, bulletSpeed, EntityBulletType, 360.0f, 10)
            .Wait(1.0f)
            .AppendAttackCornShot(enemyFireTransforms[0], bulletDamage, bulletSpeed, EntityBulletType, 360.0f, 10)
            .Wait(1.0f)
            .AppendAttackCornShot(enemyFireTransforms[1], bulletDamage, bulletSpeed, EntityBulletType, 360.0f, 10)
            .Wait(1.0f)
            .AppendAttackCornShot(enemyFireTransforms[0], bulletDamage, bulletSpeed, EntityBulletType, 360.0f, 10)
            .Wait(1.0f)
            .AppendAttackCornShot(enemyFireTransforms[1], bulletDamage, bulletSpeed, EntityBulletType, 360.0f, 10)
            .Wait(1.0f)
            .AppendAttackCornShot(enemyFireTransforms[0], bulletDamage, bulletSpeed, EntityBulletType, 360.0f, 10)
            .Wait(1.0f)
            .AppendAttackCornShot(enemyFireTransforms[1], bulletDamage, bulletSpeed, EntityBulletType, 360.0f, 10)
            .Wait(1.0f)
            .AppendAttackCornShot(enemyFireTransforms[0], bulletDamage, bulletSpeed, EntityBulletType, 360.0f, 10)
            .Wait(1.0f)
            .AppendAttackCornShot(enemyFireTransforms[1], bulletDamage, bulletSpeed, EntityBulletType, 360.0f, 10)
            .Run();
        })
        .Sequence()
        .Wait(20.0f)
        .AppendActionRotateBy(new Vector3(0, 0, 180.0f), 1.0f)
        .Spawn()
        .AppendAttackTornadoShot(enemyFireTransforms[0], bulletDamage, bulletSpeed, EntityBulletType, 20, 0.1f, false)
        .Sequence()
        .Wait(1.5f)
        .AppendAttackTornadoShot(enemyFireTransforms[1], bulletDamage, bulletSpeed, EntityBulletType, 20, 0.1f, false)
        .Spawn()
        .AppendAttackGuidedShot(enemyFireTransforms[0], bulletDamage, bulletSpeed, EntityBulletType, 30, 0.3f, () => m_PlayerManager.GetPlayer())
        .AppendAttackGuidedShot(enemyFireTransforms[1], bulletDamage, bulletSpeed, EntityBulletType, 30, 0.3f, () => m_PlayerManager.GetPlayer())
        .Sequence().Wait(9.0f)
        .Loop(true)
        .Run();

        AddTargetedEntity("BOSS", enemyCore);
    }
Beispiel #29
0
 public void EnemyDie(EnemyCore enemy)     //敌人死亡
 {
     world.money   += enemy.MONEY;
     showMoney.text = world.money.ToString();
 }
Beispiel #30
0
    /*--------------------------------------------------------------*/

    #endregion

    #region UNITY_DEFAULT_METHODS

    void Awake()
    {
        cEnemyCore = GetComponent <EnemyCore>();
    }