Пример #1
0
bool Crack::move() 
{
	m_ptIndex++;

	// continue cracking
	if(m_bCurved)
	{
		/*
        m_x += ((float) m_ys * cos(m_angle * DEG_TO_RAD));
        m_y += ((float) m_ys * sin(m_angle * DEG_TO_RAD));

        m_x += ((float) m_xs * cos(m_angle * DEG_TO_RAD - HALF_PI));
        m_y += ((float) m_xs * sin(m_angle* DEG_TO_RAD - HALF_PI));

        m_angle += m_angleStep;
        m_degreesDrawn += abs(m_angleStep);
		*/
    }
    
	// draw black crack
	if(m_ptIndex != m_pts.size()) 
	{
		int ptX = m_pts[m_ptIndex].x();
		int ptY = m_pts[m_ptIndex].y();
		m_image.draw_point(ptX, ptY, 0, Artist::black.colour());

		regionColor();

		// safe to check
		if(m_bCurved && (m_degreesDrawn > 360) )
		{
            findStart();
			return false;
        }
		else if(m_cgrid[ptY*m_image.width() + ptX] == UNCRACKED)
		{
			// continue cracking
			m_cgrid[ptY*m_image.width() + ptX] = m_line.angle();
		} 
		else
		{
			// crack encountered (not self), stop cracking
			findStart();
			return false;
		}
	} 
	else 
	{
		// out of bounds, stop cracking
		findStart();
		return false;
	}

	return true;
}
ZLTextWordCursor ZLTextAreaController::findStart(const ZLTextWordCursor &end, SizeUnit unit, int size) {
	ZLTextWordCursor start = end;
	size -= paragraphHeight(start, true, unit);
	bool positionChanged = !start.isStartOfParagraph();
	start.moveToParagraphStart();
	while (size > 0) {
		if (positionChanged && start.paragraphCursor().isEndOfSection()) {
			break;
		}
		if (!start.previousParagraph()) {
			break;
		}
		if (!start.paragraphCursor().isEndOfSection()) {
			positionChanged = true;
		}
		size -= paragraphHeight(start, false, unit);
	}
	skip(start, unit, -size);

	if (unit != LINE_UNIT) {
		bool sameStart = start == end;
		if (!sameStart && start.isEndOfParagraph() && end.isStartOfParagraph()) {
			ZLTextWordCursor startCopy = start;
			startCopy.nextParagraph();
			sameStart = startCopy == end;
		}
		if (sameStart) {
			start = findStart(end, LINE_UNIT, 1);
		}
	}

	return start;
}
Пример #3
0
void Loader::calculatePath(){
    // gre po potki, start more bit na levi strani
    Path = {};
    std::vector<int> last = {-1, -1};
    start = findStart();
    int i = start,  j = 0;

    assert(i >= 0 && "Start of the map must be on the left side!");
    Path.push_back(RIGHT);
    while(i>=0 && j>=0 && i<mapSize && j<mapSize){
        if(last[0]!=i+1 && i<mapSize-1 && MAPOFTHEGAME[i+1][j] == '#'){
            Path.push_back(DOWN);
            last = {i, j};
            i++;
        }else if(last[0]!=i-1 && i>0 && MAPOFTHEGAME[i-1][j] == '#'){
            Path.push_back(UP);
            last = {i, j};
            i--;
        }else if(last[1]!=j+1 && j<mapSize-1 && MAPOFTHEGAME[i][j+1] == '#'){
            Path.push_back(RIGHT);
            last = {i, j};
            j++;
        }else if(last[1]!=j-1 && j>0 && MAPOFTHEGAME[i][j-1] == '#'){
            Path.push_back(LEFT);
            last = {i, j};
            j--;
        }else{ break; }
    }
}
 int search(int A[], int n, int target) {
     if(n == 0) return -1;
     int start = findStart(A, n);
     if(start == 0){
         return binarySearch(A, 0, n - 1, target);
     }
     else{
         int index = binarySearch(A, 0, start - 1, target);
         if(index != -1) return index;
         return binarySearch(A, start, n - 1, target);
     }
 }
