Example #1
0
 /// <summary>
 /// Корутина, которая наносит игроку урон каждые несколько секунд
 /// </summary>
 /// <param name="desc">Описание врага</param>
 /// <param name="seconds">Сколько секунд происходит между атаками</param>
 /// <returns></returns>
 IEnumerator DamagerPlayer(EnemyScriptableObject desc, float seconds)
 {
     while (true)
     {
         Harm(desc);
         yield return(new WaitForSeconds(seconds));
     }
 }
 public EnemyModel(EnemyScriptableObject enemy)
 {
     EnemyTankType      = enemy.EnemyType;
     EnemyFireRateDelay = enemy.FireRateDelay;
     EnemySpeed         = enemy.TankSpeed;
     EnemyRotation      = enemy.TankRotationSpeed;
     EnemyHealth        = enemy.TankHealth;
     EnemyDamage        = enemy.TankDamge;
     EnemyColor         = enemy.TankColor;
 }
Example #3
0
 public HealthEntityCombatObject SummonOnEnemySide(EnemyScriptableObject enemySO)
 {    /*
       *     // This looks sloppy. Rework.
       *     List<EnemyScriptableObject> enemyList = new List<EnemyScriptableObject>();
       *     enemyList.Add(enemySO);
       *     Enemy enemy = enemyManager.SpawnEnemies(enemyList, OnEnemyDeath)[0];
       *
       *     entitiesToAddThisTurn.Add(enemy);
       *
       *     return enemy;*/
     return(null);
 }
Example #4
0
 public void Init(EnemyScriptableObject data, int index)
 {
     maxHealth                    = health = (int)(data.health * Random.Range(.85f, 1.15f));
     picture.sprite               = data.pictures[Random.Range(0, data.pictures.Length)];
     name                         = nameText.text = data.name;
     abilities                    = data.abilities;
     targettingText.text          = "";
     enemyIndex                   = index;
     alignment                    = Alignment.Evil;
     statusEffectBar.statusEffect = null;
     TakeDamage(0);
 }
Example #5
0
    public HealthEntity SummonOnEnemySide(EnemyScriptableObject enemySO)
    {
        // This looks sloppy. Rework.
        List <EnemyScriptableObject> enemyList = new List <EnemyScriptableObject>();

        enemyList.Add(enemySO);
        Enemy enemy = enemyManager.SpawnEnemies(enemyList, this, OnEnemyDeath)[0];

        entitiesToAddThisTurn.Add(enemy);

        return(enemy);
    }
Example #6
0
    public Enemy(EnemyScriptableObject data) : base(data)
    {
        if (data.fluctuateStartingHealth)
        {
            FluctuateMaxHealth(data.startingHealthFluctuationAmount);
        }

        Health       = MaxHealth;
        abilities    = data.abilities;
        attackSounds = data.attackSounds;
        deathSounds  = data.deathSounds;
        alignment    = Alignment.Evil;
    }
Example #7
0
    protected override void Awake()
    {
        base.Awake();

        m_Data    = actor as EnemyScriptableObject; //Cast information
        m_Agent   = GetComponent <NavMeshAgent>();
        shootable = GetComponent <IShootable>();

        //We are taking the value as a "magnitude" but we are comparing it as a sqrMagnitude
        distanceToShoot = Mathf.Pow(m_Data.distanceToShoot, 2f);

        InitializeAgent();
    }
Example #8
0
    public static List <UpgradeScriptableObject> getUnlockedUpgradesForSpecificEnemy(EnemyScriptableObject enemy)
    {
        List <UpgradeScriptableObject> applicableUpgrades = new List <UpgradeScriptableObject>();

        foreach (var unlockedUpgrade in UnlockedUpgrades)
        {
            if (unlockedUpgrade.specificTowerOrEnemy == UpgradeScriptableObject.UpgradeSelection.SpecificEnemies &&
                unlockedUpgrade.affectedEnemies.Contains(enemy))
            {
                applicableUpgrades.Add(unlockedUpgrade);
            }
        }

        return(applicableUpgrades);
    }
