project_files/frontlib/model/weapon.c
changeset 7316 f7b49b2c5d84
parent 7314 6171f0bad318
child 7320 e704706008d4
equal deleted inserted replaced
7314:6171f0bad318 7316:f7b49b2c5d84
    57 	field[WEAPONS_COUNT] = 0;
    57 	field[WEAPONS_COUNT] = 0;
    58 }
    58 }
    59 
    59 
    60 flib_weaponset *flib_weaponset_create(const char *name) {
    60 flib_weaponset *flib_weaponset_create(const char *name) {
    61 	flib_weaponset *result = NULL;
    61 	flib_weaponset *result = NULL;
    62 	if(!name) {
    62 	if(!log_badargs_if(name==NULL)) {
    63 		flib_log_e("null parameter in flib_weaponset_create_str");
       
    64 	} else {
       
    65 		flib_weaponset *newSet = flib_weaponset_retain(flib_calloc(1, sizeof(flib_weaponset)));
    63 		flib_weaponset *newSet = flib_weaponset_retain(flib_calloc(1, sizeof(flib_weaponset)));
    66 		if(newSet) {
    64 		if(newSet) {
    67 			newSet->name = flib_strdupnull(name);
    65 			newSet->name = flib_strdupnull(name);
    68 			if(newSet->name) {
    66 			if(newSet->name) {
    69 				setField(newSet->loadout, "", 0, false);
    67 				setField(newSet->loadout, "", 0, false);
   117 	}
   115 	}
   118 }
   116 }
   119 
   117 
   120 flib_weaponset *flib_weaponset_from_ammostring(const char *name, const char *ammostring) {
   118 flib_weaponset *flib_weaponset_from_ammostring(const char *name, const char *ammostring) {
   121 	flib_weaponset *result = NULL;
   119 	flib_weaponset *result = NULL;
   122 	if(!name || !ammostring) {
   120 	if(!log_badargs_if2(name==NULL, ammostring==NULL)) {
   123 		flib_log_e("null parameter in flib_weaponset_from_ammostring");
       
   124 	} else {
       
   125 		result = flib_weaponset_create(name);
   121 		result = flib_weaponset_create(name);
   126 		if(result) {
   122 		if(result) {
   127 			int fieldlen = strlen(ammostring)/4;
   123 			int fieldlen = strlen(ammostring)/4;
   128 			setField(result->loadout, ammostring, fieldlen, false);
   124 			setField(result->loadout, ammostring, fieldlen, false);
   129 			setField(result->crateprob, ammostring + fieldlen, fieldlen, true);
   125 			setField(result->crateprob, ammostring + fieldlen, fieldlen, true);
   162 	return error;
   158 	return error;
   163 }
   159 }
   164 
   160 
   165 flib_weaponsetlist *flib_weaponsetlist_from_ini(const char *filename) {
   161 flib_weaponsetlist *flib_weaponsetlist_from_ini(const char *filename) {
   166 	flib_weaponsetlist *result = NULL;
   162 	flib_weaponsetlist *result = NULL;
   167 	if(!filename) {
   163 	if(!log_badargs_if(filename==NULL)) {
   168 		flib_log_e("null parameter in flib_weaponsetlist_from_ini");
       
   169 	} else {
       
   170 		flib_ini *ini = flib_ini_load(filename);
   164 		flib_ini *ini = flib_ini_load(filename);
   171 		if(!ini) {
   165 		if(!ini) {
   172 			flib_log_e("Missing file %s.", filename);
   166 			flib_log_e("Missing file %s.", filename);
   173 		} else if(flib_ini_enter_section(ini, "General")) {
   167 		} else if(flib_ini_enter_section(ini, "General")) {
   174 			flib_log_e("Missing section \"General\" in file %s.", filename);
   168 			flib_log_e("Missing section \"General\" in file %s.", filename);
   188 
   182 
   189 static bool needsEscape(char c) {
   183 static bool needsEscape(char c) {
   190 	return !((c>='0' && c<='9') || (c>='a' && c <='z'));
   184 	return !((c>='0' && c<='9') || (c>='a' && c <='z'));
   191 }
   185 }
   192 
   186 
   193 
       
   194 static int writeWeaponsetToIni(flib_ini *ini, flib_weaponset *set) {
   187 static int writeWeaponsetToIni(flib_ini *ini, flib_weaponset *set) {
   195 	int result = -1;
   188 	int result = -1;
   196 	char weaponstring[WEAPONS_COUNT*4+1];
   189 	char weaponstring[WEAPONS_COUNT*4+1];
   197 	strcpy(weaponstring, set->loadout);
   190 	strcpy(weaponstring, set->loadout);
   198 	strcat(weaponstring, set->crateprob);
   191 	strcat(weaponstring, set->crateprob);
   207 	return result;
   200 	return result;
   208 }
   201 }
   209 
   202 
   210 int flib_weaponsetlist_to_ini(const char *filename, const flib_weaponsetlist *list) {
   203 int flib_weaponsetlist_to_ini(const char *filename, const flib_weaponsetlist *list) {
   211 	int result = -1;
   204 	int result = -1;
   212 	if(!filename || !list) {
   205 	if(!log_badargs_if2(filename==NULL, list==NULL)) {
   213 		flib_log_e("null parameter in flib_weaponsetlist_to_ini");
       
   214 	} else {
       
   215 		flib_ini *ini = flib_ini_create(NULL);
   206 		flib_ini *ini = flib_ini_create(NULL);
   216 		if(ini && !flib_ini_create_section(ini, "General")) {
   207 		if(ini && !flib_ini_create_section(ini, "General")) {
   217 			bool error = false;
   208 			bool error = false;
   218 			for(int i=0; i<list->weaponsetCount && !error; i++) {
   209 			for(int i=0; i<list->weaponsetCount && !error; i++) {
   219 				error |= writeWeaponsetToIni(ini, list->weaponsets[i]);
   210 				error |= writeWeaponsetToIni(ini, list->weaponsets[i]);
   234 
   225 
   235 GENERATE_STATIC_LIST_INSERT(insertWeaponset, flib_weaponset*)
   226 GENERATE_STATIC_LIST_INSERT(insertWeaponset, flib_weaponset*)
   236 GENERATE_STATIC_LIST_DELETE(deleteWeaponset, flib_weaponset*)
   227 GENERATE_STATIC_LIST_DELETE(deleteWeaponset, flib_weaponset*)
   237 
   228 
   238 int flib_weaponsetlist_insert(flib_weaponsetlist *list, flib_weaponset *set, int pos) {
   229 int flib_weaponsetlist_insert(flib_weaponsetlist *list, flib_weaponset *set, int pos) {
   239 	if(!list) {
   230 	if(!log_badargs_if2(list==NULL, set==NULL)
   240 		flib_log_e("Invalid parameter in flib_weaponsetlist_insert");
   231 			&& !insertWeaponset(&list->weaponsets, &list->weaponsetCount, set, pos)) {
   241 	} else if(!insertWeaponset(&list->weaponsets, &list->weaponsetCount, set, pos)) {
       
   242 		flib_weaponset_retain(set);
   232 		flib_weaponset_retain(set);
   243 		return 0;
   233 		return 0;
   244 	}
   234 	}
   245 	return -1;
   235 	return -1;
   246 }
   236 }
   247 
   237 
   248 int flib_weaponsetlist_delete(flib_weaponsetlist *list, int pos) {
   238 int flib_weaponsetlist_delete(flib_weaponsetlist *list, int pos) {
   249 	if(!list) {
   239 	if(!log_badargs_if(list==NULL)) {
   250 		flib_log_e("Invalid parameter in flib_weaponsetlist_delete");
       
   251 	} else {
       
   252 		flib_weaponset *elem = list->weaponsets[pos];
   240 		flib_weaponset *elem = list->weaponsets[pos];
   253 		if(!deleteWeaponset(&list->weaponsets, &list->weaponsetCount, pos)) {
   241 		if(!deleteWeaponset(&list->weaponsets, &list->weaponsetCount, pos)) {
   254 			flib_weaponset_release(elem);
   242 			flib_weaponset_release(elem);
   255 			return 0;
   243 			return 0;
   256 		}
   244 		}