/// <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; }
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); }
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); }
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); }
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; }
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(); }
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); }
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); } } }
//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; }
/// <summary> /// Нанести урон игроку /// </summary> /// <param name="enemyDesc">Описание врага, который нанес урон</param> private void Harm(EnemyScriptableObject enemyDesc) { CurrentHealth = CurrentHealthVariable.Value - enemyDesc.Damage * _tankDescription.Defence; }
static public EnemyScriptableObject S; // This Scriptable Object is an unprotected Singleton public EnemyScriptableObject() { S = this; // Assign the Singleton as part of the constructor. }
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(); }