/// <summary>
        ///     Возвращает случайного врага (ближнего или дальнего боя)
        ///     для текущей локации
        /// </summary>
        private Entity GetRandomEnemy() {
            bool isRange = CCRandom.Next(0, 2) == 0;

            Entity enemy = null;

            switch (_gameLayer.Location) {
                case Locations.Desert:
                    if (isRange)
                        enemy = new RangeEnemy(Resources.EnemyStinger, Util.GetUniqueId());
                    else
                        enemy = new MeleeEnemy(Resources.EnemyPirate, Util.GetUniqueId());
                    break;
                case Locations.Cave:
                    if (isRange)
                        enemy = new RangeEnemy(Resources.EnemyMagicRange, Util.GetUniqueId());
                    else
                        enemy = new MeleeEnemy(Resources.EnemyMagicMelee, Util.GetUniqueId());
                    break;
                case Locations.City:
                    if (isRange)
                        enemy = new RangeEnemy(Resources.EnemyStinger, Util.GetUniqueId());
                    else
                        enemy = new MeleeEnemy(Resources.EnemyMeleeRobot, Util.GetUniqueId());
                    break;
            }

            enemy.Position = new CCPoint(CCRandom.Next(0, (int) _gameLayer.MapSize().Width),
                CCRandom.Next(0, (int) _gameLayer.MapSize().Height));

            return enemy;
        }
Esempio n. 2
0
        // TODO: сделать в конструкторе

        /** AccState - если создается игрок, ему передается для связывания... (что плохо :( )*/

        public void AddEntity(EntityState es, AccountState accState = null) {
            Entity entity = null;

            /* Получаем название объекта по изображению */
            string textureName = es.TextureName;
            textureName = textureName.Replace("\\", "/").Split('/').Last();

            /** TODO: можно ли вынести куда-нибудь? можно ли обойтись без этого? 
                скорее всего в Resources, через словарь */
            switch (textureName) {
                case Resources.ClassMystic:
                case Resources.ClassReaper:
                case Resources.ClassSniper:
                    entity = new Player(es.Id, textureName, accState);
                    break;
                case Resources.ItemGold:
                    entity = new GoldStack(es.Id);
                    break;
                case Resources.ItemGate:
                    entity = new Gate(es.Id);
                    break;
                case Resources.ItemHealpot:
                    entity = new HealPot(es.Id);
                    break;
                case Resources.ObjectSmith:
                    entity = new Smith(es.Id);
                    break;
                case Resources.ProjectileMystic:
                    entity = new MysticProjectile(es.AttackDamage, es.Id);
                    break;
                case Resources.ProjectileLaser:
                case Resources.ProjectileCardinalPulse:
                case Resources.ProjectileCardinalRocket:
                    entity = new EnemyRangeProjectile(es.AttackDamage, textureName, es.Id);
                    break;
                case Resources.ParticleMeleeSweepAttack:
                    entity = new EnemyMeleeProjectile(es.AttackDamage, textureName, es.Id);
                    break;
                case Resources.ParticleMeleeSweepStart:
                    entity = new EnemyMeleeProjectileStart(es.AttackDamage, textureName, es.Id);
                    break;
                case Resources.EnemyMeleeRobot:
                case Resources.EnemyMagicMelee:
                case Resources.EnemyPirate:
                    entity = new MeleeEnemy(textureName, es.Id);
                    break;
                case Resources.EnemyStinger:
                case Resources.EnemyMagicRange:
                    entity = new RangeEnemy(textureName, es.Id);
                    break;
                case Resources.BossEmperor:
                    entity = new Emperor(es.Id);
                    break;
                case Resources.BossCardinal:
                    entity = new Cardinal(es.Id);
                    break;
                case Resources.BossInteritus:
                    entity = new Interitus(es.Id);
                    break;
                case Resources.BossMossorus:
                    entity = new Mossorus(es.Id);
                    break;
            }

            if (entity != null) {
                EntityState.AppendStateToEntity(entity, es);
                AddEntity(entity);
            }
            else {
                Log.Print("Error! Entity isn't created, New entity will not be added. " + textureName, LogType.Error);
            }
        }