int CScriptBind_Boids::OnPickup(IFunctionHandler *pH, SmartScriptTable flockEntity, SmartScriptTable boidEntity, bool bPickup, float fThrowSpeed) { CFlock* flock = GetFlock(flockEntity); IEntity* pBoidEntity = GetEntity(boidEntity); if (flock != NULL && pBoidEntity != NULL) { CBoidObject* pBoidObject = NULL; for (int i = 0; i < flock->GetBoidsCount(); ++i) { if (flock->GetBoid(i)->GetId() == pBoidEntity->GetId()) { pBoidObject = flock->GetBoid(i); break; } } if (pBoidObject != NULL) { pBoidObject->OnPickup(bPickup, fThrowSpeed); } } return pH->EndFunction(); }
int CScriptBind_Boids::CanPickup(IFunctionHandler *pH, SmartScriptTable flockEntity, SmartScriptTable boidEntity) { CFlock* flock = GetFlock(flockEntity); IEntity* pBoidEntity = GetEntity(boidEntity); if (flock != NULL && pBoidEntity != NULL) { CBoidObject* pBoidObject = NULL; for (int i = 0; i < flock->GetBoidsCount(); ++i) { if (flock->GetBoid(i)->GetId() == pBoidEntity->GetId()) { pBoidObject = flock->GetBoid(i); break; } } if (pBoidObject != NULL) { SBoidContext bc; flock->GetBoidSettings(bc); return pH->EndFunction((pBoidObject->IsDead() && bc.bPickableWhenDead) || (!pBoidObject->IsDead() && bc.bPickableWhenAlive)); } } return pH->EndFunction(0); }
int CScriptBind_Boids::CreateFlock( IFunctionHandler *pH, SmartScriptTable entity,int nType,SmartScriptTable paramTable ) { IEntity *pEntity = GetEntity(entity); if (!pEntity) { GameWarning( "Boids.CreateFlock called with an invalid entity" ); return pH->EndFunction(); } pEntity->SetFlags( pEntity->GetFlags() | ENTITY_FLAG_CLIENT_ONLY ); CFlock *pFlock = 0; switch (nType) { case EFLOCK_BIRDS: pFlock = new CBirdsFlock(pEntity); break; case EFLOCK_CHICKENS: pFlock = new CChickenFlock(pEntity); break; case EFLOCK_FISH: pFlock = new CFishFlock(pEntity); break; case EFLOCK_FROGS: pFlock = new CFrogFlock(pEntity); break; case EFLOCK_TURTLES: pFlock = new CTurtleFlock(pEntity); break; case EFLOCK_BUGS: pFlock = new CBugsFlock(pEntity); break; } if (pFlock==NULL) { GameWarning( "Boids.CreateFlock wrong flock type %d specified",nType ); return pH->EndFunction(); } ////////////////////////////////////////////////////////////////////////// // Creates a boids proxy for this entity, and attach flock to it. CBoidsProxy *pBoidsProxy = new CBoidsProxy(pEntity); pEntity->SetProxy( ENTITY_PROXY_BOIDS,pBoidsProxy ); SBoidContext bc; pFlock->GetBoidSettings( bc ); SBoidsCreateContext ctx; if (ReadParamsTable( paramTable,bc,ctx )) { bc.entity = pEntity; pFlock->SetBoidSettings( bc ); pFlock->CreateBoids( ctx ); } // Assign flock to boids proxy and update some settings. pBoidsProxy->SetFlock(pFlock); return pH->EndFunction(); }
int CScriptBind_Boids::EnableFlock(IFunctionHandler *pH,SmartScriptTable entity,bool bEnable) { CFlock *flock = GetFlock(entity); if (flock) flock->SetEnabled( bEnable ); return pH->EndFunction(); }
int CScriptBind_Boids::SetFlockPercentEnabled(IFunctionHandler *pH,SmartScriptTable entity,int percent ) { CFlock *flock = GetFlock(entity); if (flock) flock->SetPercentEnabled( percent ); return pH->EndFunction(); }
int CScriptBind_Boids::OnBoidHit( IFunctionHandler *pH,SmartScriptTable flockEntity,SmartScriptTable boidEntity,SmartScriptTable hit ) { CFlock *flock = GetFlock(flockEntity); IEntity *pBoidEntity = GetEntity(boidEntity); if (flock != NULL && pBoidEntity != NULL) { flock->OnBoidHit( pBoidEntity->GetId(),hit ); } return pH->EndFunction(); }
int CScriptBind_Boids::GetUsableMessage(IFunctionHandler *pH, SmartScriptTable flockEntity) { CFlock* flock = GetFlock(flockEntity); IActor* pActor = g_pGame->GetIGameFramework()->GetClientActor(); if (pActor) { CPlayer* pPlayer = static_cast<CPlayer*>(pActor); CryFixedStringT<64> finalString; CryFixedStringT<64> tempString; if (pPlayer && !pPlayer->IsInPickAndThrowMode() && flock != NULL) { SBoidContext bc; flock->GetBoidSettings(bc); tempString.Format("@ui_boid_pickup %s", bc.pickableMessage); finalString = CHUDUtils::LocalizeString(tempString.c_str()); } return pH->EndFunction(finalString.c_str()); } return pH->EndFunction(); }
int CScriptBind_Boids::SetFlockParams(IFunctionHandler *pH,SmartScriptTable entity,SmartScriptTable paramTable) { CFlock *flock = GetFlock(entity); if (!flock) return pH->EndFunction(); string currModel = flock->GetModelName(); int currCount = flock->GetBoidsCount(); SBoidContext bc; flock->GetBoidSettings(bc); SBoidsCreateContext ctx; if (ReadParamsTable( paramTable,bc,ctx )) { flock->SetBoidSettings( bc ); string model = ""; if (!ctx.models.empty()) model = ctx.models[0]; if ((!model.empty() && stricmp(model.c_str(),currModel.c_str()) == 0) || (ctx.boidsCount > 0 && ctx.boidsCount != currCount)) { flock->CreateBoids( ctx ); } } IEntity *pEntity = GetEntity(entity); if (pEntity) { CBoidsProxy *pBoidsProxy = (CBoidsProxy*)pEntity->GetProxy(ENTITY_PROXY_BOIDS); if (pBoidsProxy) { // Update pBoidsProxy->SetFlock(flock); } } return pH->EndFunction(); }