Example #1
0
int main(void) {
  setup();
  all_off();
  onboardled(ON);
  around_the_world();

  // blink
  while (1) {
    if(PIND & (1<<5)) {
      onboardled(ON);
      ultraviolet(ON);
      headlamp(ON);

      handlebars(ON);
      forks(ON);
      backleft(ON);
      backright(ON);
      rack(OFF);
      _delay_ms(250);

      forks(OFF);
      rack(ON);
      _delay_ms(150);

      forks(ON);
      handlebars(OFF);
      backleft(ON);
      backright(OFF);
      rack(OFF);
      _delay_ms(250);

      handlebars(ON);
      backleft(OFF);
      backright(ON);
      _delay_ms(250);
    } else  {
      all_off();
      onboardled(ON);
      _delay_ms(350);
      onboardled(OFF);
      _delay_ms(350);
    }
  }
}
Example #2
0
void all_off() {
  onboardled(OFF);
  ultraviolet(OFF);
  headlamp(OFF);
  handlebars(OFF);
  forks(OFF);
  rack(OFF);
  backleft(OFF);
  backright(OFF);
}
void CStationaryObject::FollowTerrain(void)
{
   float offset = 0.0f;

   Plane p;

	// Clamp it to ground first
	CObjFrame frame = *m_OBB.Frame;
	CVector3f pos;

	frame.GetPosition(&pos);
	g_pCurrLevel->GetPlaneAtPoint(pos.x, pos.z, &p);
	pos.y += ClampToPlane(&pos, &p, m_OBB.y + offset);
	frame.SetPosition(&pos);

	// Figure out orientation
	float hw = m_OBB.x;
	float hh = m_OBB.y;
	float hl = m_OBB.z;

	CQuaternion q;

	CVector3f front(0.0f, -hh, hl);
	frame.RotateToWorldPoint(&front, &front);
	g_pCurrLevel->GetPlaneAtPoint(front.x, front.z, &p);
	front.y += ClampToPlane(&front, &p, 0.0f);
	
	CVector3f backleft(hw, -hh, -hl);
	frame.RotateToWorldPoint(&backleft, &backleft);
	g_pCurrLevel->GetPlaneAtPoint(backleft.x, backleft.z, &p);
	backleft.y += ClampToPlane(&backleft, &p, 0.0f);

	CVector3f backright(-hw, -hh, -hl);
	frame.RotateToWorldPoint(&backright, &backright);
	g_pCurrLevel->GetPlaneAtPoint(backright.x, backright.z, &p);
	backright.y += ClampToPlane(&backright, &p, 0.0f);

	GetOrientationFromPoints(&q, &front, &backleft, &backright);

	frame.SetOrientation(&q);
	SetFrame(&frame, 0);
}