From 372028ddf44e2f6702a9818c649492b70f4f391e Mon Sep 17 00:00:00 2001 From: ac_stef Date: Sun, 1 Mar 2009 21:30:00 +0000 Subject: [PATCH] edit mode: select overlapping map entities; select entities by type; move entities; cycle through playerstart entities git-svn-id: svn://svn.code.sf.net/p/actiongame/code/trunk/ac@4231 e016b1c5-ed68-44aa-a2f7-31cac88cffde --- config/scripts.cfg | 1 + source/src/world.cpp | 71 +++++++++++++++++++++++++++++++++++++------- 2 files changed, 62 insertions(+), 10 deletions(-) diff --git a/config/scripts.cfg b/config/scripts.cfg index 595ab4ba..f309259e 100644 --- a/config/scripts.cfg +++ b/config/scripts.cfg @@ -22,6 +22,7 @@ complete demo "demos" dmo alias entcomplete [listcomplete $arg1 "light playerstart pistol ammobox grenades health armour akimbo mapmodel trigger ladder ctf-flag sound clip"] entcomplete newent entcomplete clearents +entcomplete closestenttype // Game mode descriptions... gamemodedesc 0 [Team Deathmatch: Find the enemy team and destroy them!] diff --git a/source/src/world.cpp b/source/src/world.cpp index 0cc8c791..c1db66f3 100644 --- a/source/src/world.cpp +++ b/source/src/world.cpp @@ -117,24 +117,51 @@ void remipmore(const block &b, int level) remip(bb, level); } +static int clentsel = 0, clenttype = NOTUSED; + +void nextclosestent(void) { clentsel++; } + +void closestenttype(char *what) +{ + clenttype = what[0] ? findtype(what) : NOTUSED; +} + +COMMAND(nextclosestent, ARG_NONE); +COMMAND(closestenttype, ARG_1STR); + int closestent() // used for delent and edit mode ent display { if(noteditmode()) return -1; - int best = -1; + int best = -1, bcnt = 0; float bdist = 99999; - loopv(ents) + loopj(3) { - entity &e = ents[i]; - if(e.type==NOTUSED) continue; - vec v(e.x, e.y, e.z); - float dist = v.dist(camera1->o); - if(disto); + if(j) + { + if(ents[best].x == e.x && ents[best].y == e.y && ents[best].z == e.z) + { + if(j == 2 && bcnt == clentsel) return i; + bcnt++; + } + } + else if(dist= 0) + { + entity &e = ents[cycle]; + player1->o.x = e.x; + player1->o.y = e.y; + player1->o.z = e.z; + player1->yaw = e.attr1; + player1->pitch = 0; + player1->roll = 0; + entinmap(player1); + } +} + +COMMAND(nextplayerstart, ARG_1STR); + sqr *wmip[LARGEST_FACTOR*2]; void setupworld(int factor)