void Project::AddNode(Node* node, bool select) { _node_count++; if (node->name == "") { node->name = "node_" + num_to_str(_node_count); } if (node->position == vector3di(0, 0, 0)) node->position = vector3di((_node_count - 1), 0, 0); node->remesh(); nodes.push_back(node); if (select) { snode = _node_count - 1; } }
void Project::AddNode(Node* node,bool select){ _node_count++; if (node->name == ""){ core::stringc nd = "Node"; nd += _node_count; node->name = nd; } node->setPosition(vector3di((_node_count - 1), 0, 0)); nodes->push_back(node); if (select) snode = _node_count - 1; }
void Socket :: Init(ComplexBlock* setPMapElement, int setSocketSide) { pMapElement = setPMapElement; vector3di position = pMapElement->GetBlockPos(); switch(setSocketSide) { case SOCKET_TOP: pos = vector3di(position.X, position.Y + 1, position.Z); break; case SOCKET_BOTTOM: pos = vector3di(position.X, position.Y - 1, position.Z); break; case SOCKET_LEFT: pos = vector3di(position.X - 1, position.Y, position.Z); break; case SOCKET_RIGHT: pos = vector3di(position.X + 1, position.Y, position.Z); break; case SOCKET_FRONT: pos = vector3di(position.X, position.Y, position.Z + 1); break; case SOCKET_BACK: pos = vector3di(position.X, position.Y, position.Z - 1); break; } }
void DataPipe::SaveChunk(const unsigned l) { FILE* sav; SDataPlacement plc; char fn[MAXPATHLEN]; vector3di pos; SChunkFileRec rec; bool fnd = false; //check if this chunk should be saved if ((!chstat[l].changed) || (settings.dryrun)) return; pos = vector3di(chstat[l].pos); #ifdef DPDEBUG dbg_print("[DP] Saving chunk %u at [%d %d %d]",l,pos.X,pos.Y,pos.Z); #endif //if there's a file containing our chunk, use its number if (!FindChunk(pos,&plc)) plc.filenum = chsavelast; //or just use the next number else fnd = true; //get the save file name and open it snprintf(fn,sizeof(fn),CHUNKSAVEFILE,root,plc.filenum); sav = fopen(fn,"wb"); if (!sav) { errout("[DP] SaveChunk(): unable to open the file '%s'\n",fn); return; } //if our file isn't new, seek to the position needed if (fnd) { fseek(sav,plc.offset,SEEK_SET); } else { fseek(sav,0,SEEK_END); plc.offset = (ulli)ftell(sav); //check the size of the resulting file (in advance) if ( (plc.offset + ((sizeof(SChunkFileRec) + sizeof(VChunk)) * 2)) >= settings.maxchfile) { //next time, we'll open the new file chsavelast++; } } //fill in placement info remaining plc.length = sizeof(VChunk); rec.pos = chstat[l].pos; rec.length = plc.length; //write to file fwrite(&rec,sizeof(rec),1,sav); fwrite(chunks[l],sizeof(VChunk),1,sav); //append data placement information if (!fnd) { plc.pos = pos; placetab.insert(std::make_pair(GetChunkLinearOffset(pos),plc)); } //and we're done fclose(sav); chstat[l].changed = false; //remove 'changed' flag }
bool Player::ProcessEvent(const SGUIEvent* e) { SWRayObjIntersect isc; //screen ray intersection bool rc = false; //rotation change flag mmask_t modb = BUTTON_CTRL | BUTTON_SHIFT | BUTTON_ALT; switch (e->t) { case GUIEV_MOUSE: if (e->m.bstate & (GUISCRL_UP | GUISCRL_DW)) { //Wheel (camera rotation) if ((e->m.bstate & modb) == rot_ver) rot.X += (e->m.bstate & GUISCRL_UP)? rspd:-rspd; else if ((e->m.bstate & modb) == rot_hor) rot.Z -= (e->m.bstate & GUISCRL_UP)? rspd:-rspd; else return false; rc = true; } else if (e->m.bstate == BUTTON1_PRESSED) { //Action button isc = *(world->ScreenRay(vector2di(e->m.x,e->m.y))); switch (state) { case PCS_EXPLORING: if (!isc.model) return true; if (isc.model == model) { world->LogMsg("SELFPOINT_LOG"); } else if (isc.actor) { world->GetMsgSys()->SetActorName(isc.actor->GetAttributes().name); if (isc.actor->GetAttributes().female) world->LogMsg("ACTRESS_LOG"); else world->LogMsg("ACTOR_LOG"); } break; case PCS_INTERACTING: //TODO break; case PCS_COMBAT: if (isc.pnt != vector3di(-1)) world->FireTo(isc.pnt,&isc); break; default: break; } } else return false; break; case GUIEV_KEYPRESS: switch (binder->DecodeKey(e->k)) { default: return false; case PAKEY_WALK_FORW: Move(LMOVE_FORW,1.2f); break; //FIXME: use speed value case PAKEY_WALK_BACK: Move(LMOVE_BACK,1.2f); break; case PAKEY_WALK_LEFT: Move(LMOVE_LEFT,1.2f); break; case PAKEY_WALK_RGHT: Move(LMOVE_RGHT,1.2f); break; case PAKEY_RUN_FORW: Move(LMOVE_FORW,2.2f); break; //FIXME: use speed value case PAKEY_RUN_BACK: Move(LMOVE_BACK,2.2f); break; case PAKEY_RUN_LEFT: Move(LMOVE_LEFT,2.2f); break; case PAKEY_RUN_RGHT: Move(LMOVE_RGHT,2.2f); break; case PAKEY_TURN_LEFT: rot.Z += rspd; rc = true; break; case PAKEY_TURN_RGHT: rot.Z -= rspd; rc = true; break; case PAKEY_TURN_UP: rot.X += rspd; rc = true; break; case PAKEY_TURN_DW: rot.X -= rspd; rc = true; break; case PAKEY_TOG_STATE: //TODO: check conditions, apply some changes etc switch (state) { case PCS_EXPLORING: state = PCS_INTERACTING; break; case PCS_INTERACTING: state = PCS_COMBAT; break; case PCS_COMBAT: state = PCS_EXPLORING; break; case PCS_VEHICLE: break; } } break; default: return false; } if (rc) SetRot(rot); //Update rotation return true; }