Hello, these are 4 new functions, the goal is to expand the possibilities of map editing using cubescript.
editinvieweditinview variable, if 0 the player can edit even if the selection is off the screen, if 1 edit is blocked if the selection is off screen, default is 1.
getselposgetselpos command is based on the getcampos command, and returns the position of the current edit selection.
setselpossetselpos command sets the position of the edit selection based on 3 int values (x, y, z), if a current selection does not exist, it will be created.
moveselmovesel command moves the edit selection toward a direction.
First argument is the number of cubes to move (-1, 1).
Second argument is the direction (0 = x, 1 = y, 2 = z).
Example:
/movesel 1 2 will move the selection 1 cube up.
VARP(editinview, 0, 1, 1);
bool noedit(bool view, bool msg)
{
if(!editmode) { if(msg) conoutf(CON_ERROR, "operation only allowed in edit mode"); return true; }
if(view || haveselent()) return false;
float r = 1.0f;
vec o = sel.o.tovec(), s = sel.s.tovec();
s.mul(float(sel.grid) / 2.0f);
o.add(s);
r = float(max(s.x, max(s.y, s.z)));
bool viewable = (isvisiblesphere(r, o) != VFC_NOT_VISIBLE);
//if(!viewable && msg) conoutf(CON_ERROR, "selection not in view");
//return !viewable;
if(!viewable && editinview && msg) {conoutf(CON_ERROR, "selection not in view");}
if (editinview){return !viewable;} else {return false;}
}
ICOMMAND(getselpos, "", (),
{
defformatstring(pos)("%s %s %s", floatstr(sel.o.x), floatstr(sel.o.y), floatstr(sel.o.z));
result(pos);
});
void setselpos(int* posx, int* posy, int* posz)
{
if(noedit(moving!=0)) return;
if(!havesel){havesel = true;};
sel.o.x = *posx - *posx % gridsize;
sel.o.y = *posy - *posy % gridsize;
sel.o.z = *posz - *posz % gridsize;
}
COMMAND(setselpos, "iii");
void movesel(int *dir, int *pface)
{
if(noedit(moving!=0)) return;
if((*pface > 2) || (*pface < 0)) return;
int s = *dir;
sel.o[*pface] += s*sel.grid;
}
COMMAND(movesel, "ii");
Where to install itThese commands goes somewhere after line 90 in the original file (
src/engine/octaedit.cpp, before
VARF(gridpower, 0, 3, 12... ).
Be careful to not multiply the
bool noedit function, it already exists (line 149), you can replace it entirety.
Or you can download the octaedit.cpp file below.
feel free to leave your feedback