TSharedRef<FJsonObject> UFlareSaveWriter::SavePeople(FFlarePeopleSave* Data) { TSharedRef<FJsonObject> JsonObject = MakeShareable(new FJsonObject()); JsonObject->SetStringField("Population", FormatInt32(Data->Population)); JsonObject->SetStringField("FoodStock", FormatInt32(Data->FoodStock)); JsonObject->SetStringField("FuelStock", FormatInt32(Data->FuelStock)); JsonObject->SetStringField("ToolStock", FormatInt32(Data->ToolStock)); JsonObject->SetStringField("TechStock", FormatInt32(Data->TechStock)); SaveFloat(JsonObject,"FoodConsumption", Data->FoodConsumption); SaveFloat(JsonObject,"FuelConsumption", Data->FuelConsumption); SaveFloat(JsonObject,"ToolConsumption", Data->ToolConsumption); SaveFloat(JsonObject,"TechConsumption", Data->TechConsumption); JsonObject->SetStringField("Money", FormatInt32(Data->Money)); JsonObject->SetStringField("Dept", FormatInt32(Data->Dept)); JsonObject->SetStringField("BirthPoint", FormatInt32(Data->BirthPoint)); JsonObject->SetStringField("DeathPoint", FormatInt32(Data->DeathPoint)); JsonObject->SetStringField("HungerPoint", FormatInt32(Data->HungerPoint)); JsonObject->SetStringField("HappinessPoint", FormatInt32(Data->HappinessPoint)); TArray< TSharedPtr<FJsonValue> > CompanyReputations; for(int i = 0; i < Data->CompanyReputations.Num(); i++) { CompanyReputations.Add(MakeShareable(new FJsonValueObject(SaveCompanyReputation(&Data->CompanyReputations[i])))); } JsonObject->SetArrayField("CompanyReputations", CompanyReputations); return JsonObject; }
TSharedRef<FJsonObject> UFlareSaveWriter::SaveSpacecraftComponentTurret(FFlareSpacecraftComponentTurretSave* Data) { TSharedRef<FJsonObject> JsonObject = MakeShareable(new FJsonObject()); SaveFloat(JsonObject,"TurretAngle", Data->TurretAngle); SaveFloat(JsonObject,"BarrelsAngle", Data->BarrelsAngle); return JsonObject; }
TSharedRef<FJsonObject> UFlareSaveWriter::SaveSpacecraft(FFlareSpacecraftSave* Data) { TSharedRef<FJsonObject> JsonObject = MakeShareable(new FJsonObject()); JsonObject->SetStringField("Immatriculation", Data->Immatriculation.ToString()); JsonObject->SetStringField("NickName", Data->NickName.ToString()); JsonObject->SetStringField("Identifier", Data->Identifier.ToString()); JsonObject->SetStringField("CompanyIdentifier", Data->CompanyIdentifier.ToString()); JsonObject->SetStringField("Location", FormatVector(Data->Location)); JsonObject->SetStringField("Rotation", FormatRotator(Data->Rotation)); JsonObject->SetStringField("SpawnMode", FormatEnum<EFlareSpawnMode::Type>("EFlareSpawnMode",Data->SpawnMode)); JsonObject->SetStringField("LinearVelocity", FormatVector(Data->LinearVelocity)); JsonObject->SetStringField("AngularVelocity", FormatVector(Data->AngularVelocity)); JsonObject->SetStringField("DockedTo", Data->DockedTo.ToString()); JsonObject->SetStringField("DockedAt", FormatInt32(Data->DockedAt)); SaveFloat(JsonObject,"Heat", Data->Heat); SaveFloat(JsonObject,"PowerOutageDelay", Data->PowerOutageDelay); SaveFloat(JsonObject,"PowerOutageAcculumator", Data->PowerOutageAcculumator); JsonObject->SetStringField("DynamicComponentStateIdentifier", Data->DynamicComponentStateIdentifier.ToString()); SaveFloat(JsonObject,"DynamicComponentStateProgress", Data->DynamicComponentStateProgress); JsonObject->SetStringField("Level", FormatInt32(Data->Level)); JsonObject->SetBoolField("IsTrading", Data->IsTrading); JsonObject->SetObjectField("Pilot", SavePilot(&Data->Pilot)); JsonObject->SetObjectField("Asteroid", SaveAsteroid(&Data->AsteroidData)); TArray< TSharedPtr<FJsonValue> > Components; for(int i = 0; i < Data->Components.Num(); i++) { Components.Add(MakeShareable(new FJsonValueObject(SaveSpacecraftComponent(&Data->Components[i])))); } JsonObject->SetArrayField("Components", Components); TArray< TSharedPtr<FJsonValue> > Cargo; for(int i = 0; i < Data->Cargo.Num(); i++) { Cargo.Add(MakeShareable(new FJsonValueObject(SaveCargo(&Data->Cargo[i])))); } JsonObject->SetArrayField("Cargo", Cargo); TArray< TSharedPtr<FJsonValue> > FactoryStates; for(int i = 0; i < Data->FactoryStates.Num(); i++) { FactoryStates.Add(MakeShareable(new FJsonValueObject(SaveFactory(&Data->FactoryStates[i])))); } JsonObject->SetArrayField("FactoryStates", FactoryStates); TArray< TSharedPtr<FJsonValue> > SalesExcludedResources; for(int i = 0; i < Data->SalesExcludedResources.Num(); i++) { SalesExcludedResources.Add(MakeShareable(new FJsonValueString(Data->SalesExcludedResources[i].ToString()))); } JsonObject->SetArrayField("SalesExcludedResources", SalesExcludedResources); return JsonObject; }
TSharedRef<FJsonObject> UFlareSaveWriter::SaveBomb(FFlareBombSave* Data) { TSharedRef<FJsonObject> JsonObject = MakeShareable(new FJsonObject()); JsonObject->SetStringField("Location", FormatVector(Data->Location)); JsonObject->SetStringField("Rotation", FormatRotator(Data->Rotation)); JsonObject->SetStringField("LinearVelocity", FormatVector(Data->LinearVelocity)); JsonObject->SetStringField("AngularVelocity", FormatVector(Data->AngularVelocity)); JsonObject->SetStringField("WeaponSlotIdentifier", Data->WeaponSlotIdentifier.ToString()); JsonObject->SetStringField("ParentSpacecraft", Data->ParentSpacecraft.ToString()); JsonObject->SetBoolField("Activated", Data->Activated); JsonObject->SetBoolField("Dropped", Data->Dropped); SaveFloat(JsonObject,"DropParentDistance", Data->DropParentDistance); SaveFloat(JsonObject,"LifeTime", Data->LifeTime); return JsonObject; }
/*! Save parameters of AKFVEC type structure to file. This function adds ".x", ".y" and ".z" to the last of parameter name and save value with the combined name. @return If function fails, the return value is 0. When function fails, not all parameters are saved to file, i.e. parameters file may collapsed. If function succeeds, the return value is 1. @param[in] fp Pointer to \c FILE structure. @param[in] lpKeyName The name of paraemter. @param[in] vec Pointer to \c AKFVEC type structure. */ int16 SaveFloatVec(FILE *fp, const char *lpKeyName, const AKFVEC *vec) { int16 ret = 0; char keyName[64]; ret = 1; snprintf(keyName, sizeof(keyName), "%s.x", lpKeyName); ret = ret && SaveFloat(fp, keyName, vec->u.x); snprintf(keyName, sizeof(keyName), "%s.y", lpKeyName); ret = ret && SaveFloat(fp, keyName, vec->u.y); snprintf(keyName, sizeof(keyName), "%s.z", lpKeyName); ret = ret && SaveFloat(fp, keyName, vec->u.z); return ret; }
TSharedRef<FJsonObject> UFlareSaveWriter::SaveCompanyReputation(FFlareCompanyReputationSave* Data) { TSharedRef<FJsonObject> JsonObject = MakeShareable(new FJsonObject()); JsonObject->SetStringField("CompanyIdentifier", Data->CompanyIdentifier.ToString()); SaveFloat(JsonObject,"Reputation", Data->Reputation); return JsonObject; }
TSharedRef<FJsonObject> UFlareSaveWriter::SaveResourcePrice(FFFlareResourcePrice* Data) { TSharedRef<FJsonObject> JsonObject = MakeShareable(new FJsonObject()); JsonObject->SetStringField("ResourceIdentifier", Data->ResourceIdentifier.ToString()); SaveFloat(JsonObject,"Price", Data->Price); JsonObject->SetObjectField("Prices", SaveFloatBuffer(&Data->Prices)); return JsonObject; }
TSharedRef<FJsonObject> UFlareSaveWriter::SaveQuestStepProgress(FFlareQuestStepProgressSave* Data) { TSharedRef<FJsonObject> JsonObject = MakeShareable(new FJsonObject()); JsonObject->SetStringField("ConditionIdentifier", Data->ConditionIdentifier.ToString()); JsonObject->SetStringField("CurrentProgression", FormatInt32(Data->CurrentProgression)); JsonObject->SetStringField("InitialTransform", FormatTransform(Data->InitialTransform)); SaveFloat(JsonObject,"InitialVelocity", Data->InitialVelocity); return JsonObject; }
TSharedRef<FJsonObject> UFlareSaveWriter::SaveSpacecraftComponent(FFlareSpacecraftComponentSave* Data) { TSharedRef<FJsonObject> JsonObject = MakeShareable(new FJsonObject()); JsonObject->SetStringField("ComponentIdentifier", Data->ComponentIdentifier.ToString()); JsonObject->SetStringField("ShipSlotIdentifier", Data->ShipSlotIdentifier.ToString()); SaveFloat(JsonObject,"Damage", Data->Damage); JsonObject->SetObjectField("Turret", SaveSpacecraftComponentTurret(&Data->Turret)); JsonObject->SetObjectField("Weapon", SaveSpacecraftComponentWeapon(&Data->Weapon)); JsonObject->SetObjectField("Pilot", SaveTurretPilot(&Data->Pilot)); return JsonObject; }
/*! Save parameters to file which is specified with #CSPEC_SETTING_FILE. This function saves variables when the offsets of magnetic sensor estimated successfully. @return If function fails, the return value is #DMT_FAIL. When function fails, the parameter file may collapsed. Therefore, the parameters file should be discarded. If function succeeds, the return value is #DMT_SUCCESS. @param[out] prms A pointer to #AS9888PRMS structure. Member variables are saved to the parameter file. */ int16 SaveParameters(AS9888PRMS *prms) { int16 ret = 1; FILE *fp; //Open setting file for write. if ((fp = fopen(CSPEC_SETTING_FILE, "w")) == NULL) { DMTERROR_STR("fopen"); return DMT_FAIL; } /* Save data to HO */ ret = ret && SaveFloatVec(fp, "HO", &prms->mfv_HO); /* Save FST_COMP */ ret = ret && SaveFloat(fp, "t9eRt", prms->m_cmp.t9eRt); ret = ret && SaveFloat(fp, "t9eLv", prms->m_cmp.t9eLv); ret = ret && SaveFloatVec(fp, "kst", &prms->m_cmp.kst); ret = ret && SaveFloatVec(fp, "st", &prms->m_cmp.st); ret = ret && SaveFloatVec(fp, "kot", &prms->m_cmp.kot); ret = ret && SaveFloatVec(fp, "ot", &prms->m_cmp.ot); if (fclose(fp) != 0) { DMTERROR_STR("fclose"); ret = 0; } if (ret == 0) { DMTERROR_STR(__FUNCTION__); return DMT_FAIL; } return DMT_SUCCESS; }