summaryrefslogtreecommitdiff
path: root/src/engine/world.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/engine/world.cpp')
-rw-r--r--src/engine/world.cpp63
1 files changed, 4 insertions, 59 deletions
diff --git a/src/engine/world.cpp b/src/engine/world.cpp
index f58886f..cbe3fad 100644
--- a/src/engine/world.cpp
+++ b/src/engine/world.cpp
@@ -226,7 +226,6 @@ extern selinfo sel;
extern bool havesel;
int entlooplevel = 0;
int efocus = -1, enthover = -1, entorient = -1, oldhover = -1;
-bool undonext = true;
VARF(entediting, 0, 0, 1, { if(!entediting) { entcancel(); efocus = enthover = -1; } });
@@ -255,36 +254,13 @@ void entcancel() {
}
void entadd(int id) {
- undonext = true;
entgroup.add(id);
}
-undoblock *newundoent() {
- int numents = entgroup.length();
- if(numents <= 0) return NULL;
- undoblock *u = (undoblock *)new uchar[sizeof(undoblock) + numents*sizeof(undoent)];
- u->numents = numents;
- undoent *e = (undoent *)(u + 1);
- loopv(entgroup) {
- e->i = entgroup[i];
- e->e = *entities::getents()[entgroup[i]];
- e++;
- }
- return u;
-}
-
-void makeundoent() {
- if(!undonext) return;
- undonext = false;
- oldhover = enthover;
- undoblock *u = newundoent();
- if(u) addundo(u);
-}
-
// convenience macros implicitly define:
// e entity, currently edited ent
// n int, index to currently edited ent
-#define addimplicit(f) { if(entgroup.empty() && enthover>=0) { entadd(enthover); undonext = (enthover != oldhover); f; entgroup.drop(); } else f; }
+#define addimplicit(f) { if(entgroup.empty() && enthover>=0) { entadd(enthover); f; entgroup.drop(); } else f; }
#define entfocusv(i, f, v){ int n = efocus = (i); if(n>=0) { extentity &e = *v[n]; f; (void) e; } }
#define entfocus(i, f) entfocusv(i, f, entities::getents())
#define enteditv(i, f, v) { entfocusv(i, { int a = 0; (void) a; }, v); }
@@ -293,8 +269,7 @@ void makeundoent() {
#define setgroup(exp) { entcancel(); addgroup(exp); }
#define groupeditloop(f){ vector<extentity *> &ents = entities::getents(); entlooplevel++; int _ = efocus; loopv(entgroup) enteditv(entgroup[i], f, ents); efocus = _; entlooplevel--; }
#define groupeditpure(f){ if(entlooplevel>0) { entedit(efocus, f); } else groupeditloop(f); }
-#define groupeditundo(f){ makeundoent(); groupeditpure(f); }
-#define groupedit(f) { addimplicit(groupeditundo(f)); }
+#define groupedit(f) { addimplicit(groupeditpure(f)); }
vec getselpos() {
vector<extentity *> &ents = entities::getents();
@@ -303,36 +278,11 @@ vec getselpos() {
return vec(sel.o);
}
-undoblock *copyundoents(undoblock *u) {
- entcancel();
- undoent *e = u->ents();
- loopi(u->numents)
- entadd(e[i].i);
- undoblock *c = newundoent();
- loopi(u->numents) if(e[i].e.type==ET_EMPTY)
- entgroup.removeobj(e[i].i);
- return c;
-}
-
-void pasteundoent(int idx, const entity &ue) {
- if(idx < 0 || idx >= MAXENTS) return;
- vector<extentity *> &ents = entities::getents();
- while(ents.length() < idx) ents.add(entities::newentity())->type = ET_EMPTY;
- int efocus = -1;
- entedit(idx, (entity &)e = ue);
-}
-
-void pasteundoents(undoblock *u) {
- undoent *ue = u->ents();
- loopi(u->numents)
- entedit(ue[i].i, (entity &)e = ue[i].e);
-}
-
void entflip() {
if(noentedit()) return;
int d = dimension(sel.orient);
float mid = sel.s[d]*sel.grid/2+sel.o[d];
- groupeditundo(e.o[d] -= (e.o[d]-mid)*2);
+ groupeditpure(e.o[d] -= (e.o[d]-mid)*2);
}
void entrotate(int *cw) {
@@ -341,7 +291,7 @@ void entrotate(int *cw) {
int dd = (*cw<0) == dimcoord(sel.orient) ? R[d] : C[d];
float mid = sel.s[dd]*sel.grid/2+sel.o[dd];
vec s(sel.o.v);
- groupeditundo(
+ groupeditpure(
e.o[dd] -= (e.o[dd]-mid)*2;
e.o.sub(s);
swap(e.o[R[d]], e.o[C[d]]);
@@ -401,7 +351,6 @@ void entdrag(const vec &ray) {
r = (entselsnap ? g[R[d]] : v[R[d]]) - e.o[R[d]];
c = (entselsnap ? g[C[d]] : v[C[d]]) - e.o[C[d]];
);
- if(entmoving==1) makeundoent();
groupeditpure(e.o[R[d]] += r; e.o[C[d]] += c);
entmoving = 2;
}
@@ -550,7 +499,6 @@ void renderentselection(const vec &o, bool entmoving) {
}
bool enttoggle(int id) {
- undonext = true;
int i = entgroup.find(id);
if(i < 0)
entadd(id);
@@ -738,7 +686,6 @@ void newentity(int type, int a1, int a2, int a3, int a4, int a5) {
dropentity(*t);
t->type = ET_EMPTY;
enttoggle(idx);
- makeundoent();
entedit(idx, e.type = type);
}
@@ -777,7 +724,6 @@ void entpaste() {
}
keepents = 0;
int j = 0;
- groupeditundo(e.type = entcopybuf[j++].type;);
}
COMMAND(newent, "siiiii");
@@ -941,7 +887,6 @@ void resetmap() {
cleardecals();
clearsleep();
cancelsel();
- pruneundos();
clearmapcrc();
entities::clearents();
outsideents.setsize(0);