bool ZLTextAreaController::preparePaintInfo() {
	if ((myPaintState == NOTHING_TO_PAINT) || (myPaintState == READY)) {
		return false;
	}

            myArea.myLineInfoCache.insert(myArea.myLineInfos.begin(), myArea.myLineInfos.end());



	switch (myPaintState) {
		default:
			break;
		case TO_SCROLL_FORWARD:
			if (!myArea.myEndCursor.paragraphCursor().isLast() ||
					!myArea.myEndCursor.isEndOfParagraph()) {
				ZLTextWordCursor startCursor;
				switch (myScrollingMode) {
					case NO_OVERLAPPING:
						break;
					case KEEP_LINES:
						startCursor = findLineFromEnd(myOverlappingValue);
						break;
					case SCROLL_LINES:
						startCursor = findLineFromStart(myOverlappingValue);
						if (startCursor.isEndOfParagraph()) {
							startCursor.nextParagraph();
						}
						break;
					case SCROLL_PERCENTAGE:
						startCursor = findPercentFromStart(myOverlappingValue);
						break;
				}

				if (!startCursor.isNull() && (startCursor == myArea.myStartCursor)) {

					startCursor = findLineFromStart(1);

				}

				if (!startCursor.isNull()) {

					ZLTextWordCursor endCursor = buildInfos(startCursor);


					if (!visiblePageIsEmpty() && ((myScrollingMode != KEEP_LINES) || (endCursor != myArea.myEndCursor))) {

                                                    myArea.myStartCursor = startCursor;
                                                    myArea.myEndCursor = endCursor;

						break;
					}

				}

                                    myArea.myStartCursor = myArea.myEndCursor;
                                    myArea.myEndCursor = buildInfos(myArea.myStartCursor);

			}
			break;
		case TO_SCROLL_BACKWARD:
			if (!myArea.myStartCursor.paragraphCursor().isFirst() || !myArea.myStartCursor.isStartOfParagraph()) {
				switch (myScrollingMode) {
					case NO_OVERLAPPING:
						myArea.myStartCursor = findStart(myArea.myStartCursor, PIXEL_UNIT, myArea.height());
						break;
					case KEEP_LINES:
					{
						ZLTextWordCursor endCursor = findLineFromStart(myOverlappingValue);
						if (!endCursor.isNull() && (endCursor == myArea.myEndCursor)) {
							endCursor = findLineFromEnd(1);
						}
						if (!endCursor.isNull()) {
							ZLTextWordCursor startCursor = findStart(endCursor, PIXEL_UNIT, myArea.height());
							myArea.myStartCursor =
								(startCursor != myArea.myStartCursor) ?
									startCursor : findStart(myArea.myStartCursor, PIXEL_UNIT, myArea.height());
						} else {
							myArea.myStartCursor = findStart(myArea.myStartCursor, PIXEL_UNIT, myArea.height());
						}
						break;
					}
					case SCROLL_LINES:
						myArea.myStartCursor = findStart(myArea.myStartCursor, LINE_UNIT, myOverlappingValue);
						break;
					case SCROLL_PERCENTAGE:
						myArea.myStartCursor =
							findStart(myArea.myStartCursor, PIXEL_UNIT, myArea.height() * myOverlappingValue / 100);
						break;
				}
				myArea.myEndCursor = buildInfos(myArea.myStartCursor);
				if (visiblePageIsEmpty()) {
					myArea.myStartCursor = findStart(myArea.myStartCursor, LINE_UNIT, 1);
					myArea.myEndCursor = buildInfos(myArea.myStartCursor);
				}
			}
			break;
		case START_IS_KNOWN:
			myArea.myEndCursor = buildInfos(myArea.myStartCursor);
			if (visiblePageIsEmpty()) {
				ZLTextWordCursor startCursor = findLineFromStart(1);
				if (!startCursor.isNull()) {
					myArea.myStartCursor = startCursor;
					if (myArea.myStartCursor.isEndOfParagraph()) {
						myArea.myStartCursor.nextParagraph();
					}
					myArea.myEndCursor = buildInfos(myArea.myStartCursor);
				}
			}
			break;
		case END_IS_KNOWN:
			myArea.myStartCursor = findStart(myArea.myEndCursor, PIXEL_UNIT, myArea.height());
			myArea.myEndCursor = buildInfos(myArea.myStartCursor);
			break;
	}

        myPaintState = READY;
        myArea.myLineInfoCache.clear();
	return true;
}
Пример #6
0
int main(void){
    
    InitDevice();
    setup_Interrupt();
    CANSetup();
    I2CSetup();
    
    heartBeatCounter = 0;
    FIRST_SEND = 1;
    I2C_FLAG = 0;
    
    CHIP_ALIVE_DIODE = 1;
    HEARTBEAT_DIODE = 0;
    ERROR_DIODE = 0;
    
    
    #ifdef TEST_RFID
    while(1){
        
        int start_condition = multiToSingle();
        
        if(start_condition == 1){
            singleToBit();
            int start = findStart();
            bitToCode(start);
        
        }
        Delay(10);
    }
    #endif
    
    
    
    while(1){
         
        
        if(ECAN_Receive()){
            FIRST_SEND = 0;
            HEARTBEAT_DIODE = 1;
            i2c_reg_map[REC_BATTERYSTATUS0] = MAP_REC_BATTERYSTATUS0;
            i2c_reg_map[REC_BATTERYSTATUS1] = MAP_REC_BATTERYSTATUS1;
            i2c_reg_map[REC_BATTERYSTATUS2] = 0;//not used
            i2c_reg_map[REC_BATTERYSTATUS3] = 0;//not used
            i2c_reg_map[REC_VELOCITY] = MAP_REC_VELOCITY;
            i2c_reg_map[REC_HEARTBEAT] = temp_D2;//always one (heartbeat)
            
            i2c_reg_map[6] = temp_D6;
            i2c_reg_map[7] = temp_D7;
            
            heartBeatCounter = 0;

        }
        
        if(heartBeatCounter > 35){
            //danger
            i2c_reg_map[2] = 0;
        }

        
        if(I2C_FLAG){
            I2C_FLAG = 0;
            zipCAN();
            ECAN_Transmit(0x32,0xC0, 0x02,
                    MAP_BITDATA,//zipped data
                    i2c_reg_map[SEND_ACCELERATOR],
                    i2c_reg_map[10],//dummy values
                    i2c_reg_map[11],//dummy values
                    i2c_reg_map[12],//dummy values
                    i2c_reg_map[13],//dummy values
                    i2c_reg_map[14],//dummy values
                    i2c_reg_map[15]);//dummy values
            

        }
        
      

      //checkRFID();

      Delay(ONE_MS * 5);
    }
    

    return 0;
}
Пример #7
0
void TextView::preparePaintInfo() {
  context().setLeftMargin(TextStyleCollection::instance().baseStyle().LeftMarginOption.value());
  context().setRightMargin(TextStyleCollection::instance().baseStyle().RightMarginOption.value());
  context().setTopMargin(TextStyleCollection::instance().baseStyle().TopMarginOption.value());
  context().setBottomMargin(TextStyleCollection::instance().baseStyle().BottomMarginOption.value());

  int newWidth = context().width();
  int newHeight = myStyle.textAreaHeight();
  if ((newWidth != myOldWidth) || (newHeight != myOldHeight)) {
    myOldWidth = newWidth;
    myOldHeight = newHeight;
    rebuildPaintInfo(false);
  }

  if ((myPaintState == NOTHING_TO_PAINT) || (myPaintState == READY)) {
    return;
  }

  myLineInfoCache.insert(myLineInfos.begin(), myLineInfos.end());

  switch (myPaintState) {
    default:
      break;
    case TO_SCROLL_FORWARD:
      if (!myEndCursor.paragraphCursor().isLast() || !myEndCursor.isEndOfParagraph()) {
        WordCursor startCursor;
        switch (myScrollingMode) {
          case NO_OVERLAPPING:
            break;
          case KEEP_LINES:
            startCursor = findLineFromEnd(myOverlappingValue);
            break;
          case SCROLL_LINES:
            startCursor = findLineFromStart(myOverlappingValue);
            break;
          case SCROLL_PERCENTAGE:
            startCursor = findPercentFromStart(myOverlappingValue);
            break;
        }
      
        if (!startCursor.isNull() && (startCursor == myStartCursor)) {
          startCursor = findLineFromStart(1);
        }

        if (!startCursor.isNull()) {
          WordCursor endCursor = buildInfos(startCursor);
          if (!pageIsEmpty() && ((myScrollingMode != KEEP_LINES) || (endCursor != myEndCursor))) {
            myStartCursor = startCursor;
            myEndCursor = endCursor;
            break;
          }
        }
        myStartCursor = myEndCursor;
        myEndCursor = buildInfos(myStartCursor);
      }
      break;
    case TO_SCROLL_BACKWARD:
      if (!myStartCursor.paragraphCursor().isFirst() || !myStartCursor.isStartOfParagraph()) {
        switch (myScrollingMode) {
          case NO_OVERLAPPING:
            myStartCursor = findStart(myStartCursor, PIXEL_UNIT, myStyle.textAreaHeight());
            break;
          case KEEP_LINES:
          {
            WordCursor endCursor = findLineFromStart(myOverlappingValue);
            if (!endCursor.isNull() && (endCursor == myEndCursor)) {
              endCursor = findLineFromEnd(1);
            }
            if (!endCursor.isNull()) {
              WordCursor startCursor = findStart(endCursor, PIXEL_UNIT, myStyle.textAreaHeight());
              myStartCursor =
                (startCursor != myStartCursor) ?
                  startCursor : findStart(myStartCursor, PIXEL_UNIT, myStyle.textAreaHeight());
            } else {
              myStartCursor = findStart(myStartCursor, PIXEL_UNIT, myStyle.textAreaHeight());
            }
            break;
          }
          case SCROLL_LINES:
            myStartCursor = findStart(myStartCursor, LINE_UNIT, myOverlappingValue);
            break;
          case SCROLL_PERCENTAGE:
            myStartCursor =
              findStart(myStartCursor, PIXEL_UNIT, myStyle.textAreaHeight() * myOverlappingValue / 100);
            break;
        }
        myEndCursor = buildInfos(myStartCursor);
      }
      break;
    case START_IS_KNOWN:
      myEndCursor = buildInfos(myStartCursor);
      break;
    case END_IS_KNOWN:
      myStartCursor = findStart(myEndCursor, PIXEL_UNIT, myStyle.textAreaHeight());
      myEndCursor = buildInfos(myStartCursor);
      break;
  }
  myPaintState = READY;
  myLineInfoCache.clear();
}
Пример #8
0
Crack::Crack(Image& image, std::vector<uint>& cgrid, const Colour& colour, float curvedPercentage, float degreesFromPerpendicular)
	: m_image(image), m_cgrid(cgrid), m_perlinPainter(image, colour),
		m_curvedPercentage(curvedPercentage), m_degreesFromPerpendicular(degreesFromPerpendicular)
{
	findStart();
}