void GwfStreamWriter::writePair(SCgObject *obj) { QString type = mTypeAlias2GWFType[obj->typeAlias()].mid(0,3); if(type=="arc") writeStartElement(type); else writeStartElement("pair"); writeObjectAttributes(obj); SCgPair* pair = static_cast<SCgPair*>(obj); SCgObject* b = pair->getBeginObject(); SCgObject* e = pair->getEndObject(); writeAttribute("id_b", QString::number(b->id())); writeAttribute("id_e", QString::number(e->id())); writePosition(b,"b_x","b_y"); writePosition(e,"e_x","e_y"); writeAttribute("dotBBalance", QString::number(pair->getBeginDot())); writeAttribute("dotEBalance", QString::number(pair->getEndDot())); QVector<QPointF> points = pair->scenePoints(); points.pop_back(); points.pop_front(); writePoints(points); writeEndElement(); }
void BinaryFormatter::writeAttr(std::ostream& into, const SumoXMLAttr attr, const PositionVector& val) { BinaryFormatter::writeAttrHeader(into, attr, BF_LIST); FileHelpers::writeInt(into, static_cast<int>(val.size())); for (PositionVector::const_iterator pos = val.begin(); pos != val.end(); ++pos) { writePosition(into, *pos); } }
void GwfStreamWriter::writeNode( SCgObject *obj) { writeStartElement("node"); writeObjectAttributes(obj); writePosition(obj, "x", "y"); SCgNode *node = static_cast<SCgNode*>(obj); writeAttribute("haveBus", node->bus() ? "true" : "false"); writeContent(node); writeEndElement();//node }
string& VTDRPositionRecord::Write(string& buf) { PositionRecord rec; ToBCDTime(tStart, rec.vStart); for (int i = 0; i < 60; i++) { writePosition(rec.record[i].pos, Longititude[i], Latitude[i], Altitude[i]); rec.record[i].speed = (unsigned char) (Speed[i] & 0x0FF); } buf.append((const char*) &rec, sizeof(rec)); return buf; }
virtual int writePosition(double num){ writePosition((int) num); return 0; }
void BinaryFormatter::writeAttr(std::ostream& into, const SumoXMLAttr attr, const Position& val) { BinaryFormatter::writeAttrHeader(into, attr); writePosition(into, val); }
void BinaryFormatter::writeAttr(std::ostream& into, const SumoXMLAttr attr, const Position& val) { FileHelpers::writeByte(into, BF_XML_ATTRIBUTE); FileHelpers::writeByte(into, static_cast<unsigned char>(attr)); writePosition(into, val); }
list* doMovement(int mode, int dt) { int i; float fs; Data *data; list *l = NULL; GameEvent *e; for(i = 0; i < game->players; i++) { data = game->player[i].data; if(data->speed > 0) { /* still alive */ #define FREQ 1200 #define FACTOR 0.09 fs = 1.0 - FACTOR + FACTOR * cos(i * M_PI / 4.0 + (float)(game2->time.current % FREQ) * 2.0 * M_PI / (float)FREQ); #undef FREQ #undef FACTOR data->t += dt / 100.0 * data->speed * fs; while(data->t >= 1) { moveStep(data); data->t--; if(getCol(data->iposx, data->iposy) && mode) { e = (GameEvent*) malloc(sizeof(GameEvent)); e->type = EVENT_CRASH; e->player = i; e->x = data->iposx; e->y = data->iposy; e->timestamp = game2->time.current; addList(&l, e); break; } else { writePosition(i); } } data->posx = data->iposx + data->t * dirsX[data->dir]; data->posy = data->iposy + data->t * dirsY[data->dir]; } else { /* already crashed */ if(game2->rules.eraseCrashed == 1 && data->trail_height > 0) data->trail_height -= (float)(dt * TRAIL_HEIGHT) / 1000; if(data->exp_radius < EXP_RADIUS_MAX) data->exp_radius += (float)dt * EXP_RADIUS_DELTA; else if (data->speed == SPEED_CRASHED) { int winner = -1; data->speed = SPEED_GONE; game->running--; if(game->running <= 1) { /* all dead, find survivor */ int i, maxSpeed = SPEED_GONE; /* create winner event */ for(i = 0; i < game->players; i++) { if(game->player[i].data->speed >= maxSpeed) { winner = i; maxSpeed = game->player[i].data->speed; } } if(mode) { e = (GameEvent*) malloc(sizeof(GameEvent)); e->type = EVENT_STOP; e->player = winner; e->timestamp = game2->time.current; e->x = 0; e->y = 0; addList(&l, e); /* a stop event is the last event that happens */ return l; } } } } } return l; }