Thanks for the code, but unfortunately I need a way to get the attachment without using the beams attachment point stuff.
On Thu, Aug 18, 2011 at 11:13 PM, Michael Kramer <[email protected] > wrote: > When I drew a beam for one of my weapons I used the following: > > pBeam->PointEntInit( endPos, this ); > pBeam->SetEndAttachment( 1 ); > pBeam->SetWidth( width / 4.0f ); > pBeam->SetEndWidth( width ); > > However this was serverside code, But I did then have it also spark on the > muzzle, so I did: > CBaseViewModel *pViewModel = pOwner->GetViewModel(); > pViewModel->GetAttachment(LookupAttachment("muzzle"),origin,angles); > g_pEffects->Sparks(origin); > > > Below is the entire drawBeam function I used: > > CBasePlayer *pOwner = ToBasePlayer( GetOwner() ); > CBaseViewModel *pViewModel = pOwner->GetViewModel(); > > if ( pOwner == NULL ) > return; > > //Check to store off our view model index > if ( pViewModel == NULL ) > { > CBaseViewModel *vm = pOwner->GetViewModel(); > if ( vm ) > { > m_hViewModel.Set( vm ); > } > } > #ifndef CLIENT_DLL > //Draw a tracer down the middle > UTIL_Tracer( startPos, endPos, 0, TRACER_DONT_USE_ATTACHMENT, 6500, true, > "GaussTracer" ); > > //Draw the main beam shaft > CBeam *pBeam = CBeam::BeamCreate( GAUSS_BEAM_SPRITE, width ); > > if ( useMuzzle ) > { > pBeam->PointEntInit( endPos, this ); > pBeam->SetEndAttachment( 1 ); > pBeam->SetWidth( width / 4.0f ); > pBeam->SetEndWidth( width ); > } > > else > { > pBeam->SetStartPos( startPos ); > pBeam->SetEndPos( endPos ); > pBeam->SetWidth( width ); > pBeam->SetEndWidth( width / 4.0f ); > } > > pBeam->SetBrightness( 255 ); > pBeam->SetColor( 255, 145+random->RandomInt( -16, 16 ), 0 ); > pBeam->RelinkBeam(); > pBeam->LiveForTime( 5.1f ); > > > On Thu, Aug 18, 2011 at 11:11 PM, Ryan Sheffer <[email protected]>wrote: > >> Hey coders! >> >> I came across a nasty little issue and I thought maybe somebody has come >> across this before. >> I am trying to create a client side beam from the muzzle of the players >> view model to where the bullet impacts, but I cannot get the attachment >> position for the muzzle on the view model. >> >> Here is the code I am using for getting the attachment: >> >> int attachment = pEntity->LookupAttachment( "muzzle" ); >> pEntity->GetAttachment( attachment, vecAttachment, angAttachment ); >> >> pEntity is the view model. >> This is the same way I saw it done on the physcannons client side code. >> The position it gets appears to be somewhere close to the origin of the >> map but the coordinates are not exactly 0, 0, 0. One way to fix the position >> is to give myself a weapon_physcannon and then when I switch back to my gun >> the attachment position is where it should be, from the muzzle. I don't see >> anything special in the weapon_physcannon's code so I am baffled. >> >> Some things to note: >> - This is a client side entity, client side code >> - The attachment on the model looks fine in the model viewer >> >> So any help would be wonderful, I am just digging away at the debugging >> trying to find the issue but nothing sticks out, only the fact that having a >> physcannon at the same time fixes the problem. >> >> Here is the full code for the beam just in case: >> >> void C_WeaponSonicRifle::CreateShotBeam(void) >> { >> CBasePlayer *pOwner = ToBasePlayer( GetOwner() ); >> >> if ( pOwner == NULL ) >> return; >> >> BeamInfo_t beamInfo; >> C_BaseAnimating *pEntity = NULL; >> trace_t tr; >> >> Vector vecAttachment, vecCrosshair, vecDir; >> QAngle angAttachment; >> >> if ( IsCarriedByLocalPlayer() && !::input->CAM_IsThirdPerson() ) >> { >> pEntity = pOwner->GetViewModel(); >> vecDir = pOwner->GetAutoaimVector(AUTOAIM_5DEGREES); >> } >> else >> { >> pEntity = this; >> vecDir = pOwner->GetAutoaimVector(AUTOAIM_5DEGREES); >> } >> >> pEntity->PushAllowBoneAccess( true, true, "sonic rifle" ); >> >> int attachment = pEntity->LookupAttachment( "muzzle" ); >> pEntity->GetAttachment( attachment, vecAttachment, angAttachment ); >> >> pEntity->PopBoneAccess( "sonic rifle" ); >> >> vecCrosshair = pOwner->Weapon_ShootPosition(); >> UTIL_TraceLine(vecCrosshair, vecCrosshair + (vecDir * >> MAX_TRACE_LENGTH), MASK_SONICBEAMS, pOwner, COLLISION_GROUP_NONE, &tr); >> >> beamInfo.m_pStartEnt = NULL; >> beamInfo.m_pEndEnt = NULL; >> >> //beamInfo.m_nType = TE_BEAMPOINTS; >> beamInfo.m_vecStart = tr.endpos; >> beamInfo.m_vecEnd = vecAttachment; >> >> beamInfo.m_nStartAttachment = NULL; >> beamInfo.m_nEndAttachment = NULL; >> >> beamInfo.m_pszModelName = "sprites/laserbeam.vmt"; >> beamInfo.m_flHaloScale = 0.0f; >> beamInfo.m_flLife = 2.5f; >> >> beamInfo.m_flWidth = 3.0f; >> beamInfo.m_flEndWidth = 3.0f; >> >> beamInfo.m_flFadeLength = 0.0f; >> beamInfo.m_flAmplitude = 0; >> >> beamInfo.m_flBrightness = 255.0; >> >> beamInfo.m_flSpeed = 1.0f; >> beamInfo.m_nStartFrame = 0.0; >> beamInfo.m_flFrameRate = 30.0; >> >> beamInfo.m_flRed = 255; >> beamInfo.m_flGreen = 255; >> beamInfo.m_flBlue = 255; >> >> beamInfo.m_nSegments = 4; >> beamInfo.m_bRenderable = true; >> beamInfo.m_nFlags = (FBEAM_SHADEIN | FBEAM_SHADEOUT | FBEAM_FADEOUT); >> >> beams->CreateBeamPoints( beamInfo ); >> } >> >> Thanks guys :) >> >> -- >> ~Ryan ( skidz ) >> >> _______________________________________________ >> To unsubscribe, edit your list preferences, or view the list archives, >> please visit: >> http://list.valvesoftware.com/mailman/listinfo/hlcoders >> >> >> > > _______________________________________________ > To unsubscribe, edit your list preferences, or view the list archives, > please visit: > http://list.valvesoftware.com/mailman/listinfo/hlcoders > > > -- ~Ryan ( skidz )
_______________________________________________ To unsubscribe, edit your list preferences, or view the list archives, please visit: http://list.valvesoftware.com/mailman/listinfo/hlcoders

