예제 #1
0
    public AsteroidController(AsteroidModel model, AsteroidView view)
    {
        _view = view;


        // Bind Model
        model.Velocity.Subscribe(v => _view.SetVelocity(v));


        // Bind View >>>

        view.TriggerEnterEvents.Subscribe(col =>
        {
            switch (col.gameObject.layer)
            {
            case Layers.AsteroidsTriggers:
                LevelController.ChangeAsteroidsOnScreenCount(1);
                break;

            default:
                Destroy();
                break;
            }
        });

        view.TriggerExitEvents.Subscribe(col =>
        {
            switch (col.gameObject.layer)
            {
            case Layers.AsteroidsTriggers:
                LevelController.ChangeAsteroidsOnScreenCount(-1);
                break;
            }
        });
    }
        public EnumAsteroidType Predict(AsteroidModel asteroidModel)
        {
            var converted = ConvertToFeatures(asteroidModel);
            var multi     = IndexToEnum(_algo.Predict(converted));

            return(multi);
        }
예제 #3
0
    public void SpawnAsteroid(AsteroidModel prev)
    {
        if (prev)
        {
            _asteroids.Remove(prev);
        }

        // pick a random spawner position
        int index = Random.Range(0, _spawnPositions.Count);

        Vector3 position = _spawnPositions[index];

        GameObject asteroid = Instantiate(asteroidPrefab);

        asteroid.transform.parent   = asteroidContainer;
        asteroid.transform.position = position;

        // get a random direction and force
        Vector3 dir = new Vector3(
            Random.Range(-1.0f, 1.0f),
            Random.Range(-1.0f, 1.0f),
            0.0f
            );
        float     force = Random.Range(forceMin, forceMax);
        Rigidbody rb    = asteroid.GetComponent <Rigidbody>();

        rb.AddForce(dir.normalized * force);

        AsteroidView  view  = asteroid.GetComponent <AsteroidView>();
        AsteroidModel model = asteroid.GetComponent <AsteroidModel>();

        _asteroids.Add(model);
        view.controller = this;
        numAsteroids++;
    }
예제 #4
0
        // Parses the JSON received from the NeoWs API and returns a List<> with each asteroid and its relevant properties returned by the query.
        private static List <AsteroidModel> PopulateAsteroids(HttpResponseMessage queryResult)
        {
            var asteroidList = new List <AsteroidModel>();

            if (queryResult.IsSuccessStatusCode)
            {
                var     responseResult = queryResult.Content.ReadAsStringAsync().Result;
                dynamic json           = JValue.Parse(responseResult);

                foreach (dynamic day in json.near_earth_objects)
                {
                    foreach (dynamic occurence in day)
                    {
                        foreach (dynamic nearEarthObject in occurence)
                        {
                            var newAsteroid = new AsteroidModel();
                            newAsteroid.Id = nearEarthObject.id;
                            newAsteroid.PotentiallyHazardous = nearEarthObject.is_potentially_hazardous_asteroid;
                            newAsteroid.Name = nearEarthObject.name;
                            newAsteroid.EstimatedMinimumDiameter = nearEarthObject.estimated_diameter.miles.estimated_diameter_min;
                            newAsteroid.EstimatedMaximumDiameter = nearEarthObject.estimated_diameter.miles.estimated_diameter_max;
                            asteroidList.Add(newAsteroid);
                        }
                    }
                }
            }
            return(asteroidList);
        }
 public void DeathTrigger(AsteroidModel model, GameObject obj)
 {
     countAsterDeath++;
     lvlDataModel.currentAsteroid.Value = countAsterDeath;
     tmpAster = obj;
     gameModel.delAsterCollection(model);
     LvlLog();
 }