Example #9
0
 HealthEntityCombatObject SpawnEntity(HealthEntityScriptableObject entitySO, Transform entityHolder)
 {
     if (entitySO is PlayerCharacterScriptableObject)
     {
         PlayerCharacterScriptableObject playerSO = entitySO as PlayerCharacterScriptableObject;
         Player player = new Player(playerSO);
         return(SpawnEntity(player, entityHolder));
     }
     else if (entitySO is EnemyScriptableObject)
     {
         EnemyScriptableObject enemySO = entitySO as EnemyScriptableObject;
         Enemy enemy = new Enemy(enemySO);
         return(SpawnEntity(enemy, entityHolder));
     }
     return(null);
 }
    Enemy SpawnEnemy(EnemyScriptableObject enemySO, int index, BattleManager battleManager, System.Action <Enemy> callback)
    {
        GameObject newEnemyGO = GameObject.Instantiate(enemyPrefab, enemyPanel);
        Enemy      newEnemy   = newEnemyGO.GetComponent <Enemy>();

        newEnemy.Init(enemySO, index);
        newEnemy.OnEnemyDeath += callback;

        newEnemy.attackSounds = enemySO.attackSounds;
        newEnemy.deathSounds  = enemySO.deathSounds;

        newEnemy.targetButton.GetComponent <Button>().onClick.AddListener(delegate { battleManager.SelectTarget(newEnemy); });
        newEnemy.AllowTargetable(false);
        newEnemy.nextAbilityImage.gameObject.SetActive(false);

        return(newEnemy);
    }
    public void Init(EnemyScriptableObject enemyValues)
    {
        EnemyAI enemy = GetComponent <EnemyAI>();

        if (enemy != null)
        {
            enemy.Health          = enemyValues.health;
            enemy.MaxHealth       = enemyValues.maxHealth;
            enemy.EnemyDamage     = enemyValues.damage;
            enemy.ProjectileSpeed = enemyValues.projectileSpeed;
            enemy.Animator.runtimeAnimatorController = enemyValues.animatorOverride as RuntimeAnimatorController;

            enemy.Speed            = enemyValues.speed;
            enemy.RetreatSpeed     = enemyValues.retreatSpeed;
            enemy.AggroDistance    = enemyValues.aggroDistance;
            enemy.RetreatDistance  = enemyValues.retreatDistance;
            enemy.StoppingDistance = enemyValues.stoppingDistance;

            enemy.ProjectileToSpawn = enemyValues.projectile;
            enemy.HitEffectToSpawn  = enemyValues.hitEffect;
            enemy.StartTimeBtwShots = enemyValues.startTimeBtwShots;
            enemy.StartWaitTime     = enemyValues.startWaitTime;
            enemy.MaxLifeTime       = enemyValues.maxLifeTime;

            enemy.transform.localScale = enemyValues.scaleSize;
            enemy.GetComponent <CapsuleCollider2D>().size = enemyValues.colliderSize;
            GetComponent <EnemyHealthBar>().Offset        = enemyValues.healthBarOffset;
            enemy.CanPierce      = enemyValues.canPierce;
            enemy.CanDeflect     = enemyValues.canDeflect;
            enemy.CanSpin        = enemyValues.canSpin;
            enemy.IsExplosive    = enemyValues.isExplosive;
            enemy.BlastRadius    = enemyValues.blastRadius;
            enemy.KnockbackForce = enemyValues.knockbackForce;
            enemy.CanKnockback   = enemyValues.canKnockback;
            enemy.NumMaxBounces  = enemyValues.numMaxBounces;
            enemy.CanBounce      = enemyValues.canBounce;
            enemy.Intensity      = enemyValues.intensity;
            enemy.FlipX          = enemyValues.flipX;
        }
    }
        void CreateEnemy(EnemyScriptableObject _data, World _currentWorld, int index)
        {
            EntityManager manager = _currentWorld.EntityManager;

            Entity model = manager.Instantiate(GameObjectConversionUtility.ConvertGameObjectHierarchy(_data.ObjectModel, _currentWorld));

            #if UNITY_EDITOR
            manager.SetName(model, $"Enemy_{index:D4}");
            #endif

            // Entity 管理に登録
            EnemyComponentSystem enemySys = _currentWorld.GetOrCreateSystem <EnemyComponentSystem>();
            int enemyId = enemySys.GetInstanceId();
            enemySys.AddEnemyEntity(enemyId, model);

            // Enemy の基本データ
            EnemyData enemyData = new EnemyData()
            {
                Id    = enemyId,
                HP    = _data.HP,
                Score = _data.Score
            };
            manager.AddComponentData(model, enemyData);
            Translation initPos = new Translation();
            initPos.Value = new float3(_data.DefaultPosition);
            manager.SetComponentData <Translation>(model, initPos);


            Translation t = new Translation();
            t.Value = new float3(0f, 0f, 0.0f);

            var moveData = new ObjectMoveData()
            {
                Speed     = 0.0f,
                Direction = t,
            };
            manager.AddComponentData(model, moveData);



            var    bulletFactorySys = _currentWorld.GetOrCreateSystem <BulletFactorySystem>();
            Camera cam           = Camera.main;
            float  frustumHeight = cam.transform.position.y * Mathf.Tan(cam.fieldOfView * 0.5f * Mathf.Deg2Rad);
            float  frustumWidth  = frustumHeight / Screen.height * Screen.width;

            float maxSize = math.max(frustumHeight * 2.0f, frustumWidth * 2.0f);

            for (int i = 0; i < _data.Nway; i++)
            {
                var factoryEntity     = manager.CreateEntity();
                var bulletFactoryData = new BulletFactoryData()
                {
                    ParentEntity   = model,
                    PositionOffset = float3.zero,
                    RotationOffset = float3.zero,

                    SpawnCycle = _data.SpawnCycle,
                    SpawnTimer = _data.SpawnCycle,

                    /* バレットパラメーター */
                    Speed         = _data.BuleltSpeed,
                    MoveDirection = Utils.CalcDirection(i, _data.Nway - 1, new float3(0f, 0f, -1f), _data.Angle),
                    Damage        = 1,
                    BulletType    = 1,
                };

                if (bulletFactorySys != null)
                {
                    int count = BulletFactorySystem.CalcPreloadObjectCount(maxSize, bulletFactoryData.Speed, 1.0f, bulletFactoryData.SpawnCycle);
                    bulletFactoryData.BulletListHandler = bulletFactorySys.CreateBulletObject(count, _data.BulletModel);

                    manager.AddComponentData(factoryEntity, bulletFactoryData);

                    // Enemy 管理システムにも登録
                    enemySys?.AddBulletFactoryRelation(enemyData.Id, factoryEntity);
                }
            }
        }
