コード例 #1
0
ファイル: pathfinder.cpp プロジェクト: astrellon/GPP
	void Pathfinder::getNeighbors(const Vector2i &position, const GameObject *forObj)
	{
		int posX = position.x;
		int posY = position.y;
		bool left =		checkNeighbor(posX - 1,	posY, forObj);
		bool top =		checkNeighbor(posX,		posY - 1, forObj);
		bool right =	checkNeighbor(posX + 1,	posY, forObj);
		bool bottom =	checkNeighbor(posX,		posY + 1, forObj);

		if (left && top)
		{
			checkNeighbor(posX - 1, posY - 1, forObj);
		}
		if (top && right)
		{
			checkNeighbor(posX + 1, posY - 1, forObj);
		}
		if (bottom && left)
		{
			checkNeighbor(posX - 1, posY + 1, forObj);
		}
		if (bottom && right)
		{
			checkNeighbor(posX + 1, posY + 1, forObj);
		}
	}
コード例 #2
0
ファイル: topo.c プロジェクト: ghostandthemachine/mantis-os
boolean topo_recv(comBuf *pkt, uint8_t **footer, uint8_t port)
{
	topo_pkt* topo = (topo_pkt*)pkt->data;
	switch (topo->type)
	{
		case TOPO_PING: {
			if (topo->seqNo == seqNo) {
				checkNeighbor(topo->route);
			} else {
				reinit();
				seqNo = topo->seqNo;
				checkNeighbor(topo->route);
				topo->route = mos_node_id_get();
				net_send(pkt, 77, 0);
			}
		} break;
		case TOPO_REPLY: {
			checkNeighbor(topo->route);
			printf("%d: ", topo->origin);
			uint8_t i;
			for (i = 0; i<(pkt->size-6)/2; i++) {
				printf(" %d", topo->neighbors[i]);
			}
			printf("\n");
			
			if (topo->origin == mos_node_id_get())
				break;
			for (i = 0; i<10; i++) {
				if (topo->origin == reply_cache[i])
					break;
			}
			if (i == 10) {
				reply_cache[reply_ndx++] = topo->origin;
				reply_ndx %= 10;
				topo->route = mos_node_id_get();
				net_send(pkt, 77, 0);
			}
		} break;
	}
	return 0;
}
コード例 #3
0
ファイル: tri.C プロジェクト: davidheryanto/sc14
void element::refine()
{
  int longEdge, test; 
  
  longEdge = findLongestEdge();

  if (requestResponse) {
    // this element sent a special request and has received a response
    // from its neighbor; the neighbor performed half the refinement
    splitHelp(longEdge); // now finish the other half
    return;
  }
  if (specialRequest) { // my neighbor sent me a special request to refine
    if (getArea() < targetArea) {  // no refinement necessary; accept request
      splitResponse(longEdge);  // do my half of the refine
      return;
    }
    else { // refinement necessary
      if ((myRef.idx > specialRequester.idx) || 
	  ((myRef.idx == specialRequester.idx) && (myRef.cid > specialRequester.cid))) {
	// I have precedence; accept request
	splitResponse(longEdge);
	return;
      }
      else // requester has precedence; will send it special request shortly
	specialRequest = pendingRequest = 0;
    }
  }
  if (pendingRequest) // still awaiting a response; skip me
    return;

  // test longEdge relationship
  test = checkNeighbor(longEdge);
  if (test == -1) // long edge is on border
    splitBorder(longEdge);
  else if (test == 1) { // long edge is longest of both elements
    if (!edges[longEdge].locked(C))
      splitNeighbors(longEdge);
  }
  else // long edge is not neighbor's long edge
    refineNeighbor(longEdge);
}