public unsafe static void ED_Print(edict_t ed) { if (ed.free) { Con_Printf("FREE\n"); return; } Con_Printf("\nEDICT {0}:\n", NUM_FOR_EDICT(ed)); for (int i = 1; i < progs.numfielddefs; i++) { ddef_t d = pr_fielddefs[i]; string name = GetString(d.s_name); if (name.Length > 2 && name[name.Length - 2] == '_') { continue; // skip _x, _y, _z vars } int type = d.type & ~q_shared.DEF_SAVEGLOBAL; int offset; if (ed.IsV(d.ofs, out offset)) { fixed(void *ptr = &ed.v) { int *v = (int *)ptr + offset; if (IsEmptyField(type, v)) { continue; } Con_Printf("{0,15} ", name); Con_Printf("{0}\n", PR_ValueString((etype_t)d.type, (void *)v)); } } else { fixed(void *ptr = ed.fields) { int *v = (int *)ptr + offset; if (IsEmptyField(type, v)) { continue; } Con_Printf("{0,15} ", name); Con_Printf("{0}\n", PR_ValueString((etype_t)d.type, (void *)v)); } } } }
public unsafe static void ED_Write(StreamWriter writer, edict_t ed) { writer.WriteLine("{"); if (ed.free) { writer.WriteLine("}"); return; } for (int i = 1; i < progs.numfielddefs; i++) { ddef_t d = pr_fielddefs[i]; string name = GetString(d.s_name); if (name != null && name.Length > 2 && name[name.Length - 2] == '_') // [strlen(name) - 2] == '_') { continue; // skip _x, _y, _z vars } int type = d.type & ~q_shared.DEF_SAVEGLOBAL; int offset1; if (ed.IsV(d.ofs, out offset1)) { fixed(void *ptr = &ed.v) { int *v = (int *)ptr + offset1; if (IsEmptyField(type, v)) { continue; } writer.WriteLine("\"{0}\" \"{1}\"", name, PR_UglyValueString((etype_t)d.type, (eval_t *)v)); } } else { fixed(void *ptr = ed.fields) { int *v = (int *)ptr + offset1; if (IsEmptyField(type, v)) { continue; } writer.WriteLine("\"{0}\" \"{1}\"", name, PR_UglyValueString((etype_t)d.type, (eval_t *)v)); } } } writer.WriteLine("}"); }
static unsafe bool ParsePair(edict_t ent, ddef_t key, string s) { int offset1; if (ent.IsV(key.ofs, out offset1)) { fixed(entvars_t *ptr = &ent.v) { return(ED_ParseEpair((int *)ptr + offset1, key, s)); } } else fixed(float *ptr = ent.fields) { return(ED_ParseEpair(ptr + offset1, key, s)); } }