private void SpawnAirplane(TiledObject airData)
        {
            float airSpeed       = airData.GetFloatProperty("speed", 200);
            int   lifeTime       = (int)(airData.GetFloatProperty("life_time", 12) * 1000);
            int   spawnFrequency = (int)(airData.GetFloatProperty("spawn_frequency_time", 0) * 1000);

            var airplane = GetAirplaneFromPool();

            airplane.LoadStartupData(airData.X, airData.Y, airData.Width, airData.Height, _level, _level.Stork,
                                     airSpeed,
                                     airData.rotation, lifeTime);

            airplane.SetActive(true);

            if (lifeTime > 0)
            {
                CoroutineManager.StartCoroutine(DespawnAirplaneAfterLifeTime(airplane, lifeTime), this);
            }

            if (spawnFrequency > 0)
            {
                CoroutineManager.StartCoroutine(SpawnAirplaneAfterDelay(airData, spawnFrequency), this);
            }

            _airplanesMap.Add(airplane, airData);
        }
示例#2
0
        public void SpawnTornado(TiledObject tornadoData)
        {
            int   throwAngleMin = tornadoData.GetIntProperty("throw_angle_min", 0);
            int   throwAngleMax = tornadoData.GetIntProperty("throw_angle_max", 359);
            float throwDistance = tornadoData.GetFloatProperty("throw_distance", 512);

            var tornado = new TornadoGameObject(tornadoData.X, tornadoData.Y, tornadoData.Width, tornadoData.Height, throwAngleMin, throwAngleMax, throwDistance);

            tornado.OnUpdateListeners = tornado.OnUpdateListeners.Concat(new IOnUpdateListener[] { _enemiesSoundManager })
                                        .ToArray();

            CoroutineManager.StartCoroutine(WaitForTargetBeenSetInLevel(tornado), this);

            string idString = tornadoData.Name.Replace("tornado ", "");

            if (int.TryParse(idString, NumberStyles.Integer, CultureInfo.InvariantCulture, out var id))
            {
                //Check if has path
                var pathObj = _level.Map.ObjectGroup.Objects.FirstOrDefault(ob => ob.Name == $"path tornado {id}");
                if (pathObj != null && pathObj.polygons?.Length == 1)
                {
                    var pathPos = new Vector2(pathObj.X, pathObj.Y);

                    //Get points
                    var pts = pathObj.polygons[0].points.Select(pt => pt + pathPos).ToArray();

                    if (pts.Length > 0)
                    {
                        tornado.Path = pts;
                    }
                }
            }

            _level.AddChild(tornado);

            _tornadosList.Add(tornado);
        }