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::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::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(); }