本文整理汇总了C++中IAttachmentManager类的典型用法代码示例。如果您正苦于以下问题:C++ IAttachmentManager类的具体用法?C++ IAttachmentManager怎么用?C++ IAttachmentManager使用的例子?那么, 这里精选的类代码示例或许可以为您提供帮助。
在下文中一共展示了IAttachmentManager类的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1:
//------------------------------------------------------------------------
IParticleEmitter *CItem::GetEffectEmitter(uint32 id) const
{
TEffectInfoMap::const_iterator it = m_effects.find(id);
if (it == m_effects.end())
return 0;
const SEffectInfo &info = it->second;
SEntitySlotInfo slotInfo;
if (GetEntity()->GetSlotInfo(info.slot, slotInfo) && slotInfo.pParticleEmitter)
return slotInfo.pParticleEmitter;
if (GetEntity()->GetSlotInfo(info.characterSlot, slotInfo) && slotInfo.pCharacter)
{
ICharacterInstance *pCharacter = slotInfo.pCharacter;
IAttachmentManager *pAttachmentManager = pCharacter->GetIAttachmentManager();
IAttachment *pAttachment = pAttachmentManager->GetInterfaceByName(info.helper.c_str());
if (pAttachment)
{
CEffectAttachment *pEffectAttachment = static_cast<CEffectAttachment *>(pAttachment->GetIAttachmentObject());
if (!pEffectAttachment)
{
// commenting out for silencer functionality
//GameWarning("CItem::GetEffectEmitter: no effect attachment on %s (helper %s)", GetEntity()->GetName(), info.helper.c_str());
return 0;
}
return pEffectAttachment->GetEmitter();
}
}
return 0;
}
示例2: CRY_ASSERT
void CEffectsController::DetachEffect(const TAttachedEffectId effectId)
{
CRY_ASSERT(m_pOwnerEntity);
TAttachedEffects::iterator effectIt = std::find(m_attachedEffects.begin(), m_attachedEffects.end(), effectId);
if (effectIt != m_attachedEffects.end())
{
const SEffectInfo& effectInfo = *effectIt;
if (effectInfo.entityEffectSlot >= 0)
{
m_pOwnerEntity->FreeSlot(effectInfo.entityEffectSlot);
}
else
{
ICharacterInstance *pCharacter = m_pOwnerEntity->GetCharacter(effectInfo.characterEffectSlot);
if (pCharacter)
{
IAttachmentManager *pAttachmentManager = pCharacter->GetIAttachmentManager();
IAttachment *pAttachment = pAttachmentManager->GetInterfaceByName(effectInfo.helperName.c_str());
if(pAttachment)
{
pAttachment->ClearBinding();
}
}
}
m_attachedEffects.erase(effectIt);
}
}
示例3: GetEntity
//------------------------------------------------------------------------
bool CItem::CreateCharacterAttachment(int slot, const char *name, int type, const char *bone)
{
ICharacterInstance *pCharacter = GetEntity()->GetCharacter(slot);
if(!pCharacter)
return false;
IAttachmentManager *pAttachmentManager = pCharacter->GetIAttachmentManager();
IAttachment *pAttachment = pAttachmentManager->GetInterfaceByName(name);
if(pAttachment)
{
// GameWarning("Item '%s' trying to create attachment '%s' which already exists!", GetEntity()->GetName(), name);
return false;
}
pAttachment = pAttachmentManager->CreateAttachment(name, type, bone);
if(!pAttachment)
{
if(type == CA_BONE)
GameWarning("Item '%s' failed to create attachment '%s' on bone '%s'!", GetEntity()->GetName(), name, bone);
return false;
}
return true;
}
示例4: CreatePlayerBoneAttachments
//======================================================================
void CWeaponAttachmentManager::CreatePlayerBoneAttachments()
{
if (ICharacterInstance* pCharInstance = m_pOwner->GetEntity()->GetCharacter(0))
{
IAttachmentManager* pAttachmentManager = pCharInstance->GetIAttachmentManager();
IAttachment *pAttachment = NULL;
for(int i=0; i<MAX_WEAPON_ATTACHMENTS; i++)
{
pAttachment = pAttachmentManager->GetInterfaceByName(gAttachmentTable[i]);
if(!pAttachment)
{
//Attachment doesn't exist, create it
pAttachment = pAttachmentManager->CreateAttachment(gAttachmentTable[i],CA_BONE,gBoneTable[i]);
if(pAttachment)
{
m_boneAttachmentMap.insert(TBoneAttachmentMap::value_type(gAttachmentTable[i],0));
if(pAttachment && !gOffsetTable[i].IsZero())
{
pAttachment->SetAttAbsoluteDefault( QuatT(gRotationTable[i],gOffsetTable[i]) );
pAttachment->ProjectAttachment();
}
}
}
}
}
}
示例5: c4FrontPos
//=======================================================================
void CWeaponAttachmentManager::CreatePlayerProjectedAttachments()
{
Vec3 c4FrontPos(-0.0105f,0.2233f,1.297f),c4BackPos(0.00281f,-0.2493f,1.325f);
Quat c4FrontRot(-0.0368f,-0.0278f,0.0783f,-0.9958f),c4BackRot(1,0,0,0);
//Creates on init c4 face attachments
if (ICharacterInstance* pCharInstance = m_pOwner->GetEntity()->GetCharacter(0))
{
IAttachmentManager* pAttachmentManager = pCharInstance->GetIAttachmentManager();
IAttachment *pAttachment = NULL;
pAttachment = pAttachmentManager->GetInterfaceByName("c4_front");
if(!pAttachment)
{
//Attachment doesn't exist, create it
pAttachment= pAttachmentManager->CreateAttachment("c4_front",CA_FACE,0);
if(pAttachment)
{
pAttachment->SetAttAbsoluteDefault( QuatT(c4FrontRot,c4FrontPos) );
pAttachment->ProjectAttachment();
}
}
pAttachment = NULL;
pAttachment = pAttachmentManager->GetInterfaceByName("c4_back");
if(!pAttachment)
{
//Attachment doesn't exist, create it
pAttachment= pAttachmentManager->CreateAttachment("c4_back",CA_FACE,0);
if(pAttachment)
{
pAttachment->SetAttAbsoluteDefault( QuatT(c4BackRot,c4BackPos) );
pAttachment->ProjectAttachment();
}
}
}
}
示例6: SetMaterialOnEntity
//--------------------------------------------------------------------------------------------------
// Name: SetMaterialOnEntity
// Desc: Sets material on entity
//--------------------------------------------------------------------------------------------------
void CGameEffect::SetMaterialOnEntity(IMaterial* pMaterial,EntityId entityId,PodArray<ItemString>* bodyAttachmentNameArray)
{
if(pMaterial && bodyAttachmentNameArray)
{
IEntity* pEntity = gEnv->pEntitySystem->GetEntity(entityId);
if(pEntity)
{
SEntitySlotInfo slotInfo;
bool gotSlotInfo = pEntity->GetSlotInfo(0, slotInfo);
if(gotSlotInfo && slotInfo.pCharacter)
{
IAttachmentManager* pAttachmentManager = slotInfo.pCharacter->GetIAttachmentManager();
if(pAttachmentManager)
{
int attachmentCount = bodyAttachmentNameArray->size();
for(int i=0; i<attachmentCount; i++)
{
IAttachment* attachment = pAttachmentManager->GetInterfaceByName(((*bodyAttachmentNameArray)[i]).c_str());
if(attachment)
{
IAttachmentObject* attachmentObj = attachment->GetIAttachmentObject();
if(attachmentObj)
{
attachmentObj->SetReplacementMaterial(pMaterial);
}
}
}
}
}
}
}
}//-------------------------------------------------------------------------------------------------
示例7: GetEntity
void CAICorpse::AboutToBeRemoved()
{
IItemSystem* pItemSystem = g_pGame->GetIGameFramework()->GetIItemSystem();
ICharacterInstance* pCharacter = GetEntity()->GetCharacter(0);
IAttachmentManager* pAttachmentManager = (pCharacter != NULL) ? pCharacter->GetIAttachmentManager() : NULL;
for (uint32 i = 0; i < (uint32)m_attachedItemsInfo.size(); ++i)
{
AttachedItem& attachedItem = m_attachedItemsInfo[i];
IItem* pItem = pItemSystem->GetItem( attachedItem.id );
if((pItem != NULL) && ShouldDropOnCorpseRemoval( pItem->GetEntity()->GetClass() ))
{
IAttachment* pAttachment = (pAttachmentManager != NULL) ? pAttachmentManager->GetInterfaceByName( attachedItem.attachmentName.c_str() ) : NULL;
if(pAttachment != NULL)
{
pAttachment->ClearBinding();
}
pItem->Drop( 1.0f, false, true );
pItem->GetEntity()->SetFlags( pItem->GetEntity()->GetFlags() & ~ENTITY_FLAG_NO_SAVE );
attachedItem.id = 0;
}
}
}
示例8: GetActor
int CScriptBind_Actor::GetClosestAttachment(IFunctionHandler *pH, int characterSlot, Vec3 testPos, float maxDistance, const char* suffix)
{
CActor *pActor = GetActor(pH);
if (!pActor)
return pH->EndFunction();
IEntity* pEntity = pActor->GetEntity();
ICharacterInstance* pChar = pEntity->GetCharacter(characterSlot);
if (!pChar)
return pH->EndFunction();
//fallback: use nearest attachment
float minDiff = maxDistance*maxDistance;
IAttachment* pClosestAtt = 0;
IAttachmentManager* pMan = pChar->GetIAttachmentManager();
int count = pMan->GetAttachmentCount();
for (int i=0; i<count; ++i)
{
IAttachment* pAtt = pMan->GetInterfaceByIndex(i);
if (pAtt->IsAttachmentHidden() || !pAtt->GetIAttachmentObject())
continue;
AABB bbox(AABB::CreateTransformedAABB(Matrix34(pAtt->GetAttWorldAbsolute()),pAtt->GetIAttachmentObject()->GetAABB()));
//gEnv->pRenderer->GetIRenderAuxGeom()->DrawAABB(bbox,false,ColorB(255,0,0,100),eBBD_Faceted);
//float diff = (testPos - pAtt->GetWMatrix().GetTranslation()).len2();
float diff((testPos - bbox.GetCenter()).len2());
if (diff < minDiff)
{
//CryLogAlways("%s distance: %.1f", pAtt->GetName(), sqrt(diff));
if (suffix[0] && !strstr(pAtt->GetName(), suffix))
continue;
minDiff = diff;
pClosestAtt = pAtt;
}
}
if (!pClosestAtt)
return pH->EndFunction();
//FIXME FIXME: E3 workaround
char attachmentName[64];
strncpy(attachmentName,pClosestAtt->GetName(),63);
attachmentName[63] = 0;
char *pDotChar = strstr(attachmentName,".");
if (pDotChar)
*pDotChar = 0;
strlwr(attachmentName);
//
return pH->EndFunction(attachmentName);
}
示例9: GetEntity
//------------------------------------------------------------------------
void CItem::DestroyCharacterAttachment(int slot, const char *name)
{
ICharacterInstance *pCharacter = GetEntity()->GetCharacter(slot);
if (!pCharacter)
return;
IAttachmentManager *pAttachmentManager = pCharacter->GetIAttachmentManager();
pAttachmentManager->RemoveAttachmentByName(name);
}
示例10: GetNextCharacterAttachmentName
bool CMFXParticleEffect::AttachToCharacter( IEntity& targetEntity, const SMFXParticleEntry& particleParams, const SMFXRunTimeEffectParams& params, const Vec3& dir, float scale )
{
if (params.partID >= 0)
{
//Assume character is loaded in first slot
//We could iterate through all available slots, but first one should be good enough
ICharacterInstance* pCharacterInstace = targetEntity.GetCharacter(0);
ISkeletonPose* pSkeletonPose = pCharacterInstace ? pCharacterInstace->GetISkeletonPose() : NULL;
if (pSkeletonPose)
{
IDefaultSkeleton& rIDefaultSkeleton = pCharacterInstace->GetIDefaultSkeleton();
//It hit the character, but probably in a physicalized attached part, like armor plates, etc
if (params.partID >= rIDefaultSkeleton.GetJointCount())
{
return false;
}
//It hit some valid joint, create an attachment
const char* boneName = rIDefaultSkeleton.GetJointNameByID(params.partID);
TAttachmentName attachmentName;
GetNextCharacterAttachmentName(attachmentName);
IAttachmentManager* pAttachmentManager = pCharacterInstace->GetIAttachmentManager();
CRY_ASSERT(pAttachmentManager);
//Remove the attachment first (in case was created before)
pAttachmentManager->RemoveAttachmentByName(attachmentName.c_str());
//Create attachment on nearest hit bone
IAttachment* pAttachment = pAttachmentManager->CreateAttachment(attachmentName.c_str(), CA_BONE, boneName, false);
if (pAttachment)
{
//Apply relative offsets
const QuatT boneLocation = pSkeletonPose->GetAbsJointByID(params.partID);
Matrix34 inverseJointTM = targetEntity.GetWorldTM() * Matrix34(boneLocation);
inverseJointTM.Invert();
Vec3 attachmentOffsetPosition = inverseJointTM * params.pos;
Quat attachmentOffsetRotation = Quat(inverseJointTM) * targetEntity.GetRotation();
CRY_ASSERT(attachmentOffsetPosition.IsValid());
//CRY_ASSERT(attachmentOffsetRotation.IsUnit());
pAttachment->SetAttRelativeDefault(QuatT(attachmentOffsetRotation, attachmentOffsetPosition));
//Finally attach the effect
CEffectAttachment* pEffectAttachment = new CEffectAttachment(particleParams.name.c_str(), Vec3(0,0,0), dir, scale);
pAttachment->AddBinding(pEffectAttachment);
return true;
}
}
}
return false;
}
开发者ID:NightOwlsEntertainment,项目名称:PetBox_A_Journey_to_Conquer_Elementary_Algebra,代码行数:55,代码来源:MFXParticleEffect.cpp
示例11: GetScreenAttachment
IAttachment* CKVoltEffect::GetScreenAttachment()
{
IEntity* pEntity = m_ownerActor ? m_ownerActor->GetEntity() : NULL;
ICharacterInstance* pCharacter = pEntity ? pEntity->GetCharacter(0) : NULL;
IAttachmentManager* pAttachmentMan = pCharacter ? pCharacter->GetIAttachmentManager() : NULL;
if(pAttachmentMan)
{
return pAttachmentMan->GetInterfaceByName("#camera");
}
return NULL;
}
示例12: UpdateFPBodyPartsVisibility
void CLocalPlayerComponent::UpdateFPBodyPartsVisibility()
{
if (m_rPlayer.m_stats.isThirdPerson == false)
{
ICharacterInstance *pMainCharacter = m_rPlayer.GetEntity()->GetCharacter(0);
IAttachmentManager *pAttachmentManager = pMainCharacter ? pMainCharacter->GetIAttachmentManager() : NULL;
if (pAttachmentManager)
{
CRY_ASSERT(m_rPlayer.HasBoneID(BONE_CALF_L));
CRY_ASSERT(m_rPlayer.HasBoneID(BONE_CALF_R));
const CCamera& camera = gEnv->p3DEngine->GetRenderingCamera();
const Matrix34& playerWorldTM = m_rPlayer.GetEntity()->GetWorldTM();
bool visible = true;
if (m_rPlayer.m_linkStats.linkID == 0)
{
//volatile static float radius = 0.475f;
const float radius = 0.16f;
const Sphere calfSphereL(playerWorldTM.TransformPoint(m_rPlayer.GetBoneTransform(BONE_CALF_L).t), radius);
const Sphere calfSpehreR(playerWorldTM.TransformPoint(m_rPlayer.GetBoneTransform(BONE_CALF_R).t), radius);
visible = camera.IsSphereVisible_F(calfSphereL) || camera.IsSphereVisible_F(calfSpehreR);
}
//const float white[4] = {1.0f, 1.0f, 1.0f, 1.0f};
//gEnv->pRenderer->Draw2dLabel(50.0f, 50.0f, 2.0f, white, false, visible ? "Rendering complete FP body" : "Rendering only arms");
//Early out if no change
if (m_fpCompleteBodyVisible == visible)
return;
//Hide/Unhide certain parts depending on visibility
const int kNumParstToToggle = 2;
const char *tooglePartsTable[kNumParstToToggle] = {"lower_body", "upper_body"};
for (int i=0; i<kNumParstToToggle; i++)
{
IAttachment* pAttachment = pAttachmentManager->GetInterfaceByName(tooglePartsTable[i]);
if (pAttachment)
{
pAttachment->HideAttachment(!visible);
pAttachment->HideInShadow(1);
}
}
m_fpCompleteBodyVisible = visible;
}
}
}
示例13: GameWarning
//------------------------------------------------------------------------
IAttachment * CItem::GetCharacterAttachment(ICharacterInstance * pCharacter, const char *name) const
{
if(pCharacter)
{
IAttachmentManager *pAttachmentManager = pCharacter->GetIAttachmentManager();
if (IAttachment * pAttachment = pAttachmentManager->GetInterfaceByName(name))
{
return pAttachment;
}
GameWarning("Item '%s' trying to get attachment '%s' which does not exist!", GetEntity()->GetName(), name);
}
return NULL;
}
示例14: InitAttachmentIndexArray
//--------------------------------------------------------------------------------------------------
// Name: InitAttachmentIndexArray
// Desc: Initialises attachment index array
//--------------------------------------------------------------------------------------------------
void CGameEffect::InitAttachmentIndexArray(PodArray<int> *attachmentIndexArray,PodArray<ItemString>* pAttachmentNameArray,EntityId entityId) const
{
if(attachmentIndexArray && pAttachmentNameArray && (entityId!=0))
{
if(attachmentIndexArray->size() == 0)
{
// Store attachment index array
const int attachmentNameCount = pAttachmentNameArray->size();
SEntitySlotInfo slotInfo;
IEntity* pEntity = gEnv->pEntitySystem->GetEntity(entityId);
if(pEntity)
{
bool gotEntitySlotInfo = pEntity->GetSlotInfo(0, slotInfo);
if(gotEntitySlotInfo)
{
attachmentIndexArray->reserve(attachmentNameCount);
if(slotInfo.pCharacter)
{
IAttachmentManager* attachmentManager = slotInfo.pCharacter->GetIAttachmentManager();
if(attachmentManager)
{
const int attachmentCount = attachmentManager->GetAttachmentCount();
for(int n=0; n<attachmentNameCount; n++)
{
for(int a=0; a<attachmentCount; a++)
{
IAttachment* attachment = attachmentManager->GetInterfaceByIndex(a);
if(attachment)
{
const char* currentAttachmentName = attachment->GetName();
if(strcmp(currentAttachmentName,(*pAttachmentNameArray)[n].c_str())==0)
{
attachmentIndexArray->push_back(a);
break;
}
}
}
}
}
}
}
}
}
}
}//-------------------------------------------------------------------------------------------------
示例15: GetAttachment
IAttachment* GetAttachment(SActivationInfo* pActInfo)
{
IAttachment *pAttachment = NULL;
if (pActInfo->pEntity)
{
int slot = GetPortInt(pActInfo, eIP_CharacterSlot);
ICharacterInstance *pCharacter = pActInfo->pEntity->GetCharacter(slot);
if (pCharacter)
{
const string &boneName = GetPortString(pActInfo, eIP_BoneName);
IAttachmentManager *pAttachmentManager = pCharacter->GetIAttachmentManager();
pAttachment = pAttachmentManager->GetInterfaceByName(boneName);
}
}
return pAttachment;
}