15#include "dev_system.h"
19#include "dev_uniedit.h"
29static int dsys_compSpob(
const void *spob1,
const void *spob2 );
30static int dsys_compJump(
const void *jmp1,
const void *jmp2 );
42 p1 = * (
const Spob**) spob1;
43 p2 = * (
const Spob**) spob2;
59 return strcmp( va1->
name, va2->
name );
71 const JumpPoint *jp1, *jp2;
72 jp1 = * (
const JumpPoint**) jmp1;
73 jp2 = * (
const JumpPoint**) jmp2;
74 return strcmp( jp1->target->name, jp2->target->name );
86 xmlTextWriterPtr writer;
87 const Spob **sorted_spobs;
89 const JumpPoint **sorted_jumps;
90 char *file, *cleanName;
96 writer = xmlNewTextWriterDoc(&doc, 0);
98 WARN(_(
"testXmlwriterDoc: Error creating the xml writer"));
107 xmlw_startElem( writer,
"ssys" );
110 xmlw_attr( writer,
"name",
"%s", sys->name );
113 xmlw_startElem( writer,
"general" );
114 if (sys->background != NULL)
115 xmlw_elem( writer,
"background",
"%s", sys->background );
116 if (sys->map_shader != NULL)
117 xmlw_elem( writer,
"map_shader",
"%s", sys->map_shader );
118 if (sys->features != NULL)
119 xmlw_elem( writer,
"features",
"%s", sys->features );
120 xmlw_elem( writer,
"radius",
"%f", sys->radius );
121 xmlw_elem( writer,
"stars",
"%d", sys->stars );
122 xmlw_elem( writer,
"interference",
"%f", sys->interference );
123 xmlw_startElem( writer,
"nebula" );
124 xmlw_attr( writer,
"volatility",
"%f", sys->nebu_volatility );
125 if (fabs(sys->nebu_hue*360.0 - NEBULA_DEFAULT_HUE) > 1e-5)
126 xmlw_attr( writer,
"hue",
"%f", sys->nebu_hue*360.0 );
127 xmlw_str( writer,
"%f", sys->nebu_density );
128 xmlw_endElem( writer );
129 xmlw_endElem( writer );
132 xmlw_startElem( writer,
"pos" );
133 xmlw_attr( writer,
"x",
"%f", sys->pos.x );
134 xmlw_attr( writer,
"y",
"%f", sys->pos.y );
135 xmlw_endElem( writer );
139 memcpy( sorted_spobs, sys->spobs,
sizeof(
Spob*) *
array_size(sys->spobs) );
144 memcpy( sorted_virtualspobs, sys->spobs_virtual,
sizeof(
VirtualSpob*) *
array_size(sys->spobs_virtual) );
148 xmlw_startElem( writer,
"spobs" );
150 xmlw_elem( writer,
"spob",
"%s", sorted_spobs[i]->name );
151 for (
int i=0; i<
array_size(sys->spobs_virtual); i++)
152 xmlw_elem( writer,
"spob_virtual",
"%s", sorted_virtualspobs[i]->name );
153 xmlw_endElem( writer );
155 free(sorted_virtualspobs);
158 sorted_jumps = malloc(
sizeof(JumpPoint*) *
array_size(sys->jumps) );
160 sorted_jumps[i] = &sys->jumps[i];
162 xmlw_startElem( writer,
"jumps" );
163 for (
int i=0; i<
array_size(sys->jumps); i++) {
164 const JumpPoint *jp = sorted_jumps[i];
165 xmlw_startElem( writer,
"jump" );
166 xmlw_attr( writer,
"target",
"%s", jp->target->name );
168 if (!jp_isFlag( jp, JP_AUTOPOS )) {
169 xmlw_startElem( writer,
"pos" );
170 xmlw_attr( writer,
"x",
"%f", jp->pos.x );
171 xmlw_attr( writer,
"y",
"%f", jp->pos.y );
172 xmlw_endElem( writer );
175 xmlw_elemEmpty( writer,
"autopos" );
177 if (jp->radius != 200.)
178 xmlw_elem( writer,
"radius",
"%f", jp->radius );
180 if (jp_isFlag( jp, JP_HIDDEN ))
181 xmlw_elemEmpty( writer,
"hidden" );
182 if (jp_isFlag( jp, JP_EXITONLY ))
183 xmlw_elemEmpty( writer,
"exitonly" );
184 xmlw_elem( writer,
"hide",
"%f", jp->hide );
185 xmlw_endElem( writer );
187 xmlw_endElem( writer );
192 xmlw_startElem( writer,
"asteroids" );
193 for (
int i=0; i<
array_size(sys->asteroids); i++) {
195 xmlw_startElem( writer,
"asteroid" );
199 xmlw_elem( writer,
"group",
"%s", ast->
groups[j]->
name );
202 xmlw_elem( writer,
"radius",
"%f", ast->
radius );
205 xmlw_startElem( writer,
"pos" );
206 xmlw_attr( writer,
"x",
"%f", ast->
pos.
x );
207 xmlw_attr( writer,
"y",
"%f", ast->
pos.
y );
208 xmlw_endElem( writer );
211 if (ast->
density != ASTEROID_DEFAULT_DENSITY)
212 xmlw_elem( writer,
"density",
"%f", ast->
density );
213 if (ast->
maxspeed != ASTEROID_DEFAULT_MAXSPEED)
214 xmlw_elem( writer,
"maxspeed",
"%f", ast->
maxspeed );
215 if (ast->
thrust != ASTEROID_DEFAULT_THRUST)
216 xmlw_elem( writer,
"thrust",
"%f", ast->
thrust );
217 xmlw_endElem( writer );
219 for (
int i=0; i<
array_size(sys->astexclude); i++) {
221 xmlw_startElem( writer,
"exclusion" );
224 xmlw_elem( writer,
"radius",
"%f", aexcl->
radius );
227 xmlw_startElem( writer,
"pos" );
228 xmlw_attr( writer,
"x",
"%f", aexcl->
pos.
x );
229 xmlw_attr( writer,
"y",
"%f", aexcl->
pos.
y );
230 xmlw_endElem( writer );
231 xmlw_endElem( writer );
233 xmlw_endElem( writer );
236 if (sys->stats != NULL) {
237 xmlw_startElem( writer,
"stats" );
239 xmlw_endElem( writer );
243 xmlw_startElem( writer,
"tags" );
245 xmlw_elem( writer,
"tag",
"%s", sys->tags[i] );
246 xmlw_endElem( writer );
249 xmlw_endElem( writer );
253 xmlFreeTextWriter(writer);
256 cleanName = uniedit_nameFilter( sys->name );
258 if (xmlSaveFileEnc( file, doc,
"UTF-8" ) < 0)
259 WARN(
"Failed writing '%s'!", file);
Provides macros to work with dynamic arrays.
static ALWAYS_INLINE int array_size(const void *array)
Returns number of elements in the array.
static int dsys_compVirtualSpob(const void *spob1, const void *spob2)
Compare function for spob qsort.
int dsys_saveSystem(StarSystem *sys)
Saves a star system.
int dsys_saveAll(void)
Saves all the star systems.
static int dsys_compSpob(const void *spob1, const void *spob2)
Compare function for spob qsort.
static int dsys_compJump(const void *jmp1, const void *jmp2)
Function for qsorting jumppoints.
Header file with generic functions and naev-specifics.
int asprintf(char **strp, const char *fmt,...)
Like sprintf(), but it allocates a large-enough string and returns the pointer in the first argument....
void xmlw_setParams(xmlTextWriterPtr writer)
Sets up the standard xml write parameters.
int ss_listToXML(xmlTextWriterPtr writer, const ShipStatList *ll)
Creatse a shipstat list element from an xml node.
StarSystem * system_getAll(void)
Gets an array (array.h) of all star systems.
void system_reconstructJumps(StarSystem *sys)
Reconstructs the jumps for a single system.
Represents an asteroid field anchor.
AsteroidTypeGroup ** groups
Represents an asteroid exclusion zone.
Represents a Space Object (SPOB), including and not limited to planets, stations, wormholes,...
Basically modifies system parameters without creating any real objects.