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); }
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); }