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);
        }
Esempio n. 3
0
    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;
            }
        }
    }
Esempio n. 4
0
    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);
        }
Esempio n. 7
0
 public void Attack(EnemyBot target)
 {
     target.health -= this.damage;
 }
 private long GetTimeOfMaxHistory(EnemyBot target, long maxHist = 30)
 {
     return(maxHist);
 }