예제 #6
0
 public void Init(AsteroidModel asteroidModel, Vector2 movePosition, DestructionAsteroidView destructionAsteroidView,
                  AsteroidsType asteroidsType, Action <Transform, AsteroidsType> spawnSmallAsteroid)
 {
     _speed                   = UnityEngine.Random.Range(-asteroidModel.ForceRange, asteroidModel.ForceRange) + asteroidModel.MiddleForce;
     _movePosition            = movePosition;
     _destructionAsteroidView = destructionAsteroidView;
     _asteroidType            = asteroidsType;
     _spawnSmallAsteroid      = spawnSmallAsteroid;
 }
 void Awake()
 {
     asteroidController = GetComponentInChildren <AsteroidController>();
     asteroidModel      = new AsteroidModel();
     asteroidController.asteroidModel = asteroidModel;
     asteroidView = GetComponentInChildren <AsteroidView>();
     asteroidController.asteroidView = asteroidView;
     asteroidView.asteroidModel      = asteroidModel;
 }
예제 #8
0
    public AsteroidSpawner(SpawnerModel spawnerModel, AsteroidModel asteroidModel, Dictionary <AsteroidsType, AsteroidView> asteroidsView,
                           DestructionAsteroidView destructionAsteroidView)
    {
        _asteroidModel           = asteroidModel;
        _asteroidsView           = asteroidsView;
        _destructionAsteroidView = destructionAsteroidView;
        _spawnerModel            = spawnerModel;
        _camera = Camera.main;

        InitSpawnZonesPosition();
    }
예제 #9
0
 public void setModel(AsteroidModel model)
 {
     asteroidModel = model;
     print("bud` zdorov");
     asteroidModel.Position
     .ObserveEveryValueChanged(x => x.Value)
     .Subscribe(xs =>
     {
         transform.position = xs;
     }).AddTo(disposables);
 }
예제 #10
0
        public ActionResult Classify(AsteroidModel asteroid)
        {
            var ac = new AsteroidsClassification();

            ac.LoadMachine(false);

            asteroid.Classification = "";
            ViewBag.result          = ac.Predict(asteroid);

            return(View(asteroid));
        }
예제 #11
0
    private IEnumerator AsteroidsSpawn()
    {
        for (int i = 0; i < lvlStructSource.asteroidsCount; i++)
        {
            AsteroidModel asteroid = new AsteroidModel(lvlStructSource.asteroidsHP, RandomPositionSpawnAseter(), lvlStructSource.asteroidsSpeed);
            gameModel.setAsterCollection(asteroid);


            yield return(new WaitForSeconds(lvlStructSource.CoroutineRate));
        }
    }
예제 #12
0
 public AsteroidFactory(Vector3 position)
 {
     View = GameObject.Instantiate(
         Refs.Instance.AsteroidViewPrefab,
         position,
         Quaternion.identity,
         Refs.Instance.Gameplay
         );
     Model      = new AsteroidModel();
     Controller = new AsteroidController(Model, View);
 }
예제 #13
0
    public AsteroidsPool(AsteroidModel asteroidModel, List <AsteroidView> asteroidsView, Transform poolsParent,
                         SpawnerModel spawnerModel, DestructionAsteroidView destructionAsteroidView)
    {
        PoolManager.SetRoot(poolsParent);
        foreach (var asterod in asteroidsView)
        {
            PoolManager.WarmPool(asterod.gameObject, asteroidModel.AsteroidsCountInPool);
        }
        PoolManager.WarmPool(destructionAsteroidView.gameObject, 5);

        _spawner = new AsteroidSpawner(spawnerModel, asteroidModel, GetAsteroidsByType(asteroidsView), destructionAsteroidView);
    }
