示例#1
0
bool ckCdt::intersect(ckVec* pos, const Ray& ray, const Tri& tri)
{
    if (!checkTouch(ray.m_aabb, tri.m_aabb))
    {
        return false;
    }

    ckVec ray_dir = ray.m_to - ray.m_from;

    r32 dist;

    if (intersectTri(&dist, ray.m_from, ray_dir, tri) && dist <= 1.0f)
    {
        if (pos)
        {
            *pos = ray.m_from + ray_dir * dist;
        }

        return true;
    }
    else
    {
        return false;
    }
}
示例#2
0
bool ckCdt::intersect(ckVec* pos, const Ray& ray, const Box& box)
{
    if (!checkTouch(ray.m_aabb, box.m_aabb))
    {
        return false;
    }

    ckVec rel_pos = ray.m_from.toLocalOf(box.m_world);
    ckVec dir = ray.m_to - ray.m_from;
    ckVec rel_dir = dir.toLocalOf_noTrans(box.m_world);

    r32 min_dist, max_dist;

    if (intersectLocalBox(&min_dist, &max_dist, rel_pos, rel_dir, box.m_half_size) && min_dist <= 1.0f)
    {
        if (pos)
        {
            *pos = ray.m_from + dir * min_dist;
        }

        return true;
    }
    else
    {
        return false;
    }
}
示例#3
0
bool Container::ccTouchBegan(CCTouch *pTouch, CCEvent *pEvent){
	if(!isVisible()) return false;
	if(checkTouch(pTouch)){
		onSelect();activate();	
				
	}
	return true;
}
示例#4
0
void Container::update(float fDelta){
	if(mLasto && m_iState != C_STATE_SELECT){
		if(checkTouch(mLasto)){
			onHover();
		}else{
			onNormal();
			CC_SAFE_RELEASE_NULL(mLasto);
		}
	}
}
示例#5
0
bool ckCdt::intersect(ckVec* pos, const Ray& ray, const Sph& sph)
{
    if (!checkTouch(ray.m_aabb, sph.m_aabb))
    {
        return false;
    }

    ckVec m = sph.getPos() - ray.m_from;
    r32 c = m.sqLength() - sph.getRadius() * sph.getRadius();

    if (c <= 0.0f)
    {
        if (pos)
        {
            *pos = ray.m_from;
        }

        return true;
    }

    ckVec d = ray.m_to - ray.m_from;
    r32 b = m.dot(d);

    if (b < 0.0f)
    {
        return false;
    }

    r32 sq_d = d.sqLength();

    c /= sq_d;
    b /= sq_d;

    r32 discr = b * b - c;

    if (discr < 0.0f)
    {
        return false;
    }

    r32 dist = b - ckMath::sqrt(discr);

    if (dist > 1.0f)
    {
        return false;
    }

    if (pos)
    {
        *pos = ray.m_from + d * dist;
    }

    return true;
}
//Goes forward and checks color of the object and the distance to the ball
//Stores these values
void checkBall(int & color, int & distance){
	nMotorEncoder[motorA] = 0;
	motor[motorA] = 30;
	motor[motorC] = 30;
	while (!checkTouch()){}
	distance = nMotorEncoder[motorA];
	motor[motorA] = 0;
	motor[motorC] = 0;
	wait10Msec(100);
	color = checkColour();
}
/*----------------------------------------------------------------------------*/
void TouchMIDI_appli(void)
{
	if ( mbrWriteConfigErr ){
		if ( event100msec ){ setMidiBuffer( 0xb0, 0x10, mbrWriteConfigErr & 0x7f );}
	}
	if ( mbrSelfCheckErr ){
		if ( event100msec ){ setMidiBuffer( 0xb0, 0x11, mbrSelfCheckErr & 0x7f );}
	}

	if ( mbrReadTouchErr ){
		if ( event100msec ){ setMidiBuffer( 0xb0, 0x12, mbrReadTouchErr & 0x7f );}
	}
	else {
		checkTouch();

		//	Heartbeat
		if ( IN1 ){ OUT1 = (counter10msec & 0x0020)? 0:1; }
		if ( IN2 ){ OUT2 = (counter10msec & 0x0020)? 0:1; }
		if ( IN3 ){ OUT3 = (counter10msec & 0x0020)? 0:1; }
		if ( IN4 ){ OUT4 = (counter10msec & 0x0020)? 0:1; }
	}
}