public static IEnumerator PostJoinWorld( int worldId, string playerClass ) { HTTP.Request request = new HTTP.Request( "Post", string.Format("{0}/worlds/{1}/players.json", urlServer, worldId) ); request.AddHeader( "type", playerClass ); request.AddParameters( WebRequests.authenticatedGodModeParameters ); request.Send(); while( !request.isDone ) { yield return 0; } }
public static void JoinWorld( int worldId, string playerClass ) { if( worldId < 0 ) { throw new ArgumentException( string.Format("WorldId( {0} ) is invalid", worldId) ); } HTTP.JSON playerT = new HTTP.JSON( "{ \"player\": {\"type\": \"" + playerClass + "\"}}" ); //WWW www = WWWX.Post( string.Format("{0}/worlds/{1}/players.json", urlServer, worldId), playerT, authenticatedGodModeParameters ); HTTP.Request request = new HTTP.Request( "Post", string.Format("{0}/worlds/{1}/players.json", urlServer, worldId) ); request.SetText( playerT ); request.AddParameters( authenticatedGodModeParameters ); request.Send(); while( !request.isDone ) { } Debug.Log(request.response.Text); request = new HTTP.Request( "Get", urlGetUserPlayers() ); request.AddParameters( authenticatedGodModeParameters ); request.Send(); while( !request.isDone ) { } }
/// <summary> /// Downloads the player data. /// </summary> /// <returns> /// The player data for. /// </returns> /// <param name='player'> /// Player. /// </param> public static IEnumerator DownloadPlayerData(Player player) { HTTP.Request request = new HTTP.Request( "Get", urlGetUserPlayers() ); request.AddParameters( authenticatedParameters ); request.Send(); while( !request.isDone ) { yield return 0; } Func<string, PlayersData> playersDataDecodeDelegate = JSONDecoder.Decode<PlayersData>; IAsyncResult ar = playersDataDecodeDelegate.BeginInvoke( request.response.Text, null, null ); while( !ar.IsCompleted ) { yield return 0; } PlayersData playersData = playersDataDecodeDelegate.EndInvoke( ar ); // get the player from the list of players for the selected the world player.data = playersData.GetPlayerWithWorldId(UserData.worldNumber); }
/// <summary> /// Downloads the world. /// </summary> /// <returns> /// The world. /// </returns> public static IEnumerator DownloadWorld() { HTTP.Request request = new HTTP.Request( "Get", WebRequests.urlGetWorld ); request.AddParameters( authenticatedParameters ); request.Send(); while( !request.isDone ) { yield return 0; } if( request.ProducedError ) { Debug.LogError( request.Error ); yield break; } Func<string, WorldsData> asyncDelegate = JSONDecoder.Decode<WorldsData>; IAsyncResult ar = asyncDelegate.BeginInvoke( request.response.Text, null, null ); while( !ar.IsCompleted ) { yield return 0; } WorldData world = asyncDelegate.EndInvoke( ar ).world; Debug.Log (string.Format ("This is the tilesize from world: {0}", world.megatile_height)); TerrainManager.worldRegion = new Region(0, world.width-1, world.height-1, 0); Megatile.SetMegatileSize(world.megatile_height); // NOTE: just assumes square tile size // move terrain and camera to center float x, z; TerrainManager.worldRegion.GetCenter(out x, out z); CameraRig.use.JumpTo(new Vector3(x, 0f, z)); TerrainManager.use.MoveTerrainToCenterOfView(); // tell everyone the world is loaded MessengerAM.Send(new MessageWorldLoaded()); //Messenger.Broadcast(kWorldLoaded); }
public static bool ClearWorldOfPlayers( int worldId ) { int prevWorld = UserData.worldNumber; UserData.worldNumber = worldId; HTTP.Request request = null; try { request = new HTTP.Request( "Get", WebRequests.urlGetWorld ); request.AddParameters( WebRequests.authenticatedGodModeParameters ); request.Send(); while( !request.isDone ) {} if( request.ProducedError ) { Debug.Log( string.Format("Unable to find or delete players on world {0} (harmless)", worldId) ); return true; } } catch { //Debug.LogError( www.error ); return false; } WorldsData data = null; try { data = JSONDecoder.Decode<WorldsData>( request.response.Text ); } catch( JsonException e ) { Debug.LogError( e ); return false; } ///////// foreach( PlayerData p in data.world.players ) { request = new HTTP.Request( "Delete", WebRequests.urlDeletePlayer(p.world_id, p.id) ); request.AddParameters( WebRequests.authenticatedGodModeParameters ); request.Send(); while( !request.isDone ) {} if( request.ProducedError ) { Debug.LogError( request.Error ); return false; } } ///////// try { request = new HTTP.Request( "Get", WebRequests.urlGetWorld ); request.AddParameters( WebRequests.authenticatedGodModeParameters ); request.Send(); while( !request.isDone ) {} if( request.ProducedError ) { Debug.LogError( request.Error ); return false; } } catch { //Debug.LogError( www.error ); return false; } UserData.worldNumber = prevWorld; try { data = JSONDecoder.Decode<WorldsData>( request.response.Text ); } catch( JsonException e ) { Debug.LogError( e ); return false; } return data.world.players == null || data.world.players.Length <= 0; }
/// <summary> /// Forces a put of resource tile modifications using god mode. /// </summary> /// <remarks> /// This is a temporary solution for implementing actions with no server API point, and can eventually be removed. /// </remarks> /// <param name='selection'> /// The selection. /// </param> protected virtual IEnumerator Put(ResourceTileSelection selection) { HTTP.Request request; m_actionProgress = 0f; string json = GetActionJson(); Debug.Log(json); List<ResourceTile> tiles = new List<ResourceTile>(); float div = 1f/selection.Count(); for (int i=0; i<selection.Count(); ++i) { int id = selection[i]; request = new HTTP.Request( "Put", WebRequests.GetURLToResourceTile(id) ); request.SetText( json ); request.AddParameters( WebRequests.authenticatedGodModeParameters ); request.Send(); while (!request.isDone) { //m_actionProgress = (i+www.uploadProgress)*div; yield return 0; } if( request.ProducedError ) { m_actionProgress = 1f; yield break; } try { tiles.Add(JSONDecoder.Decode<IndividualResourceTile>(request.response.Text).resource_tile); } catch (JsonException) { Debug.LogError(request.response.Text); } } // ConcludeActionOnResourceTiles(tiles.ToArray()); //Update the world IEnumerator e = WebRequests.RefreshWorldData(new WebCoroutine()); yield return e.Current; while(e.MoveNext()) yield return e.Current; }
/// <summary> /// Execute the harvest /// </summary> public IEnumerator DoIt() { // submit harvest to API point progress = 0f; doItError = ""; HTTP.Request request = GetDoItWWW(); //Debug.Log(request.bytes); request.Send(); while (!request.isDone) { //progress = Mathf.Min(www.uploadProgress+www.progress, 0.99f); yield return 0; } // deserialize the product values Harvest.Products products; Debug.Log( request.response.status ); try { products = JSONDecoder.Decode<Harvest.Products>( request.response.Text ); } catch (JsonException e) { Debug.LogError(e.ToString()+"\n"+request.response.Text); //doItError = www.error; progress = 1f; yield break; } // TODO: since server api does not presently modify cover type, modify it with god mode here if (this.cutType == CutType.Clearcut) { PlayerAction.ResourceTileModification modification = new PlayerAction.ResourceTileModification(); modification.resource_tile = new ClearcutModifiedFields(); string json = JsonMapper.ToJson(modification); foreach (int id in this.ids) { request = new HTTP.Request( "Get", WebRequests.GetURLToResourceTile(id) ); request.AddParameters( WebRequests.authenticatedParameters ); request.Send(); while( !request.isDone ) { yield return 0; } //if (!string.IsNullOrEmpty(www.error)) { // progress = 1f; doItError = www.error; // yield break; //} ResourceTile tile; try { tile = JSONDecoder.Decode<IndividualResourceTile>(request.response.Text).resource_tile; switch (tile.baseCoverType) { // case BaseCoverType.Barren: // case BaseCoverType.CultivatedCrops: case BaseCoverType.Developed: case BaseCoverType.Excluded: // case BaseCoverType.Forest: // case BaseCoverType.Herbaceous: case BaseCoverType.Unknown: case BaseCoverType.Water: // case BaseCoverType.Wetland: continue; } } catch (JsonException e) { Debug.LogError(e.ToString()+"\n"+request.response.Text); } request = new HTTP.Request( "Put", WebRequests.GetURLToResourceTile(id) ); request.SetText( json ); request.AddParameters( WebRequests.authenticatedGodModeParameters ); request.Send(); while( !request.isDone ) { yield return 0; } //if (!string.IsNullOrEmpty(www.error)) { // progress = 1f; doItError = www.error; // yield break;letmein //} } } // add products to harvest history if (m_history == null) { m_history = new List<Products>(); } m_history.Add(products); // set progress to done progress = 1f; doItError = ""; // broadcast message that harvest was executed MessengerAM.Send(new MessageHarvestExecuted(this, products)); // TODO: Collapse these two messages into one Messenger<Products>.Broadcast("HarvestProducts",products); }
/// <summary> /// Gets a WWW object do perform the harvest, configured for the associated api point on the server. /// </summary> /// <returns> /// The do it WWW. /// </returns> public HTTP.Request GetDoItWWW() { string apiPoint = ""; Dictionary<string, string> parameters = WebRequests.authenticatedParameters; switch (this.cutType) { case CutType.Clearcut: apiPoint = "clearcut"; break; case CutType.DiameterLimitCut: apiPoint = "diameter_limit_cut"; parameters.Add(this.diameterLimitCutDirection==DiameterLimitCutDirection.Greater?"above":"below", this.diameterLimit.ToString()); break; case CutType.QRatioCut: apiPoint = "partial_selection_cut"; parameters.Add("qratio", this.qRatio.ToString()); parameters.Add("target_basal_area", this.basalArea.ToString()); break; } string url = string.Format( "{0}/worlds/{1}/resource_tiles/{2}.json", WebRequests.urlServer, UserData.worldNumber, apiPoint ); HTTP.Request request = new HTTP.Request( "Post", url ); request.AddParameters( parameters ); HTTP.JSON json = new HTTP.JSON(); json.Data = JsonMapper.ToJson( new ResourceTileSelection(this.ids) ); request.SetText(json); ///.ToJson() ); //Debug.Log(new ResourceTileSelection(this.ids).ToJson()); return request; }
/// <summary> /// Computes the center point based on the bounds of the tile positions. /// </summary> /// <returns> /// The center point. /// </returns> public IEnumerator ComputeCenterPoint() { HTTP.Request request = new HTTP.Request( "Get", WebRequests.GetURLToResourceTile(this.ids[0]) ); request.AddParameters( WebRequests.authenticatedGodModeParameters ); request.Send(); while( !request.isDone ) { yield return 0; } if( request.ProducedError ) { Debug.LogError( "Unable to compute center point of harvest: " + request.Error ); yield break; }; ResourceTile tile = new ResourceTile(); try { tile = JSONDecoder.Decode<IndividualResourceTile>(request.response.Text).resource_tile; } catch (JsonException) { Debug.LogError("Error parsing json data:\n"+request.response.Text); } Bounds bounds = new Bounds(tile.GetSimpleCenterPoint(), new Vector3(1f,0f,1f)); foreach (int id in this.ids) { request = new HTTP.Request( "Get", WebRequests.GetURLToResourceTile(id) ); request.AddParameters( WebRequests.authenticatedGodModeParameters ); request.Send(); while( !request.isDone ) { yield return 0; } if( request.ProducedError ) { Debug.LogError( "Unable to compute center point of harvest: " + request.Error ); yield break; } try { tile = JSONDecoder.Decode<IndividualResourceTile>(request.response.Text).resource_tile; bounds.Encapsulate(tile.GetSimpleCenterPoint()); } catch (JsonException) { Debug.LogError("Error parsing json data:\n"+request.response.Text); } } // set the center point from the bounding box this.centerPoint = bounds.center; }