本文整理汇总了C++中SharedPtr::AddComponent方法的典型用法代码示例。如果您正苦于以下问题:C++ SharedPtr::AddComponent方法的具体用法?C++ SharedPtr::AddComponent怎么用?C++ SharedPtr::AddComponent使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类SharedPtr
的用法示例。
在下文中一共展示了SharedPtr::AddComponent方法的4个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: HandleNodeCollision
void TerrySpawner::HandleNodeCollision(StringHash eventType, VariantMap& eventData)
{
using namespace NodeCollision;
RigidBody* rb = static_cast<RigidBody*>(eventData[P_BODY].GetPtr());
Node* noed = rb->GetNode();
if (!noed->GetVar("canAttack").GetBool())
{
return;
}
if (noed->GetComponent<Blind>())
{
return;
}
noed->SetVar("canAttack", false);
SharedPtr<Node> otherNode = SharedPtr<Node>(static_cast<Node*>(eventData[P_OTHERNODE].GetPtr()));
if (!otherNode->HasComponent<Health>())
{
return;
}
bool enemy = false;
if (otherNode->GetVar("npcType").GetInt() == 0)//hero
{
enemy = true;
}
if (enemy || noed->HasComponent<Enchanted>())
{
int healthMod = noed->GetVar("attack").GetInt();
if (otherNode->HasComponent<Armor>())
{
healthMod = noed->GetVar("attack").GetInt() - otherNode->GetComponent<Armor>()->armor_;
if (healthMod < 0)
{
healthMod = 0;
}
}
otherNode->GetComponent<Health>()->ModifyHealth(healthMod, -1, false);
if (otherNode->GetComponent<Health>()->health_ <= 0)
{
if (!enemy && noed->HasComponent<Enchanted>())
{
otherNode->GetComponent<Health>()->ModifyHealth(100, 0, false);
otherNode->GetScene()->GetComponent<TerrySpawner>()->RespawnTerry(otherNode);
}
else if (otherNode->GetName() != "tent")
{
if (!otherNode->HasComponent<Dead>())
{
otherNode->AddComponent(new Dead(context_, main_, -1.0f), 0, LOCAL);
}
}
else
{
SpriteSheetPlayer* ssp = main_->mySceneNode_->GetComponent<SpriteSheetPlayer>();
for (int x = 0; x < ssp->sprites_.Size(); x++)
{
if (!ssp->sprites_[x]->noed_->HasComponent<Dead>())
{
ssp->sprites_[x]->noed_->AddComponent(new Dead(context_, main_, -1.0f), 0, LOCAL);
Node* particleStartNode_ = ssp->sprites_[x]->noed_->GetScene()->CreateChild(0,LOCAL);
particleStartNode_->SetPosition(ssp->sprites_[x]->noed_->GetPosition());
particleStartNode_->AddComponent(new TimedRemove(context_, main_, 2.0f), 0, LOCAL);
particleStartNode_->AddComponent(new SoundSource3D(context_), 0, LOCAL);
particleStartNode_->GetComponent<SoundSource3D>()->SetGain(0.1f);
particleStartNode_->GetComponent<SoundSource3D>()->Play(main_->cache_->GetResource<Sound>("Sounds/319071__mishicu__v8.ogg"));
}
}
}
return;
}
/*if (!noed->HasComponent<Stunned>())
{
noed->AddComponent(new Stunned(context_, main_, 2.0f), 0, LOCAL);
}*/
}
}
示例2: AttachLogicComponents
void DotsNetCrits::AttachLogicComponents(SharedPtr<Node> sceneNode)
{
sceneNode->AddComponent(new ModelPlayer(context_, main_), 0, LOCAL);
sceneNode->AddComponent(new TopDownCamera(context_, main_), 0, LOCAL);
sceneNode->AddComponent(new ThirdPersonCamera(context_, main_), 0, LOCAL);
sceneNode->AddComponent(new Speed(context_, main_), 0, LOCAL);
sceneNode->AddComponent(new Gravity(context_, main_), 0, LOCAL);
sceneNode->AddComponent(new MoveByTouch(context_, main_), 0, LOCAL);
sceneNode->AddComponent(new RotateTo(context_, main_), 0, LOCAL);
sceneNode->AddComponent(new Silence(context_, main_), 0, LOCAL);
sceneNode->AddComponent(new Teleport(context_, main_), 0, LOCAL);
sceneNode->AddComponent(new Sprint(context_, main_), 0, LOCAL);
sceneNode->AddComponent(new Snare(context_, main_), 0, LOCAL);
sceneNode->AddComponent(new Blind(context_, main_), 0, LOCAL);
sceneNode->AddComponent(new Melee(context_, main_), 0, LOCAL);
sceneNode->AddComponent(new Health(context_, main_), 0, LOCAL);
sceneNode->AddComponent(new Mute(context_, main_), 0, LOCAL);
sceneNode->AddComponent(new Armor(context_, main_), 0, LOCAL);
sceneNode->AddComponent(new Shield(context_, main_), 0, LOCAL);
sceneNode->AddComponent(new DPSHeal(context_, main_), 0, LOCAL);
sceneNode->AddComponent(new BlindingFlash(context_, main_), 0, LOCAL);
sceneNode->AddComponent(new Crit(context_, main_), 0, LOCAL);
sceneNode->AddComponent(new DOT(context_, main_), 0, LOCAL);
sceneNode->AddComponent(new DOTHeal(context_, main_), 0, LOCAL);
sceneNode->AddComponent(new AOE(context_, main_), 0, LOCAL);
sceneNode->AddComponent(new AOEHeal(context_, main_), 0, LOCAL);
sceneNode->AddComponent(new Cloak(context_, main_), 0, LOCAL);
sceneNode->AddComponent(new Cleanse(context_, main_), 0, LOCAL);
sceneNode->AddComponent(new Knockback(context_, main_), 0, LOCAL);
sceneNode->AddComponent(new SoundPlayer(context_, main_), 0, LOCAL);
}
示例3: HandleNodeCollisionStart
void TerrySpawner::HandleNodeCollisionStart(StringHash eventType, VariantMap& eventData)
{
using namespace NodeCollisionStart;
SharedPtr<Node> otherNode = SharedPtr<Node>(static_cast<Node*>(eventData[P_OTHERNODE].GetPtr()));
RigidBody* rb = static_cast<RigidBody*>(eventData[P_BODY].GetPtr());
Node* noed = rb->GetNode();
if (otherNode->GetName() == "safetyNet")
{
RespawnTerry(noed);
return;
}
if (!otherNode->HasComponent<Health>())
{
return;
}
if (otherNode->GetVar("npcType").GetInt() == 0)//hero
{
MoveByTouch* mbt = noed->GetComponent<MoveByTouch>();
mbt->MoveTo(otherNode->GetWorldPosition(),
mbt->moveToSpeed_,mbt->speedRamp_,mbt->gravity_,mbt->gravityRamp_,false,true,true);
int collisionCount = noed->GetVar("collisionCount").GetInt();
collisionCount++;
noed->SetVar("collisionCount", collisionCount);
if (collisionCount == 1)
{
VariantMap vm;
vm[AnimateSceneNode::P_NODE] = noed;
if (noed->GetVar("sex").GetBool())
{
vm[AnimateSceneNode::P_ANIMATION] = "attackF";
}
else
{
vm[AnimateSceneNode::P_ANIMATION] = "attackM";
}
vm[AnimateSceneNode::P_LOOP] = false;
vm[AnimateSceneNode::P_LAYER] = 0;
SendEvent(E_ANIMATESCENENODE, vm);
}
if (noed->GetComponent<Blind>() || noed->GetComponent<Stunned>())
{
return;
}
int healthMod = noed->GetVar("attack").GetInt();
if (otherNode->HasComponent<Armor>())
{
healthMod = noed->GetVar("attack").GetInt() - otherNode->GetComponent<Armor>()->armor_;
if (healthMod < 0)
{
healthMod = 0;
}
}
otherNode->GetComponent<Health>()->ModifyHealth(healthMod, -1, false);
if (otherNode->GetComponent<Health>()->health_ <= 0)
{
if (otherNode->GetName() != "tent")
{
if (!otherNode->HasComponent<Dead>())
{
otherNode->AddComponent(new Dead(context_, main_, -1.0f), 0, LOCAL);
}
}
else
{
SpriteSheetPlayer* ssp = main_->mySceneNode_->GetComponent<SpriteSheetPlayer>();
for (int x = 0; x < ssp->sprites_.Size(); x++)
{
if (!ssp->sprites_[x]->noed_->HasComponent<Dead>())
{
ssp->sprites_[x]->noed_->AddComponent(new Dead(context_, main_, -1.0f), 0, LOCAL);
Node* particleStartNode_ = ssp->sprites_[x]->noed_->GetScene()->CreateChild(0,LOCAL);
particleStartNode_->SetPosition(ssp->sprites_[x]->noed_->GetPosition());
particleStartNode_->AddComponent(new TimedRemove(context_, main_, 2.0f), 0, LOCAL);
particleStartNode_->AddComponent(new SoundSource3D(context_), 0, LOCAL);
particleStartNode_->GetComponent<SoundSource3D>()->SetGain(0.1f);
particleStartNode_->GetComponent<SoundSource3D>()->Play(main_->cache_->GetResource<Sound>("Sounds/319071__mishicu__v8.ogg"));
}
}
}
//otherNode->GetComponent<Health>()->ModifyHealth(100, 0, false);
//.........这里部分代码省略.........
示例4: TimedRemove
void WizardSkill0::HandleNodeCollisionStart(StringHash eventType, VariantMap& eventData)
{
using namespace NodeCollisionStart;
SharedPtr<Node> otherNode = SharedPtr<Node>(static_cast<Node*>(eventData[P_OTHERNODE].GetPtr()));
RigidBody* otherRB = static_cast<RigidBody*>(eventData[P_OTHERBODY].GetPtr());
RigidBody* rb = static_cast<RigidBody*>(eventData[P_BODY].GetPtr());
Node* noed = rb->GetNode();
if (!otherNode->HasComponent<Health>())
{
/*Node* particleStartNode_ = noed->GetScene()->CreateChild(0,LOCAL);
ParticleEmitter* emitterStartFX_ = particleStartNode_->CreateComponent<ParticleEmitter>(LOCAL);
emitterStartFX_->SetEffect(main_->cache_->GetResource<ParticleEffect>("Particle/dustCloud.xml"));
emitterStartFX_->SetViewMask(1);
particleStartNode_->SetPosition(noed->GetPosition() + (Vector3::UP));
emitterStartFX_->SetEmitting(true);
particleStartNode_->AddComponent(new TimedRemove(context_, main_, 2.0f), 0, LOCAL);*/
/*Node* lightNode = noed->GetScene()->CreateChild(0,LOCAL);
lightNode->SetPosition(noed->GetPosition() + (Vector3::UP));
Light* light = lightNode->CreateComponent<Light>(LOCAL);
light->SetBrightness(2.0f);
light->SetPerVertex(true);
light->SetRange(5.0f);
lightNode->AddComponent(new TimedRemove(context_, main_, 0.1f), 0, LOCAL);*/
//noed->Remove();
return;
}
if (otherNode->GetVar("npcType").GetInt() == 1)//terry
{
otherNode->GetComponent<Health>()->ModifyHealth(50, -1, false);
if (otherNode->GetComponent<Health>()->health_ <= 0)
{
otherNode->GetComponent<Health>()->ModifyHealth(100, 0, false);
otherNode->GetScene()->GetComponent<TerrySpawner>()->RespawnTerry(otherNode);
}
Vector3 victoria = otherNode->GetPosition();
Vector3 dir = (victoria - noed->GetPosition()).Normalized();
dir.y_ = 1.0f;
dir *= 10.0f;
otherNode->AddComponent(new Stunned(context_, main_, 4.0f), 0, LOCAL);
otherRB->ApplyImpulse(dir);
/*Node* particleStartNode_ = noed->GetScene()->CreateChild(0,LOCAL);
ParticleEmitter* emitterStartFX_ = particleStartNode_->CreateComponent<ParticleEmitter>(LOCAL);
emitterStartFX_->SetEffect(main_->cache_->GetResource<ParticleEffect>("Particle/dustCloud.xml"));
emitterStartFX_->SetViewMask(1);
particleStartNode_->SetPosition(noed->GetPosition() + (Vector3::UP));
emitterStartFX_->SetEmitting(true);
particleStartNode_->AddComponent(new TimedRemove(context_, main_, 2.0f), 0, LOCAL);*/
/*Node* lightNode = noed->GetScene()->CreateChild(0,LOCAL);
lightNode->SetPosition(noed->GetPosition() + (Vector3::UP));
Light* light = lightNode->CreateComponent<Light>(LOCAL);
light->SetBrightness(2.0f);
light->SetPerVertex(true);
light->SetRange(5.0f);
lightNode->AddComponent(new TimedRemove(context_, main_, 0.1f), 0, LOCAL);*/
//noed->Remove();
}
}