예제 #14
0
        public void SaveGame(IRepository <IPlayer> players, IRepository <IEnemy> enemies,
                             IRepository <IAsteroid> asteroids, UsersRepository users)
        {
            var game = new GameModel();

            foreach (var user in users.GetAll())
            {
                game.Users.Add(this.context.Users.FirstOrDefault(u => u.Username == user));
            }

            foreach (var player in players.GetAll())
            {
                var playerModel = new PlayerModel()
                {
                    Armor          = player.Armor,
                    BulletDamage   = player.BulletDamage,
                    BulletDelay    = player.BulletDelay,
                    BulletSpeed    = player.BulletSpeed,
                    IsAlive        = player.IsAlive,
                    Level          = player.Level,
                    MaxHealth      = player.MaxHealth,
                    PlayerIdentity = player.Id,
                    PositionX      = player.Position.X,
                    PositionY      = player.Position.Y,
                    Score          = player.Score,
                    Speed          = player.Speed,
                    Health         = player.Health
                };
                game.Players.Add(playerModel);
            }
            foreach (var enemy in enemies.GetAll())
            {
                var enemyModel = new EnemyModel()
                {
                    PositionX = enemy.Position.X,
                    PositionY = enemy.Position.Y
                };
                game.Enemies.Add(enemyModel);
            }
            foreach (var asteroid in asteroids.GetAll())
            {
                var asteroidModel = new AsteroidModel()
                {
                    PositionX = asteroid.Position.X,
                    PositionY = asteroid.Position.Y
                };
                game.Asteroids.Add(asteroidModel);
            }
            context.Games.Add(game);
            context.SaveChanges();
        }
예제 #15
0
 //тригеры для астероида
 public void TriggerDeathZ(Collider other, AsteroidModel model, GameObject obj)
 {
     if (other.CompareTag("DeathZone"))
     {
         DeathTrigger(model, obj);
     }
     if (other.CompareTag("Bullet"))
     {
         model.CurrentHp.Value--;
         if (model.CurrentHp.Value == 0)
         {
             DeathTrigger(model, obj);
         }
     }
 }
예제 #16
0
 public void init(EnemyManager owner)
 {
     hp = 20;
     fireRate = 0;
     speed = 3;
     this.owner = owner;
     col = gameObject.AddComponent<CircleCollider2D> ();
     body = gameObject.AddComponent<Rigidbody2D> ();
     body.isKinematic = true;
     transform.eulerAngles = new Vector3(0,0,180);
     var modelObject = GameObject.CreatePrimitive (PrimitiveType.Quad);
     model = modelObject.AddComponent<AsteroidModel>();
     gameObject.name = "Asteroid";
     this.tag = "asteroid";
     model.init(this);
 }
예제 #17
0
        public override IView <AsteroidModel> CreateAsteroid(AsteroidModel model)
        {
            var gameObject = _context.ViewMode == ViewMode.Polygonal
                ? Object.Instantiate(_context.AsteroidDataSetter.polygonalPrefab)
                : Object.Instantiate(_context.AsteroidDataSetter.spritePrefab);

            gameObject.name = "Asteroid" + _context.ViewMode;

            var view = gameObject.AddComponent <AsteroidView>();

            view.ViewMode = _context.ViewMode;
            view.Context  = _context;
            view.Model    = model;

            return(view);
        }
예제 #18
0
 private void Start()
 {
     asModel     = new AsteroidModel(type, position);
     asView      = CreateAsteroidView(type, position);
     disposables = new CompositeDisposable();
     Observable.EveryUpdate()
     .Subscribe(_ =>
     {
         asModel.UpdatePosition(-1 * Time.deltaTime);
     })
     .AddTo(disposables);
     asModel.position
     .ObserveEveryValueChanged(position => position.Value)
     .Subscribe(posValue =>
     {
         asView.UpdatePosition(posValue);
     })
     .AddTo(disposables);
     asView.isCollided
     .ObserveEveryValueChanged(position => position.Value)
     .Subscribe(posValue =>
     {
         asModel.LoseHp();
         asView.CloseFlag();
     })
     .AddTo(disposables);
     MessageBroker.Default
     .Receive <DeathNotice>()
     .Where(msg => msg.sender == asModel && msg.objectType == SpaceObjectType.asteroid)
     .Subscribe(_ => {
         SelfDestruct();
     })
     .AddTo(disposables);
     MessageBroker.Default
     .Receive <GameOverNotice>()
     .Subscribe(msg =>
     {
         disposables.Dispose();
     })
     .AddTo(this);
 }
