Example #1
0
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;
	}
}
Example #2
0
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;
}
Example #3
0
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;
	}
}
Example #4
0
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
}
Example #5
0
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;
}