private void Awake() { m_offset_hud = m_Canvas_HUD.position - transform.position; EnemyBot = new EnemyBot() { FireRate = 1f, Projectile = m_projectile, EnemyTransform = transform, FirePoint = m_firePoint, FirePointDistance = 1.15f, OrbitRadius = 1f, Player = GameObject.FindGameObjectWithTag("Player"), Nav = GetComponent <NavMeshAgent>(), HealthSlider = healthSlider, CurrentHealth = 100f, StartingHealth = 100f, EnemyRigidbody = GetComponent <Rigidbody>(), IsDead = false, NormalAttack = new NormalAttack { SpeedOfAttack = 6f, Damage = 20f, Range = 8f, TagProjectile = "EnemyFire" } }; }
private double CalculatePower(EnemyBot target) { double min = Math.Max(Rules.MIN_BULLET_POWER, 1); double diff = Rules.MAX_BULLET_POWER - min; if (target.Distance < POWER_100) { return(Rules.MAX_BULLET_POWER); } if (target.Distance < POWER_075) { return(min + diff * 0.75); } if (target.Distance < POWER_050) { return(min + diff * 0.5); } if (target.Distance < POWER_025) { return(min + diff * 0.25); } return(min); }
public override void OnInspectorGUI() { DrawDefaultInspector(); EnemyBot _eBot = (EnemyBot)target; if (_inicializeData) { _timeFromStandToIdle = _eBot.TimeFromStandToIdle; _damageDelay = _eBot.DamageDelay; _destroyDelay = _eBot.DestroyDelay; _inicializeData = false; } _isButtonDown = GUILayout.Toggle(_isButtonDown, "Настройки для анимации"); if (_isButtonDown) { _timeFromStandToIdle = EditorGUILayout.FloatField("Время перехода из Stand в Idle", _timeFromStandToIdle); _destroyDelay = EditorGUILayout.FloatField("Время до уничтожения", _destroyDelay, GUILayout.MaxWidth(600)); _damageDelay = EditorGUILayout.FloatField("Время задержки урона", _damageDelay, GUILayout.MaxWidth(600)); if (GUILayout.Button("Применить настройки", EditorStyles.miniButton)) { _eBot.SetTimeFromStandToIdle(_timeFromStandToIdle); _eBot.SetDamageDelay(_damageDelay); _eBot.SetDestroyDelay(_destroyDelay); _isButtonDown = false; } } }
void InitEnemy() { GameObject enemyObj; enemyObj = Instantiate(_enemyBotManager.CurrentEnemyBotProperties.botModel, _enemySpawn.transform.position, _enemySpawn.transform.rotation) as GameObject; enemyObj.transform.localScale = new Vector3(1, 1, 1); _enemy = enemyObj.AddComponent <EnemyBot>(); _enemy.setProperties(_enemyBotManager.CurrentEnemyBotProperties); }
private void Aim(EnemyBot target, double power) { Point p = new Point { X = target.X, Y = target.Y }; for (int i = 0; i < 10; i++) { double nextTime = CoordinateHelper.GetDistance(p.X, p.Y, Robot.X, Robot.Y) / Rules.GetBulletSpeed(power); double time = Robot.Time + nextTime; p = GuessPosition(time, target); } Robot.Target = p; }
private Point GuessPosition(double time, EnemyBot target) { double diff = time - target.Time; Point? p = null; if (target.PreviousEntry != null) { double hCPT = (target.HeadingRad - target.PreviousEntry.HeadingRad) / (target.Time - target.PreviousEntry.Time); if (Math.Abs(hCPT) > 0.00001) { double radius = target.Velocity / hCPT; double toTargetHead = diff * hCPT; p = new Point { X = target.X + (Math.Cos(target.HeadingRad) * radius) - (Math.Cos(target.HeadingRad + toTargetHead) * radius), Y = target.Y + (Math.Sin(target.HeadingRad + toTargetHead) * radius) - (Math.Sin(target.HeadingRad) * radius) }; } } if (p == null) { p = new Point { X = target.X + Math.Sin(target.HeadingRad) * target.Velocity * diff, Y = target.Y + Math.Cos(target.HeadingRad) * target.Velocity * diff }; } double x = Math.Max(Robot.Width / 2, p.Value.X); x = Math.Min(Robot.BattleFieldWidth - Robot.Width / 2, x); double y = Math.Max(Robot.Height / 2, p.Value.Y); y = Math.Min(Robot.BattleFieldHeight - Robot.Height / 2, y); p = new Point { X = x, Y = y }; return((Point)p); }
public void Attack(EnemyBot target) { target.health -= this.damage; }
private long GetTimeOfMaxHistory(EnemyBot target, long maxHist = 30) { return(maxHist); }