Example #13
0
 //should be called before fully spawned
 public void assignSelf(EnemyScriptableObject statObject)
 {
     speed    = statObject.speed; MaxHealth = statObject.health; value = statObject.value; ID = statObject.ID;
     animator = statObject.anim;
     GetComponent <Animator>().runtimeAnimatorController = statObject.anim;
 }
Example #14
0
 /// <summary>
 /// Нанести урон игроку
 /// </summary>
 /// <param name="enemyDesc">Описание врага, который нанес урон</param>
 private void Harm(EnemyScriptableObject enemyDesc)
 {
     CurrentHealth = CurrentHealthVariable.Value - enemyDesc.Damage * _tankDescription.Defence;
 }
Example #15
0
    static public EnemyScriptableObject S; // This Scriptable Object is an unprotected Singleton

    public EnemyScriptableObject()
    {
        S = this; // Assign the Singleton as part of the constructor.
    }
Example #16
0
 public EnemyController(EnemyModel enemyModel, EnemyView enemyView, Vector3 spawnerPos, Quaternion spawnerRotation, int enemyNumber, EnemyScriptableObject enemyScriptableObject)
 {
     EnemyModel      = enemyModel;
     SpawnerPos      = spawnerPos;
     SpawnerRotation = spawnerRotation;
     EnemyNumber     = enemyNumber;
     EnemyView       = GameObject.Instantiate <EnemyView>(enemyView, SpawnerPos, spawnerRotation);
     EnemyView.InitializeController(this);
     EnemyView.SetViewDetails();
 }