void StringTest::testConstructor() { cxxtools::String s1; CXXTOOLS_UNIT_ASSERT(s1 == cxxtools::String(L"")); cxxtools::String s2(L"abcde"); CXXTOOLS_UNIT_ASSERT(s2 == L"abcde"); cxxtools::String s3(L"abcde", 3); CXXTOOLS_UNIT_ASSERT(s3 == L"abc"); cxxtools::String s4(3, 'x'); CXXTOOLS_UNIT_ASSERT(s4 == L"xxx"); cxxtools::String s5(s2); CXXTOOLS_UNIT_ASSERT(s5 == L"abcde"); cxxtools::String s6(s2, 1); CXXTOOLS_UNIT_ASSERT(s6 == L"bcde"); cxxtools::String s7(s2, 1, 3); CXXTOOLS_UNIT_ASSERT(s7 == L"bcd"); cxxtools::String s10; CXXTOOLS_UNIT_ASSERT(s10 == cxxtools::String(L"")); const cxxtools::Char c11[] = { 'a', 'b', 'c', 'd', 'e', '\0' }; cxxtools::String s11(c11); CXXTOOLS_UNIT_ASSERT(s11 == c11); const cxxtools::Char c12[] = { 'a', 'b', 'c', '\0' }; cxxtools::String s12(L"abcde", 3); CXXTOOLS_UNIT_ASSERT(s12 == c12); const cxxtools::Char c13[] = { 'x', 'x', 'x', '\0' }; cxxtools::String s13(3, 'x'); CXXTOOLS_UNIT_ASSERT(s13 == c13); const cxxtools::Char c14[] = { 'a', 'b', 'c', 'd', 'e', '\0' }; cxxtools::String s14(s11); CXXTOOLS_UNIT_ASSERT(s14 == c14); const cxxtools::Char c15[] = { 'b', 'c', 'd', 'e', '\0' }; cxxtools::String s15(s11, 1); CXXTOOLS_UNIT_ASSERT(s15 == c15); const cxxtools::Char c16[] = { 'b', 'c', 'd', '\0' }; cxxtools::String s16(s11, 1, 3); CXXTOOLS_UNIT_ASSERT(s16 == c16); cxxtools::String s20(s2.begin(), s2.end()); CXXTOOLS_UNIT_ASSERT(s20 == L"abcde"); }
void CUIListWnd::RemoveItem(int index) { if(index<0 || index>=(int)m_ItemList.size()) return; LIST_ITEM_LIST_it it; //выбрать нужный элемент it = m_ItemList.begin(); for(int i=0; i<index;++i, ++it); R_ASSERT(m_ItemList.end() != it); DetachChild(*it); UpdateList(); //обновить полосу прокрутки if(m_ItemList.size()>0) m_ScrollBar->SetRange(0,s16(m_ItemList.size()-1)); else m_ScrollBar->SetRange(0,0); m_ScrollBar->SetPageSize( (m_iRowNum < (int)m_ItemList.size())? m_iRowNum : (int)m_ItemList.size() ); m_ScrollBar->SetScrollPos(s16(m_iFirstShownIndex)); m_ScrollBar->Refresh(); //перенумеровать индексы заново i=0; for(LIST_ITEM_LIST_it it=m_ItemList.begin(); m_ItemList.end() != it; ++it,i++) { (*it)->SetIndex(i); } }
bool HMC5883::Update(Vector3f &mag) { if(!mI2C.IsHealthy())//if i2c not work correctly { mI2C.Initialize(); //initialize i2c Initialize(); //initialize mpu6050 return false; } if(mIsUpdated==false) { if(tskmgr.Time()-mUpdatedTime > 1) { mI2C.Initialize(); //initialize i2c Initialize(); //initialize HMC5883 mIsUpdated = true; } return false; } mIsUpdated = false; u8 reg = HMC5883_XOUT_M; //form mag x high register, read 6 bytes mI2C.AddCommand(HMC5883_ADDRESS, ®, 1, mRawData, 6, this, true); mI2C.Start(); //start run i2c command //convert sensor data mag.x = s16(mRawData[0]<<8 | mRawData[1]); mag.y = s16(mRawData[2]<<8 | mRawData[3]); mag.z = s16(mRawData[4]<<8 | mRawData[5]); return true; }
void ESceneAIMapTools::PackPosition(NodePosition& Dest, Fvector& Src, Fbox& bb, SAIParams& params) { float sp = 1/params.fPatchSize; int px,py,pz; px = iFloor(Src.x*sp+EPS_L); py = iFloor(65535.f*(Src.y-bb.min.y)/(bb.max.y-bb.min.y)+EPS_L); pz = iFloor(Src.z*sp+EPS_L); clamp (px,-32767,32767); Dest.x = s16 (px); clamp (py,0, 65535); Dest.y = u16 (py); clamp (pz,-32767,32767); Dest.z = s16 (pz); }
void CPHCollisionDamageReceiver::Hit(u16 source_id,u16 bone_id,float power,const Fvector& dir,Fvector &pos ) { DAMAGE_BONES_I i=FindBone(bone_id); if(i==m_controled_bones.end())return; power*=i->second; if(power<hit_threthhold)return; NET_Packet P; CPhysicsShellHolder *ph=PPhysicsShellHolder(); SHit HS; HS.GenHeader(GE_HIT,ph->ID()); // ph->u_EventGen(P,GE_HIT,ph->ID()); HS.whoID = ph->ID(); // P.w_u16 (ph->ID()); HS.weaponID = source_id; // P.w_u16 (source_id); HS.dir = dir; // P.w_dir (dir); HS.power = power; // P.w_float (power); HS.boneID = s16(bone_id); // P.w_s16 (s16(bone_id)); HS.p_in_bone_space = pos; // P.w_vec3 (pos); HS.impulse = 0.f; // P.w_float (0.f); HS.hit_type = (ALife::eHitTypeStrike); // P.w_u16 (ALife::eHitTypeStrike); HS.Write_Packet(P); ph->u_EventSend(P); }
void CUIListWnd::RemoveAll() { if(m_ItemList.empty()) return; LIST_ITEM_LIST_it it; while(!m_ItemList.empty()) { DetachChild(m_ItemList.front()); } m_iFirstShownIndex = 0; UpdateList(); Reset(); //обновить полосу прокрутки m_ScrollBar->SetRange(0,0); m_ScrollBar->SetPageSize(1); m_ScrollBar->SetScrollPos(s16(m_iFirstShownIndex)); UpdateScrollBar(); }
void KeyboardEvent::execute() { switch(m_type) { case Cocos2dKeyEvent::Text: { std::wstring w(m_text.Get()->Data()); std::u16string s16(w.begin(),w.end()); std::string utf8String; StringUtils::UTF16ToUTF8(s16, utf8String); IMEDispatcher::sharedDispatcher()->dispatchInsertText(utf8String.c_str(), utf8String.size()); break; } default: switch (m_type) { case Cocos2dKeyEvent::Escape: //Director::getInstance()()->getKeypadDispatcher()->dispatchKeypadMSG(kTypeBackClicked); break; case Cocos2dKeyEvent::Back: IMEDispatcher::sharedDispatcher()->dispatchDeleteBackward(); break; case Cocos2dKeyEvent::Enter: IMEDispatcher::sharedDispatcher()->dispatchInsertText("\n", 1); break; default: break; } break; } }
void evdevDevice::ForceFeedback::SetState(ControlState state) { // libevdev doesn't have nice helpers for forcefeedback // we will use the file descriptors directly. if (m_id != -1) // delete the previous effect (which also stops it) { ioctl(m_fd, EVIOCRMFF, m_id); m_id = -1; } if (state > 0) // Upload and start an effect. { ff_effect effect; effect.id = -1; effect.direction = 0; // down effect.replay.length = 500; // 500ms effect.replay.delay = 0; effect.trigger.button = 0; // don't trigger on button press effect.trigger.interval = 0; // This is the the interface that XInput uses, with 2 motors of differing sizes/frequencies that // are controlled seperatally if (m_type == FF_RUMBLE) { effect.type = FF_RUMBLE; // max ranges tuned to 'feel' similar in magnitude to triangle/sine on xbox360 controller effect.u.rumble.strong_magnitude = u16(state * 0x4000); effect.u.rumble.weak_magnitude = u16(state * 0xFFFF); } else // FF_PERIODIC, a more generic interface. { effect.type = FF_PERIODIC; effect.u.periodic.waveform = m_type; effect.u.periodic.phase = 0x7fff; // 180 degrees effect.u.periodic.offset = 0; effect.u.periodic.period = 10; effect.u.periodic.magnitude = s16(state * 0x7FFF); effect.u.periodic.envelope.attack_length = 0; // no attack effect.u.periodic.envelope.attack_level = 0; effect.u.periodic.envelope.fade_length = 0; effect.u.periodic.envelope.fade_level = 0; } ioctl(m_fd, EVIOCSFF, &effect); m_id = effect.id; input_event play; play.type = EV_FF; play.code = m_id; play.value = 1; if (write(m_fd, &play, sizeof(play)) < 0) { } } }
void __fastcall TransformAnalog(s16 &X, s16 &Y, SETTINGS &set, bool leftStick) { // If input is dead, no need to check or do anything else if((X == 0) && (Y == 0)) return; STICK stick = leftStick ? set.stickL : set.stickR; tPOINT point(X, Y, stick.dzconst, stick.adzconst); if (stick.linearity != 0) point.ApplyLinearity(stick.linearity); if (stick.dzcheck > 0) point.ApplyDeadzone(stick.dzcheck, set.linearDZ); if (stick.adzcheck > 0) point.ApplyAntiDeadzone(stick.adzcheck, set.linearADZ); f64 fX = stick.invertedX ? point.GetX() * -1.0 : point.GetX(); f64 fY = stick.invertedY ? point.GetY() * -1.0 : point.GetY(); X = s16(fX < -32767.0 ? -32767 : fX > 32767.0 ? 32767 : fX); Y = s16(fY < -32767.0 ? -32767 : fY > 32767.0 ? 32767 : fY); }
inline void floatTos16(s16* dst, const float *src, u32 numsamples, u32 numchannels) { for (u32 i = 0; i < numsamples * numchannels; i++) { float sample = src[i] * 32768.0f; sample = MathUtil::Clamp(sample, -32768.f, 32767.f); dst[i] = s16(sample); } }
void CUIListWnd::Init(float x, float y, float width, float height, float item_height) { CUIWindow::Init(x, y, width, height); //добавить полосу прокрутки m_ScrollBar = xr_new<CUIScrollBar>(); m_ScrollBar->SetAutoDelete(true); AttachChild(m_ScrollBar); if (!!m_scrollbar_profile) m_ScrollBar->Init(width,0,height, false, *m_scrollbar_profile); else m_ScrollBar->Init(width,0,height, false); m_ScrollBar->SetWndPos(m_ScrollBar->GetWndPos().x - m_ScrollBar->GetWidth(), m_ScrollBar->GetWndPos().y); SetItemWidth(width - m_ScrollBar->GetWidth()); m_iFirstShownIndex = 0; SetItemHeight(item_height); m_iRowNum = iFloor(height/m_iItemHeight); m_ScrollBar->SetRange(0,0); m_ScrollBar->SetPageSize(s16(0)); m_ScrollBar->SetScrollPos(s16(m_iFirstShownIndex)); m_ScrollBar->Show(false); m_ScrollBar->Enable(false); /* m_StaticActiveBackground.Init(ACTIVE_BACKGROUND,"hud\\default", 0,0,alNone); m_StaticActiveBackground.SetTile(iFloor(m_iItemWidth/ACTIVE_BACKGROUND_WIDTH), iFloor(m_iItemHeight/ACTIVE_BACKGROUND_HEIGHT), fmod(m_iItemWidth,float(ACTIVE_BACKGROUND_WIDTH)), fmod(m_iItemHeight,float(ACTIVE_BACKGROUND_HEIGHT))); */ UpdateList(); }
u16 ResolverIn::getAngle() { static DelayedConditional faultdelay(parentSys,0.2,false); //TODO /* status 9.2012: * pinnia heilutetaan systemin hf taskista * * * update:kytkis loytyy psvn skemana, natti RC ulostulo resosta * * luenta: * säädetään keskeytys 20kHz:iin ja luetaan adc arvot talteen pulssin keskeltä * * skooppi: * transcend muistitikulla skooppikuvia resolverista kun lähdön kanssa sarjassa 6.8 ohm ja * kelan rinnan 0.33uf -> melkein siniaalto mutta LC oskillaatiota reunoissa * * sin ja kelt: käämin päät maahan nähden * pink: erotus käämin yli * vih: toision ulostulo * * Tarvinnee myös isomman sarjaresistanssin koska driveri lämpenee 70Chen 25Cssä ja ulostuloksi tulee * yli +-2v * */ /* TODO add fault detection if voltages of both channels less than 100mV or so * this detects disconnected resolver and prevents angle going crazy*/ lastAngle = currAngle; float x, y; //parentSys->physIO.ADin.getVoltageVolts(AnalogIn::EncA),parentSys->physIO.ADin.getVoltageVolts(AnalogIn::EncB) getSamples( x, y ); //detect loss of input voltage (resolver disconnected or miswired) bool fault=false; if((x*x+y*y)<(0.2*0.2)) fault=true; if(faultdelay.delayedTrue( fault ) ) { parentSys->setFault(FLT_ENCODER,FAULTLOCATION_BASE+101); } currAngle = u16( s32( 65536.0 * atan2f( x, y ) * (0.5 / M_PI) ) ); lastOutputCount = outputCount; unrolledCount += s16( currAngle - lastAngle ); outputCount = unrolledCount / (65536 / countsPerRev); return outputCount; }
void CUIListWnd::InitListWnd(Fvector2 pos, Fvector2 size, float item_height) { inherited::SetWndPos(pos); inherited::SetWndSize(size); //добавить полосу прокрутки m_ScrollBar = xr_new<CUIScrollBar>(); m_ScrollBar->SetAutoDelete(true); AttachChild(m_ScrollBar); if (!!m_scrollbar_profile) m_ScrollBar->InitScrollBar(Fvector2().set(size.x,0.0f), size.y, false, *m_scrollbar_profile); else m_ScrollBar->InitScrollBar(Fvector2().set(size.x,0.0f), size.y, false); m_ScrollBar->SetWndPos( Fvector2().set(m_ScrollBar->GetWndPos().x - m_ScrollBar->GetWidth(), m_ScrollBar->GetWndPos().y)); SetItemWidth(size.x - m_ScrollBar->GetWidth()); m_iFirstShownIndex = 0; SetItemHeight(item_height); m_iRowNum = iFloor(size.y/m_iItemHeight); m_ScrollBar->SetRange(0,0); m_ScrollBar->SetPageSize(0); m_ScrollBar->SetScrollPos(s16(m_iFirstShownIndex)); m_ScrollBar->Show(false); m_ScrollBar->Enable(false); /* m_StaticActiveBackground.Init(ACTIVE_BACKGROUND,"hud\\default", 0,0,alNone); m_StaticActiveBackground.SetTile(iFloor(m_iItemWidth/ACTIVE_BACKGROUND_WIDTH), iFloor(m_iItemHeight/ACTIVE_BACKGROUND_HEIGHT), fmod(m_iItemWidth,float(ACTIVE_BACKGROUND_WIDTH)), fmod(m_iItemHeight,float(ACTIVE_BACKGROUND_HEIGHT))); */ UpdateList(); }
/*============================================================================== * FUNCTION: DfaTest::testMeetSize * OVERVIEW: Test meeting IntegerTypes with various other types *============================================================================*/ void DfaTest::testMeetSize() { IntegerType i32(32, 1); SizeType s32(32); SizeType s16(16); FloatType flt(32); VoidType v; bool ch = false; Type *res = s32.meetWith(&i32, ch, false); CPPUNIT_ASSERT(ch == true); std::ostringstream ost1; ost1 << res; std::string actual(ost1.str()); std::string expected("i32"); CPPUNIT_ASSERT_EQUAL(expected, actual); ch = false; res = s32.meetWith(&s16, ch, false); CPPUNIT_ASSERT(ch == false); #if 0 // There is a known failure here; to show the warning, use ErrLogger Boomerang::get()->setLogger(new ErrLogger); res = s16.meetWith(&flt, ch, false); CPPUNIT_ASSERT(ch == true); std::ostringstream ost2; ost2 << res; actual = ost2.str(); expected = "union"; CPPUNIT_ASSERT_EQUAL(expected, actual); #endif ch = false; res = s16.meetWith(&v, ch, false); CPPUNIT_ASSERT(ch == false); std::ostringstream ost3; ost3 << res; actual = ost3.str(); expected = "16"; CPPUNIT_ASSERT_EQUAL(expected, actual); }
bool OSystem_Wii::setGraphicsMode(int mode) { s16 xar, yar; printf("setGraphicsMode %d\n", mode); xar = vmode->viWidth / 2; yar = vmode->xfbHeight / 2; #ifndef GAMECUBE if (CONF_GetAspectRatio() && !_fullscreen) xar = s16(float(xar) / 1.33f); #endif GX_SetCamPosZ(400 - mode * 10); GX_Start(640, 480, xar, yar); _activeGraphicsMode = mode; return true; }
void game_cl_TeamDeathmatch::OnTeamSelect(int Team) { bool NeedToSendTeamSelect = true; if (Team != -1) { if (Team+1 == local_player->team && m_bSkinSelected) NeedToSendTeamSelect = false; else { NeedToSendTeamSelect = true; } } if (NeedToSendTeamSelect) { CObject *l_pObj = Level().CurrentEntity(); CGameObject *l_pPlayer = smart_cast<CGameObject*>(l_pObj); if(!l_pPlayer) return; NET_Packet P; l_pPlayer->u_EventGen (P,GE_GAME_EVENT,l_pPlayer->ID() ); P.w_u16(GAME_EVENT_PLAYER_GAME_MENU); P.w_u8(PLAYER_CHANGE_TEAM); P.w_s16 (s16(Team+1)); //P.w_u32 (0); l_pPlayer->u_EventSend (P); //----------------------------------------------------------------- m_bSkinSelected = FALSE; }; //----------------------------------------------------------------- m_bTeamSelected = TRUE; //--------------------------- // if (m_bMenuCalledFromReady) // { // OnKeyboardPress(kJUMP); // } };
void CScriptGameObject::Hit(CScriptHit *tpLuaHit) { CScriptHit &tLuaHit = *tpLuaHit; NET_Packet P; SHit HS; HS.GenHeader(GE_HIT,object().ID()); // object().u_EventGen(P,GE_HIT,object().ID()); THROW2 (tLuaHit.m_tpDraftsman,"Where is hit initiator??!"); // THROW2 (tLuaHit.m_tpDraftsman,"Where is hit initiator??!"); HS.whoID = u16(tLuaHit.m_tpDraftsman->ID()); // P.w_u16 (u16(tLuaHit.m_tpDraftsman->ID())); HS.weaponID = 0; // P.w_u16 (0); HS.dir = tLuaHit.m_tDirection; // P.w_dir (tLuaHit.m_tDirection); HS.power = tLuaHit.m_fPower; // P.w_float (tLuaHit.m_fPower); CKinematics *V = smart_cast<CKinematics*>(object().Visual()); // CKinematics *V = smart_cast<CKinematics*>(object().Visual()); VERIFY (V); // VERIFY (V); if (xr_strlen (tLuaHit.m_caBoneName)) // if (xr_strlen (tLuaHit.m_caBoneName)) HS.boneID = (V->LL_BoneID(tLuaHit.m_caBoneName)); // P.w_s16 (V->LL_BoneID(tLuaHit.m_caBoneName)); else // else HS.boneID = (s16(0)); // P.w_s16 (s16(0)); HS.p_in_bone_space = Fvector().set(0,0,0); // P.w_vec3 (Fvector().set(0,0,0)); HS.impulse = tLuaHit.m_fImpulse; // P.w_float (tLuaHit.m_fImpulse); HS.hit_type = (ALife::EHitType)(tLuaHit.m_tHitType); // P.w_u16 (u16(tLuaHit.m_tHitType)); HS.Write_Packet(P); object().u_EventSend(P); }
u8* DecompressAsh( const u8 *stuff, u32 &len ) { if( !IsAshCompressed( stuff, len ) ) { return NULL; } unsigned int r[32]; unsigned int count = 0; unsigned int t; r[4] = (u32)stuff; //in r[5] = 0x415348; r[6] = 0x415348; r[5] = s32(*(unsigned int *)(r[4]+4)); r[5] = r[5] & 0x00FFFFFF; u32 size = r[5]; //gprintf("Decompressed size: %d\n", size); u8* buf1 = (u8*)memalign( 32, size ); if( !buf1 ) { gprintf( "ASH: no memory\n" ); return NULL; } r[3] = (u32)buf1; //out memset( (void*)buf1, 0, size ); //printf("r[3] :%08X\n", r[3]); //printf("\n\n"); r[24] = 0x10; r[28] = s32(*(unsigned int *)(r[4]+8)); r[25] = 0; r[29] = 0; r[26] = s32(*(unsigned int *)(r[4]+0xC)); r[30] = s32(*(unsigned int *)(r[4]+r[28])); r[28] = r[28] + 4; //r[8] = 0x8108<<16; //HACK, pointer to RAM u8* workingBuffer = (u8*)memalign( 32, 0x100000 ); if( !workingBuffer ) { gprintf( "ASH: no memory 2\n" ); free( buf1 ); return NULL; } r[8] = (u32)workingBuffer; memset( (void*)workingBuffer, 0, 0x100000 ); //printf("r[8] :%08X\n", r[8]); r[8] = r[8]; r[9] = r[8] + 0x07FE; r[10] = r[9] + 0x07FE; r[11] = r[10] + 0x1FFE; r[31] = r[11] + 0x1FFE; r[23] = 0x200; r[22] = 0x200; r[27] = 0; loc_81332124: if( r[25] != 0x1F ) goto loc_81332140; r[0] = r[26] >> 31; r[26]= s32(*(unsigned int *)(r[4] + r[24])); r[25]= 0; r[24]= r[24] + 4; goto loc_8133214C; loc_81332140: r[0] = r[26] >> 31; r[25]= r[25] + 1; r[26]= r[26] << 1; loc_8133214C: if( r[0] == 0 ) goto loc_81332174; r[0] = r[23] | 0x8000; *(unsigned short *)(r[31]) = s16(r[0]); r[0] = r[23] | 0x4000; *(unsigned short *)(r[31]+2) = s16(r[0]); r[31] = r[31] + 4; r[27] = r[27] + 2; r[23] = r[23] + 1; r[22] = r[22] + 1; goto loc_81332124; loc_81332174: r[12] = 9; r[21] = r[25] + r[12]; t = r[21]; if( r[21] > 0x20 ) goto loc_813321AC; r[21] = (~(r[12] - 0x20))+1; r[6] = r[26] >> r[21]; if( t == 0x20 ) goto loc_8133219C; r[26] = r[26] << r[12]; r[25] = r[25] + r[12]; goto loc_813321D0; loc_8133219C: r[26]= s32(*(unsigned int *)(r[4] + r[24])); r[25]= 0; r[24]= r[24] + 4; goto loc_813321D0; loc_813321AC: r[0] = (~(r[12] - 0x20))+1; r[6] = r[26] >> r[0]; r[26]= s32(*(unsigned int *)(r[4] + r[24])); r[0] = (~(r[21] - 0x40))+1; r[24]= r[24] + 4; r[0] = r[26] >> r[0]; r[6] = r[6] | r[0]; r[25] = r[21] - 0x20; r[26] = r[26] << r[25]; loc_813321D0: r[12]= s16(*(unsigned short *)(r[31] - 2)); r[31] -= 2; r[27]= r[27] - 1; r[0] = r[12] & 0x8000; r[12]= (r[12] & 0x1FFF) << 1; if( r[0] == 0 ) goto loc_813321F8; *(unsigned short *)(r[9]+r[12]) = s16(r[6]); r[6] = (r[12] & 0x3FFF)>>1; // extrwi %r6, %r12, 14,17 if( r[27] != 0 ) goto loc_813321D0; goto loc_81332204; loc_813321F8: *(unsigned short *)(r[8]+r[12]) = s16(r[6]); r[23] = r[22]; goto loc_81332124; loc_81332204: r[23] = 0x800; r[22] = 0x800; loc_8133220C: if( r[29] != 0x1F ) goto loc_81332228; r[0] = r[30] >> 31; r[30]= s32(*(unsigned int *)(r[4] + r[28])); r[29]= 0; r[28]= r[28] + 4; goto loc_81332234; loc_81332228: r[0] = r[30] >> 31; r[29]= r[29] + 1; r[30]= r[30] << 1; loc_81332234: if( r[0] == 0 ) goto loc_8133225C; r[0] = r[23] | 0x8000; *(unsigned short *)(r[31]) = s16(r[0]); r[0] = r[23] | 0x4000; *(unsigned short *)(r[31]+2) = s16(r[0]); r[31] = r[31] + 4; r[27] = r[27] + 2; r[23] = r[23] + 1; r[22] = r[22] + 1; goto loc_8133220C; loc_8133225C: r[12] = 0xB; r[21] = r[29] + r[12]; t = r[21]; if( r[21] > 0x20 ) goto loc_81332294; r[21] = (~(r[12] - 0x20))+1; r[7] = r[30] >> r[21]; if( t == 0x20 ) goto loc_81332284; r[30] = r[30] << r[12]; r[29] = r[29] + r[12]; goto loc_813322B8; loc_81332284: r[30]= s32(*(unsigned int *)(r[4] + r[28])); r[29]= 0; r[28]= r[28] + 4; goto loc_813322B8; loc_81332294: r[0] = (~(r[12] - 0x20))+1; r[7] = r[30] >> r[0]; r[30]= s32(*(unsigned int *)(r[4] + r[28])); r[0] = (~(r[21] - 0x40))+1; r[28]= r[28] + 4; r[0] = r[30] >> r[0]; r[7] = r[7] | r[0]; r[29]= r[21] - 0x20; r[30]= r[30] << r[29]; loc_813322B8: r[12]= s16(*(unsigned short *)(r[31] - 2)); r[31] -= 2; r[27]= r[27] - 1; r[0] = r[12] & 0x8000; r[12]= (r[12] & 0x1FFF) << 1; if( r[0] == 0 ) goto loc_813322E0; *(unsigned short *)(r[11]+r[12]) = s16(r[7]); r[7] = (r[12] & 0x3FFF)>>1; // extrwi %r7, %r12, 14,17 if( r[27] != 0 ) goto loc_813322B8; goto loc_813322EC; loc_813322E0: *(unsigned short *)(r[10]+r[12]) = s16(r[7]); r[23] = r[22]; goto loc_8133220C; loc_813322EC: r[0] = r[5]; loc_813322F0: r[12]= r[6]; loc_813322F4: if( r[12] < 0x200 ) goto loc_8133233C; if( r[25] != 0x1F ) goto loc_81332318; r[31] = r[26] >> 31; r[26] = s32(*(unsigned int *)(r[4] + r[24])); r[24] = r[24] + 4; r[25] = 0; goto loc_81332324; loc_81332318: r[31] = r[26] >> 31; r[25] = r[25] + 1; r[26] = r[26] << 1; loc_81332324: r[27] = r[12] << 1; if( r[31] != 0 ) goto loc_81332334; r[12] = s16(*(unsigned short *)(r[8] + r[27])); goto loc_813322F4; loc_81332334: r[12] = s16(*(unsigned short *)(r[9] + r[27])); goto loc_813322F4; loc_8133233C: if( r[12] >= 0x100 ) goto loc_8133235C; *(unsigned char *)(r[3]) = r[12]; r[3] = r[3] + 1; r[5] = r[5] - 1; if( r[5] != 0 ) goto loc_813322F0; goto loc_81332434; loc_8133235C: r[23] = r[7]; loc_81332360: if( r[23] < 0x800 ) goto loc_813323A8; if( r[29] != 0x1F ) goto loc_81332384; r[31] = r[30] >> 31; r[30] = s32(*(unsigned int *)(r[4] + r[28])); r[28] = r[28] + 4; r[29] = 0; goto loc_81332390; loc_81332384: r[31] = r[30] >> 31; r[29] = r[29] + 1; r[30] = r[30] << 1; loc_81332390: r[27] = r[23] << 1; if( r[31] != 0 ) goto loc_813323A0; r[23] = s16(*(unsigned short *)(r[10] + r[27])); goto loc_81332360; loc_813323A0: r[23] = s16(*(unsigned short *)(r[11] + r[27])); goto loc_81332360; loc_813323A8: r[12] = r[12] - 0xFD; r[23] = ~r[23] + r[3] + 1; r[5] = ~r[12] + r[5] + 1; r[31] = r[12] >> 3; if( r[31] == 0 ) goto loc_81332414; count = r[31]; loc_813323C0: r[31] = *(unsigned char *)(r[23] - 1); *(unsigned char *)(r[3]) = r[31]; r[31] = *(unsigned char *)(r[23]); *(unsigned char *)(r[3]+1) = r[31]; r[31] = *(unsigned char *)(r[23] + 1); *(unsigned char *)(r[3]+2) = r[31]; r[31] = *(unsigned char *)(r[23] + 2); *(unsigned char *)(r[3]+3) = r[31]; r[31] = *(unsigned char *)(r[23] + 3); *(unsigned char *)(r[3]+4) = r[31]; r[31] = *(unsigned char *)(r[23] + 4); *(unsigned char *)(r[3]+5) = r[31]; r[31] = *(unsigned char *)(r[23] + 5); *(unsigned char *)(r[3]+6) = r[31]; r[31] = *(unsigned char *)(r[23] + 6); *(unsigned char *)(r[3]+7) = r[31]; r[23] = r[23] + 8; r[3] = r[3] + 8; if( --count ) goto loc_813323C0; r[12] = r[12] & 7; if( r[12] == 0 ) goto loc_8133242C; loc_81332414: count = r[12]; loc_81332418: r[31] = *(unsigned char *)(r[23] - 1); r[23] = r[23] + 1; *(unsigned char *)(r[3]) = r[31]; r[3] = r[3] + 1; if( --count ) goto loc_81332418; loc_8133242C: if( r[5] != 0 ) goto loc_813322F0; loc_81332434: r[3] = r[0]; len = r[3]; //gprintf("Decompressed %d bytes\n", r[3]); free( workingBuffer ); return buf1; }
LRESULT StringEditorWindow::WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) { switch ( msg ) { case WM_SHOWWINDOW: if ( wParam == TRUE ) RefreshWindow(); else if ( wParam == FALSE ) updateString(currSelString); break; case WM_MOUSEWHEEL: listStrings.SetTopIndex(listStrings.GetTopIndex()-(int((s16(HIWORD(wParam)))/WHEEL_DELTA))); break; case WM_PREMEASUREITEMS: // Measuring is time sensative, load necessary items for measuring all strings once stringListDC = listStrings.getDC(); break; case WM_MEASUREITEM: { MEASUREITEMSTRUCT* mis = (MEASUREITEMSTRUCT*)lParam; RawString str; if ( chkd.maps.curr->GetString(str, mis->itemData) && str.size() > 0 && GetStringDrawSize(stringListDC, mis->itemWidth, mis->itemHeight, str) ) { mis->itemWidth += 5; mis->itemHeight += 2; } return TRUE; } break; case WM_POSTMEASUREITEMS: // Release items loaded for measurement listStrings.ReleaseDC(stringListDC); stringListDC = NULL; break; case WM_PREDRAWITEMS: break; case WM_DRAWITEM: { PDRAWITEMSTRUCT pdis = (PDRAWITEMSTRUCT)lParam; bool isSelected = ((pdis->itemState&ODS_SELECTED) == ODS_SELECTED), drawSelection = ((pdis->itemAction&ODA_SELECT) == ODA_SELECT), drawEntire = ((pdis->itemAction&ODA_DRAWENTIRE) == ODA_DRAWENTIRE); if ( pdis->itemID != -1 && ( drawSelection || drawEntire ) ) { RawString str; if ( chkd.maps.curr != nullptr && chkd.maps.curr->GetString(str, pdis->itemData) && str.size() > 0 ) { HBRUSH hBackground = CreateSolidBrush(RGB(0, 0, 0)); // Same color as in WM_CTLCOLORLISTBOX if ( hBackground != NULL ) { FillRect(pdis->hDC, &pdis->rcItem, hBackground); // Draw far background DeleteObject(hBackground); hBackground = NULL; } SetBkMode(pdis->hDC, TRANSPARENT); DrawString(pdis->hDC, pdis->rcItem.left+3, pdis->rcItem.top+1, pdis->rcItem.right-pdis->rcItem.left, RGB(16, 252, 24), str); } if ( isSelected ) DrawFocusRect(pdis->hDC, &pdis->rcItem); } return TRUE; } break; case WM_POSTDRAWITEMS: break; default: return ClassWindow::WndProc(hWnd, msg, wParam, lParam); break; } return 0; }
BOOL CCustomOutfit::BonePassBullet (int boneID) { return m_boneProtection->getBonePassBullet(s16(boneID)); }
/* * Execute the IF_ICMPEQ instruction */ void op_if_icmpeq() { int value2 = popInt(); int value1 = popInt(); if (value1 == value2) { pc += s16(1); } else { pc += 3; } }
s16 CUIGameCTA::GetBuyMenuItemIndex (u8 Addons, u8 ItemID) { s16 ID = (s16(Addons) << 0x08) | s16(ItemID); return ID; };
/* * Execute the IFEQ instruction */ void op_ifeq() { if (popInt() == 0) { pc += s16(1); } else { pc += 3; } }
/* * Execute the GOTO instruction */ void op_goto() { pc += s16(1); }
void CGameSpy_Browser::ReadServerInfo (ServerInfo* pServerInfo, void* pServer) { CStringTable st; if (!pServer || !pServerInfo) return; sprintf_s(pServerInfo->m_Address, "%s:%d", xrGS_SBServerGetPublicAddress(pServer), xrGS_SBServerGetPublicQueryPort(pServer)); sprintf_s(pServerInfo->m_HostName, "%s", xrGS_SBServerGetPublicAddress(pServer)); sprintf_s(pServerInfo->m_ServerName, "%s", xrGS_SBServerGetStringValue(pServer, m_pQR2->xrGS_RegisteredKey(HOSTNAME_KEY), pServerInfo->m_HostName)); sprintf_s(pServerInfo->m_SessionName, "%s", xrGS_SBServerGetStringValue(pServer, m_pQR2->xrGS_RegisteredKey(MAPNAME_KEY), "Unknown")); sprintf_s(pServerInfo->m_ServerGameType, "%s", xrGS_SBServerGetStringValue(pServer, m_pQR2->xrGS_RegisteredKey(GAMETYPE_KEY), "Unknown")); pServerInfo->m_bPassword = xrGS_SBServerGetBoolValue(pServer, m_pQR2->xrGS_RegisteredKey(PASSWORD_KEY), SBFalse) == SBTrue; pServerInfo->m_bUserPass = xrGS_SBServerGetBoolValue(pServer, m_pQR2->xrGS_RegisteredKey(G_USER_PASSWORD_KEY), SBFalse) == SBTrue; #ifdef BATTLEYE pServerInfo->m_bBattlEye = xrGS_SBServerGetBoolValue(pServer, m_pQR2->xrGS_RegisteredKey(G_BATTLEYE_KEY), SBFalse) == SBTrue; #endif // BATTLEYE pServerInfo->m_Ping = (s16)(xrGS_SBServerGetPing(pServer) & 0xffff); pServerInfo->m_ServerNumPlayers = (s16)xrGS_SBServerGetIntValue(pServer, m_pQR2->xrGS_RegisteredKey(NUMPLAYERS_KEY), 0); pServerInfo->m_ServerMaxPlayers = (s16)xrGS_SBServerGetIntValue(pServer, m_pQR2->xrGS_RegisteredKey(MAXPLAYERS_KEY), 32); pServerInfo->m_ServerNumTeams = (s16)xrGS_SBServerGetIntValue(pServer, m_pQR2->xrGS_RegisteredKey(NUMTEAMS_KEY), 0); pServerInfo->m_Port = (s16)xrGS_SBServerGetIntValue(pServer, m_pQR2->xrGS_RegisteredKey(HOSTPORT_KEY), 0); pServerInfo->m_HPort = (s16)xrGS_SBServerGetPublicQueryPort(pServer); pServerInfo->m_bDedicated = (xrGS_SBServerGetBoolValue(pServer, m_pQR2->xrGS_RegisteredKey(DEDICATED_KEY), SBFalse)) == SBTrue; pServerInfo->m_GameType = (u8)xrGS_SBServerGetIntValue(pServer, m_pQR2->xrGS_RegisteredKey(GAMETYPE_NAME_KEY), 0); if (pServerInfo->m_GameType == 0) { if (!xr_strcmp(pServerInfo->m_ServerGameType, "deathmatch")) pServerInfo->m_GameType = GAME_DEATHMATCH; else if (!xr_strcmp(pServerInfo->m_ServerGameType, "teamdeathmatch")) pServerInfo->m_GameType = GAME_TEAMDEATHMATCH; else if (!xr_strcmp(pServerInfo->m_ServerGameType, "artefacthunt")) pServerInfo->m_GameType = GAME_ARTEFACTHUNT; } sprintf_s(pServerInfo->m_ServerVersion, "%s", xrGS_SBServerGetStringValue(pServer, m_pQR2->xrGS_RegisteredKey(GAMEVER_KEY), "--")); //--------- Read Game Infos ---------------------------// pServerInfo->m_aInfos.clear(); pServerInfo->m_aPlayers.clear(); pServerInfo->m_aTeams.clear(); //-------------------------------------------------------// if (xrGS_SBServerHasFullKeys(pServer) == SBFalse) return; // pServerInfo->m_aInfos.push_back(GameInfo("Version:", pServerInfo->m_ServerVersion)); pServerInfo->m_aInfos.push_back(GameInfo(*st.translate("mp_si_servername"), pServerInfo->m_ServerName)); pServerInfo->m_aInfos.push_back(GameInfo(*st.translate("mp_si_version"), pServerInfo->m_ServerVersion)); #ifdef BATTLEYE ADD_BOOL_INFO(pServerInfo, pServer, "BattlEye", G_BATTLEYE_KEY); #endif // BATTLEYE ADD_INT_INFO_N (pServerInfo, pServer, 1, "Max ping", "", G_MAX_PING_KEY); ADD_BOOL_INFO(pServerInfo, pServer, *st.translate("mp_si_maprotation"), G_MAP_ROTATION_KEY); pServerInfo->m_aInfos.push_back( GameInfo(*st.translate("mp_si_voting"), (xrGS_SBServerGetBoolValue(pServer, m_pQR2->xrGS_RegisteredKey(G_VOTING_ENABLED_KEY), SBFalse) == SBTrue) ? *st.translate("mp_si_enabled") : *st.translate("mp_si_disabled"))); // ADD_BOOL_INFO(pServerInfo, pServer, *st.translate("mp_si_voting"), G_VOTING_ENABLED_KEY); //----------------------------------------------------------------------- pServerInfo->m_aInfos.push_back(GameInfo(*st.translate("mp_si_spectatormodes"), "")); int SpectrModes = xrGS_SBServerGetIntValue(pServer, m_pQR2->xrGS_RegisteredKey(G_SPECTATOR_MODES_KEY), 0); pServerInfo->m_aInfos.push_back(GameInfo(*st.translate("mp_si_free_fly"), ((SpectrModes & (1<<CSpectator::eacFreeFly )) != 0) ? *st.translate("mp_si_yes") : *st.translate("mp_si_no"))); pServerInfo->m_aInfos.push_back(GameInfo(*st.translate("mp_si_first_eye"), ((SpectrModes & (1<<CSpectator::eacFirstEye )) != 0) ? *st.translate("mp_si_yes") : *st.translate("mp_si_no"))); pServerInfo->m_aInfos.push_back(GameInfo(*st.translate("mp_si_look_at"), ((SpectrModes & (1<<CSpectator::eacLookAt )) != 0) ? *st.translate("mp_si_yes") : *st.translate("mp_si_no"))); pServerInfo->m_aInfos.push_back(GameInfo(*st.translate("mp_si_free_look"), ((SpectrModes & (1<<CSpectator::eacFreeLook )) != 0) ? *st.translate("mp_si_yes") : *st.translate("mp_si_no"))); if (pServerInfo->m_GameType != GAME_DEATHMATCH) pServerInfo->m_aInfos.push_back(GameInfo(*st.translate("mp_si_team_only"), ((SpectrModes & (1<<CSpectator::eacMaxCam )) != 0) ? *st.translate("mp_si_yes") : *st.translate("mp_si_no"))); //----------------------------------------------------------------------- if (pServerInfo->m_GameType == GAME_DEATHMATCH || pServerInfo->m_GameType == GAME_TEAMDEATHMATCH) { ADD_INT_INFO_N (pServerInfo, pServer, 1, *st.translate("mp_si_fraglimit"), "", G_FRAG_LIMIT_KEY); } ADD_TIME_INFO(pServerInfo, pServer, 1.0f, *st.translate("mp_si_time_limit"), "%.0f %s",*st.translate("mp_si_min"), G_TIME_LIMIT_KEY); if (xrGS_SBServerGetIntValue(pServer, m_pQR2->xrGS_RegisteredKey(G_DAMAGE_BLOCK_TIME_KEY), 0) != 0) { pServerInfo->m_aInfos.push_back(GameInfo(*st.translate("mp_si_invinsibility"), "")); ADD_BOOL_INFO(pServerInfo, pServer, *st.translate("mp_si_invinsibility_indicators"), G_DAMAGE_BLOCK_INDICATOR_KEY); ADD_TIME_INFO(pServerInfo, pServer, 1.0f, *st.translate("mp_si_invinsibility_time"), "%.f %s",*st.translate("mp_si_sec"), G_DAMAGE_BLOCK_TIME_KEY); } ADD_BOOL_INFO(pServerInfo, pServer, *st.translate("mp_si_anomalies"), G_ANOMALIES_ENABLED_KEY); if ((xrGS_SBServerGetBoolValue(pServer, m_pQR2->xrGS_RegisteredKey(G_ANOMALIES_ENABLED_KEY), SBFalse)) == SBTrue) { if (xrGS_SBServerGetIntValue(pServer, m_pQR2->xrGS_RegisteredKey(G_ANOMALIES_TIME_KEY),0) != 0) { ADD_TIME_INFO(pServerInfo, pServer, 1.0f, *st.translate("mp_si_anomalies_period"), "%.1f %s",*st.translate("mp_si_min"), G_ANOMALIES_TIME_KEY); } else pServerInfo->m_aInfos.push_back(GameInfo(*st.translate("mp_si_anomalies_period"), *st.translate("mp_si_infinite"))); } ADD_TIME_INFO(pServerInfo, pServer, 1.0f, *st.translate("mp_si_forcerespawn"), "%.f %s",*st.translate("mp_si_sec"), G_FORCE_RESPAWN_KEY); ADD_TIME_INFO(pServerInfo, pServer, 1.0f, *st.translate("mp_si_warmuptime"), "%.0f %s",*st.translate("mp_si_sec"), G_WARM_UP_TIME_KEY); if (pServerInfo->m_GameType == GAME_TEAMDEATHMATCH || pServerInfo->m_GameType == GAME_ARTEFACTHUNT) { ADD_BOOL_INFO(pServerInfo, pServer, *st.translate("mp_si_autoteam_balance"), G_AUTO_TEAM_BALANCE_KEY); ADD_BOOL_INFO(pServerInfo, pServer, *st.translate("mp_si_autoteam_swap"), G_AUTO_TEAM_SWAP_KEY); ADD_BOOL_INFO(pServerInfo, pServer, *st.translate("mp_si_friendly_indicators"), G_FRIENDLY_INDICATORS_KEY); ADD_BOOL_INFO(pServerInfo, pServer, *st.translate("mp_si_friendly_names"), G_FRIENDLY_NAMES_KEY); ADD_INT_INFO_N (pServerInfo, pServer, 1/100.0f, *st.translate("mp_si_friendly_fire"), " %%", G_FRIENDLY_FIRE_KEY); }; if (pServerInfo->m_GameType == GAME_ARTEFACTHUNT) { pServerInfo->m_aInfos.push_back(GameInfo(*st.translate("mp_si_artefacts"), "")); ADD_INT_INFO(pServerInfo, pServer, *st.translate("mp_si_afcount"), G_ARTEFACTS_COUNT_KEY ); ADD_TIME_INFO(pServerInfo, pServer, 1.0f, *st.translate("mp_si_afstaytime"), "%.2f %s",*st.translate("mp_si_min"), G_ARTEFACT_STAY_TIME_KEY); ADD_TIME_INFO(pServerInfo, pServer, 1.0f, *st.translate("mp_si_afrespawntime"), "%.0f %s",*st.translate("mp_si_sec"), G_ARTEFACT_RESPAWN_TIME_KEY); int Reinforcement = atoi(xrGS_SBServerGetStringValue(pServer, m_pQR2->xrGS_RegisteredKey(G_REINFORCEMENT_KEY), "0")); switch (Reinforcement) { case -1: pServerInfo->m_aInfos.push_back(GameInfo(*st.translate("mp_si_players_respawn"), *st.translate("mp_si_artefact_captured"))); break; case 0: pServerInfo->m_aInfos.push_back(GameInfo(*st.translate("mp_si_players_respawn"), *st.translate("mp_si_any_time"))); break; default: ADD_TIME_INFO(pServerInfo, pServer, 1.0f, *st.translate("mp_si_players_respawn"), "%.0f %s",*st.translate("mp_si_sec"), G_REINFORCEMENT_KEY); break; } ADD_BOOL_INFO(pServerInfo, pServer, *st.translate("mp_si_shielded_bases"), G_SHIELDED_BASES_KEY ); ADD_BOOL_INFO(pServerInfo, pServer, *st.translate("mp_si_return_players"), G_RETURN_PLAYERS_KEY ); ADD_BOOL_INFO(pServerInfo, pServer, *st.translate("mp_si_afbearer_cant_sprint"), G_BEARER_CANT_SPRINT_KEY); } //--------- Read Players Info -------------------------// for (int i=0; i<pServerInfo->m_ServerNumPlayers; i++) { PlayerInfo PInfo; sprintf_s(PInfo.Name, "%s", xrGS_SBServerGetPlayerStringValue(pServer, i, "player", "Unknown")); PInfo.Frags = s16(xrGS_SBServerGetPlayerIntValue(pServer, i, "score", 0)); PInfo.Deaths = u16(xrGS_SBServerGetPlayerIntValue(pServer, i, "deaths", 0)); PInfo.Rank = u8(xrGS_SBServerGetPlayerIntValue(pServer, i, "skill", 0)); PInfo.Team = u8(xrGS_SBServerGetPlayerIntValue(pServer, i, "team", 0)); PInfo.Spectator = (xrGS_SBServerGetPlayerIntValue(pServer, i, "spectator", 1)) != 0; PInfo.Artefacts = u8(xrGS_SBServerGetPlayerIntValue(pServer, i, "artefacts", 0)); pServerInfo->m_aPlayers.push_back(PInfo); }; //----------- Read Team Info ---------------------------// if (pServerInfo->m_GameType == GAME_TEAMDEATHMATCH || pServerInfo->m_GameType == GAME_ARTEFACTHUNT) { for (int i=0; i<pServerInfo->m_ServerNumTeams; i++) { TeamInfo TI; TI.Score = u8(xrGS_SBServerGetTeamIntValue(pServer, i, "t_score", 0)); pServerInfo->m_aTeams.push_back(TI); } } };
/* * Execute the IFNE instruction */ void op_ifne() { if (popInt() != 0) { pc += s16(1); } else { pc += 3; } }
bool test(bool is_kernel_exact = true) { // types typedef typename K::FT FT; typedef typename K::Line_3 Line; typedef typename K::Point_3 Point; typedef typename K::Segment_3 Segment; typedef typename K::Ray_3 Ray; typedef typename K::Line_3 Line; typedef typename K::Triangle_3 Triangle; /* ------------------------------------- // Test data is something like that (in t supporting plane) // Triangle is (p1,p2,p3) // // +E +1 // / \ // +C 6+ +8 +4 +B // / 9++7 \ // 3+-------+5--+2 // // +F +A ------------------------------------- */ Point p1(FT(1.), FT(0.), FT(0.)); Point p2(FT(0.), FT(1.), FT(0.)); Point p3(FT(0.), FT(0.), FT(1.)); Triangle t(p1,p2,p3); // Edges of t Segment s12(p1,p2); Segment s21(p2,p1); Segment s13(p1,p3); Segment s23(p2,p3); Segment s32(p3,p2); Segment s31(p3,p1); bool b = test_aux(is_kernel_exact,t,s12,"t-s12",s12); b &= test_aux(is_kernel_exact,t,s21,"t-s21",s21); b &= test_aux(is_kernel_exact,t,s13,"t-s13",s13); b &= test_aux(is_kernel_exact,t,s23,"t-s23",s23); // Inside points Point p4(FT(0.5), FT(0.5), FT(0.)); Point p5(FT(0.), FT(0.75), FT(0.25)); Point p6(FT(0.5), FT(0.), FT(0.5)); Point p7(FT(0.25), FT(0.625), FT(0.125)); Point p8(FT(0.5), FT(0.25), FT(0.25)); Segment s14(p1,p4); Segment s41(p4,p1); Segment s24(p2,p4); Segment s42(p4,p2); Segment s15(p1,p5); Segment s25(p2,p5); Segment s34(p3,p4); Segment s35(p3,p5); Segment s36(p3,p6); Segment s45(p4,p5); Segment s16(p1,p6); Segment s26(p2,p6); Segment s62(p6,p2); Segment s46(p4,p6); Segment s48(p4,p8); Segment s56(p5,p6); Segment s65(p6,p5); Segment s64(p6,p4); Segment s17(p1,p7); Segment s67(p6,p7); Segment s68(p6,p8); Segment s86(p8,p6); Segment s78(p7,p8); Segment s87(p8,p7); b &= test_aux(is_kernel_exact,t,s14,"t-s14",s14); b &= test_aux(is_kernel_exact,t,s41,"t-s41",s41); b &= test_aux(is_kernel_exact,t,s24,"t-s24",s24); b &= test_aux(is_kernel_exact,t,s42,"t-s42",s42); b &= test_aux(is_kernel_exact,t,s15,"t-s15",s15); b &= test_aux(is_kernel_exact,t,s25,"t-s25",s25); b &= test_aux(is_kernel_exact,t,s34,"t-s34",s34); b &= test_aux(is_kernel_exact,t,s35,"t-s35",s35); b &= test_aux(is_kernel_exact,t,s36,"t-s36",s36); b &= test_aux(is_kernel_exact,t,s45,"t-s45",s45); b &= test_aux(is_kernel_exact,t,s16,"t-s16",s16); b &= test_aux(is_kernel_exact,t,s26,"t-s26",s26); b &= test_aux(is_kernel_exact,t,s62,"t-s62",s62); b &= test_aux(is_kernel_exact,t,s46,"t-s46",s46); b &= test_aux(is_kernel_exact,t,s65,"t-s65",s65); b &= test_aux(is_kernel_exact,t,s64,"t-s64",s64); b &= test_aux(is_kernel_exact,t,s48,"t-s48",s48); b &= test_aux(is_kernel_exact,t,s56,"t-s56",s56); b &= test_aux(is_kernel_exact,t,s17,"t-t17",s17); b &= test_aux(is_kernel_exact,t,s67,"t-t67",s67); b &= test_aux(is_kernel_exact,t,s68,"t-s68",s68); b &= test_aux(is_kernel_exact,t,s86,"t-s86",s86); b &= test_aux(is_kernel_exact,t,s78,"t-t78",s78); b &= test_aux(is_kernel_exact,t,s87,"t-t87",s87); // Outside points (in triangle plane) Point pA(FT(-0.5), FT(1.), FT(0.5)); Point pB(FT(0.5), FT(1.), FT(-0.5)); Point pC(FT(0.5), FT(-0.5), FT(1.)); Point pE(FT(1.), FT(-1.), FT(1.)); Point pF(FT(-1.), FT(0.), FT(2.)); Segment sAB(pA,pB); Segment sBC(pB,pC); Segment s2E(p2,pE); Segment sE2(pE,p2); Segment s2A(p2,pA); Segment s6E(p6,pE); Segment sB8(pB,p8); Segment sC8(pC,p8); Segment s8C(p8,pC); Segment s1F(p1,pF); Segment sF6(pF,p6); b &= test_aux(is_kernel_exact,t,sAB,"t-sAB",p2); b &= test_aux(is_kernel_exact,t,sBC,"t-sBC",s46); b &= test_aux(is_kernel_exact,t,s2E,"t-s2E",s26); b &= test_aux(is_kernel_exact,t,sE2,"t-sE2",s62); b &= test_aux(is_kernel_exact,t,s2A,"t-s2A",p2); b &= test_aux(is_kernel_exact,t,s6E,"t-s6E",p6); b &= test_aux(is_kernel_exact,t,sB8,"t-sB8",s48); b &= test_aux(is_kernel_exact,t,sC8,"t-sC8",s68); b &= test_aux(is_kernel_exact,t,s8C,"t-s8C",s86); b &= test_aux(is_kernel_exact,t,s1F,"t-s1F",s13); b &= test_aux(is_kernel_exact,t,sF6,"t-sF6",s36); // Outside triangle plane Point pa(FT(0.), FT(0.), FT(0.)); Point pb(FT(2.), FT(0.), FT(0.)); Point pc(FT(1.), FT(0.), FT(1.)); Point pe(FT(1.), FT(0.5), FT(0.5)); Segment sab(pa,pb); Segment sac(pa,pc); Segment sae(pa,pe); Segment sa8(pa,p8); Segment sb2(pb,p2); b &= test_aux(is_kernel_exact,t,sab,"t-sab",p1); b &= test_aux(is_kernel_exact,t,sac,"t-sac",p6); b &= test_aux(is_kernel_exact,t,sae,"t-sae",p8); b &= test_aux(is_kernel_exact,t,sa8,"t-sa8",p8); b &= test_aux(is_kernel_exact,t,sb2,"t-sb2",p2); // ----------------------------------- // ray queries // ----------------------------------- // Edges of t Ray r12(p1,p2); Ray r21(p2,p1); Ray r13(p1,p3); Ray r23(p2,p3); b &= test_aux(is_kernel_exact,t,r12,"t-r12",s12); b &= test_aux(is_kernel_exact,t,r21,"t-r21",s21); b &= test_aux(is_kernel_exact,t,r13,"t-r13",s13); b &= test_aux(is_kernel_exact,t,r23,"t-r23",s23); // In triangle Point p9_(FT(0.), FT(0.5), FT(0.5)); Point p9(FT(0.25), FT(0.375), FT(0.375)); Ray r14(p1,p4); Ray r41(p4,p1); Ray r24(p2,p4); Ray r42(p4,p2); Ray r15(p1,p5); Ray r25(p2,p5); Ray r34(p3,p4); Ray r35(p3,p5); Ray r36(p3,p6); Ray r45(p4,p5); Ray r16(p1,p6); Ray r26(p2,p6); Ray r62(p6,p2); Ray r46(p4,p6); Ray r48(p4,p8); Ray r56(p5,p6); Ray r47(p4,p7); Ray r89(p8,p9); Ray r86(p8,p6); Ray r68(p6,p8); Segment r89_res(p8,p9_); b &= test_aux(is_kernel_exact,t,r14,"t-r14",s12); b &= test_aux(is_kernel_exact,t,r41,"t-r41",s41); b &= test_aux(is_kernel_exact,t,r24,"t-r24",s21); b &= test_aux(is_kernel_exact,t,r42,"t-r42",s42); b &= test_aux(is_kernel_exact,t,r15,"t-r15",s15); b &= test_aux(is_kernel_exact,t,r25,"t-r25",s23); b &= test_aux(is_kernel_exact,t,r34,"t-r34",s34); b &= test_aux(is_kernel_exact,t,r35,"t-r35",s32); b &= test_aux(is_kernel_exact,t,r36,"t-r36",s31); b &= test_aux(is_kernel_exact,t,r45,"t-r45",s45); b &= test_aux(is_kernel_exact,t,r16,"t-r16",s13); b &= test_aux(is_kernel_exact,t,r26,"t-r26",s26); b &= test_aux(is_kernel_exact,t,r62,"t-r62",s62); b &= test_aux(is_kernel_exact,t,r46,"t-r46",s46); b &= test_aux(is_kernel_exact,t,r48,"t-r48",s46); b &= test_aux(is_kernel_exact,t,r56,"t-r56",s56); b &= test_aux(is_kernel_exact,t,r47,"t-r47",s45); b &= test_aux(is_kernel_exact,t,r89,"t-t89",r89_res); b &= test_aux(is_kernel_exact,t,r68,"t-r68",s64); b &= test_aux(is_kernel_exact,t,r86,"t-r86",s86); // Outside points (in triangre prane) Ray rAB(pA,pB); Ray rBC(pB,pC); Ray r2E(p2,pE); Ray rE2(pE,p2); Ray r2A(p2,pA); Ray r6E(p6,pE); Ray rB8(pB,p8); Ray rC8(pC,p8); Ray r8C(p8,pC); Ray r1F(p1,pF); Ray rF6(pF,p6); b &= test_aux(is_kernel_exact,t,rAB,"t-rAB",p2); b &= test_aux(is_kernel_exact,t,rBC,"t-rBC",s46); b &= test_aux(is_kernel_exact,t,r2E,"t-r2E",s26); b &= test_aux(is_kernel_exact,t,rE2,"t-rE2",s62); b &= test_aux(is_kernel_exact,t,r2A,"t-r2A",p2); b &= test_aux(is_kernel_exact,t,r6E,"t-r6E",p6); b &= test_aux(is_kernel_exact,t,rB8,"t-rB8",s46); b &= test_aux(is_kernel_exact,t,rC8,"t-rC8",s64); b &= test_aux(is_kernel_exact,t,r8C,"t-r8C",s86); b &= test_aux(is_kernel_exact,t,r1F,"t-r1F",s13); b &= test_aux(is_kernel_exact,t,rF6,"t-rF6",s31); // Outside triangle plane Ray rab(pa,pb); Ray rac(pa,pc); Ray rae(pa,pe); Ray ra8(pa,p8); Ray rb2(pb,p2); b &= test_aux(is_kernel_exact,t,rab,"t-rab",p1); b &= test_aux(is_kernel_exact,t,rac,"t-rac",p6); b &= test_aux(is_kernel_exact,t,rae,"t-rae",p8); b &= test_aux(is_kernel_exact,t,ra8,"t-ra8",p8); b &= test_aux(is_kernel_exact,t,rb2,"t-rb2",p2); // ----------------------------------- // Line queries // ----------------------------------- // Edges of t Line l12(p1,p2); Line l21(p2,p1); Line l13(p1,p3); Line l23(p2,p3); b &= test_aux(is_kernel_exact,t,l12,"t-l12",s12); b &= test_aux(is_kernel_exact,t,l21,"t-l21",s21); b &= test_aux(is_kernel_exact,t,l13,"t-l13",s13); b &= test_aux(is_kernel_exact,t,l23,"t-l23",s23); // In triangle Line l14(p1,p4); Line l41(p4,p1); Line l24(p2,p4); Line l42(p4,p2); Line l15(p1,p5); Line l25(p2,p5); Line l34(p3,p4); Line l35(p3,p5); Line l36(p3,p6); Line l45(p4,p5); Line l16(p1,p6); Line l26(p2,p6); Line l62(p6,p2); Line l46(p4,p6); Line l48(p4,p8); Line l56(p5,p6); Line l47(p4,p7); Line l89(p8,p9); Line l86(p8,p6); Line l68(p6,p8); Segment l89_res(p1,p9_); b &= test_aux(is_kernel_exact,t,l14,"t-l14",s12); b &= test_aux(is_kernel_exact,t,l41,"t-l41",s21); b &= test_aux(is_kernel_exact,t,l24,"t-l24",s21); b &= test_aux(is_kernel_exact,t,l42,"t-l42",s12); b &= test_aux(is_kernel_exact,t,l15,"t-l15",s15); b &= test_aux(is_kernel_exact,t,l25,"t-l25",s23); b &= test_aux(is_kernel_exact,t,l34,"t-l34",s34); b &= test_aux(is_kernel_exact,t,l35,"t-l35",s32); b &= test_aux(is_kernel_exact,t,l36,"t-l36",s31); b &= test_aux(is_kernel_exact,t,l45,"t-l45",s45); b &= test_aux(is_kernel_exact,t,l16,"t-l16",s13); b &= test_aux(is_kernel_exact,t,l26,"t-l26",s26); b &= test_aux(is_kernel_exact,t,l62,"t-l62",s62); b &= test_aux(is_kernel_exact,t,l46,"t-l46",s46); b &= test_aux(is_kernel_exact,t,l48,"t-l48",s46); b &= test_aux(is_kernel_exact,t,l56,"t-l56",s56); b &= test_aux(is_kernel_exact,t,l47,"t-l47",s45); b &= test_aux(is_kernel_exact,t,l89,"t-t89",l89_res); b &= test_aux(is_kernel_exact,t,l68,"t-l68",s64); b &= test_aux(is_kernel_exact,t,l86,"t-l86",s46); // Outside points (in triangle plane) Line lAB(pA,pB); Line lBC(pB,pC); Line l2E(p2,pE); Line lE2(pE,p2); Line l2A(p2,pA); Line l6E(p6,pE); Line lB8(pB,p8); Line lC8(pC,p8); Line l8C(p8,pC); Line l1F(p1,pF); Line lF6(pF,p6); b &= test_aux(is_kernel_exact,t,lAB,"t-lAB",p2); b &= test_aux(is_kernel_exact,t,lBC,"t-lBC",s46); b &= test_aux(is_kernel_exact,t,l2E,"t-l2E",s26); b &= test_aux(is_kernel_exact,t,lE2,"t-lE2",s62); b &= test_aux(is_kernel_exact,t,l2A,"t-l2A",p2); b &= test_aux(is_kernel_exact,t,l6E,"t-l6E",s26); b &= test_aux(is_kernel_exact,t,lB8,"t-lB8",s46); b &= test_aux(is_kernel_exact,t,lC8,"t-lC8",s64); b &= test_aux(is_kernel_exact,t,l8C,"t-l8C",s46); b &= test_aux(is_kernel_exact,t,l1F,"t-l1F",s13); b &= test_aux(is_kernel_exact,t,lF6,"t-lF6",s31); // Outside triangle plane Line lab(pa,pb); Line lac(pa,pc); Line lae(pa,pe); Line la8(pa,p8); Line lb2(pb,p2); b &= test_aux(is_kernel_exact,t,lab,"t-lab",p1); b &= test_aux(is_kernel_exact,t,lac,"t-lac",p6); b &= test_aux(is_kernel_exact,t,lae,"t-lae",p8); b &= test_aux(is_kernel_exact,t,la8,"t-la8",p8); b &= test_aux(is_kernel_exact,t,lb2,"t-lb2",p2); return b; }
/* * Execute the IFGT instruction */ void op_ifgt() { if (popInt() > 0) { pc += s16(1); } else { pc += 3; } }
/* * Execute the JSR instruction */ void op_jsr() { pushInt(pc + 3); pc += s16(1); }
/* * Execute the IFLE instruction */ void op_ifle() { if (popInt() <= 0) { pc += s16(1); } else { pc += 3; } }