예제 #19
0
    private AsteroidController CreateAsteroid(AsteroidModelIniter initer)
    {
        var model = new AsteroidModel
        {
            id     = ++_id,
            damage = 10,
            hp     = 10,
            radius = initer.radius,
            speed  = initer.speed,
            x      = initer.x,
            y      = initer.y,
            z      = 1,
            score  = 100
        };

        var asteroidController = new AsteroidController(model);
        var asteroid           = PoolManager.GetObject(PoolsEnum.ASTEROID);

        asteroid.GetComponent <Asteroid>().SetController(asteroidController, transform.rotation);
        return(asteroidController);
    }
예제 #20
0
        private AsteroidModel ConvertLineToModel(string line)
        {
            try
            {
                var model = new AsteroidModel();

                model.Des = line.Substring(0, 6).Trim();
                model.H   = Double.Parse(line.Substring(8, 5).Trim(), cu);
                model.G   = Double.Parse(line.Substring(14, 5).Trim(), cu);

                model.Epoch = line.Substring(20, 5);
                model.M     = Double.Parse(line.Substring(26, 9).Trim(), cu);
                model.Peri  = Double.Parse(line.Substring(37, 9).Trim(), cu);
                model.Node  = Double.Parse(line.Substring(48, 9).Trim(), cu);

                model.Incl = Double.Parse(line.Substring(59, 9).Trim(), cu);
                model.e    = Double.Parse(line.Substring(70, 9).Trim(), cu);
                model.n    = Double.Parse(line.Substring(80, 11).Trim(), cu);

                model.a         = Double.Parse(line.Substring(92, 11).Trim(), cu);
                model.Reference = line.Substring(107, 11);
                model.Obs       = Double.Parse(line.Substring(117, 4).Trim(), cu);

                model.Opp = Double.Parse(line.Substring(123, 3).Trim(), cu);
                //model.Arc = line.Substring();
                model.rms = Double.Parse(line.Substring(137, 4).Trim(), cu);

                //model.Perts = line.Substring();
                model.Computer       = line.Substring(150, 10).Trim();
                model.Classification = line.Substring(161, 4).Trim();

                model.Name = line.Substring(175, 10).Trim();

                return(model);
            }
            catch (Exception)
            {
                return(null);
            }
        }
예제 #21
0
 //тригеры для астероида
 public void TriggerDeathZ(Collider other, AsteroidModel model, GameObject obj)
 {
     if (other.CompareTag("DeathZone"))
     {
         Debug.Log("death zone");
         countAsterDeath++;
         tmp = obj;
         app.model.delAsterCollection(model);
         LvlLog();
     }
     if (other.CompareTag("Bullet"))
     {
         Debug.Log("death zone");
         model.CurrentHp.Value--;
         if (model.CurrentHp.Value == 0)
         {
             countAsterDeath++;
             tmp = obj;
             app.model.delAsterCollection(model);
             LvlLog();
         }
     }
 }
예제 #22
0
 public void setAsterCollection(AsteroidModel asteroidModel)
 {
     asteroidsCollection.Add(asteroidModel);
 }
예제 #23
0
 public AsteroidController(AsteroidModel model)
 {
     _model   = model;
     _suicide = false;
     _hp      = _model.hp;
 }
        private double[] ConvertToFeatures(AsteroidModel asteroid)
        {
            var doubles = new double[] { asteroid.G, asteroid.H, asteroid.M, asteroid.Perts, asteroid.Incl, asteroid.Node, asteroid.Obs, asteroid.Opp, asteroid.a, asteroid.n, asteroid.e };

            return(doubles);
        }
예제 #25
0
 public void delAsterCollection(AsteroidModel asteroidModel)
 {
     asteroidsCollection.Remove(asteroidModel);
 }
예제 #26
0
 public abstract IView <AsteroidModel> CreateAsteroid(AsteroidModel model);