/*============================================================================= -- Sets the caption of the text in the middle. =============================================================================*/ void ButtonCaption::SetCaption(String caption) { mCaption = caption; WeakPtr<Text> text = DynamicPtrCast<Text>(GetChild(IEI_BUTTONCAPTION_TEXT).lock()); if (!text.expired()) { text.lock()->SetText(caption); Font *font = text.lock()->GetFont(); unsigned width = (unsigned)font->GetTextLengthPx(mCaption.GetStd()); unsigned height = (unsigned)font->GetCharHeightPx(); //clip any characters that don't fit inside from the text element while (width > GetWidth()) { mCaption.Remove(mCaption.Size()-1,mCaption.Size()); SetCaption(mCaption); width = (unsigned)font->GetTextLengthPx(mCaption.GetStd()); } //properly center the text text.lock()->SetRelPos( Vector2D<int>((GetWidth()-width)/2, (GetHeight()-height)/2) ); } }
/*============================================================================= -- Adds the object to the inventory. Effectively "picking up" the object. =============================================================================*/ void Actor::HoldObject(WeakPtr<Object> object) { if (!object.expired()) { mInventory->AddObject(object); object.lock()->SetHost( GetManager()->GetEntity(GetId()) ); } }
/*============================================================================= -- Drops the object with the id in the inventory if it exists. =============================================================================*/ void Actor::DropObject(int id) { //place the object on the ground behind the Actor so it does not walk over it right away. WeakPtr<Object> object = mInventory->GetObject(id); if (!object.expired()) { object.lock()->SetHeld(false); object.lock()->SetPos(Vector3D<double>(GetPos().x+32.0, GetPos().y+32.0, GetPos().z+2.0)); mInventory->RemoveObject(id); } }
/*============================================================================= -- Special actions for colliding with certain enity types. =============================================================================*/ void Actor::ReactToCollision(WeakPtr<Entity> entity) { if (entity.expired()) return; if (entity.lock()->GetType() == OBJECT) { WeakPtr<Object> object = WeakPtr<Object>(DynamicPtrCast<Object>(entity.lock())); if (object.lock()->GetObtainable()) HoldObject( object ); } }
bool operator()(const WeakPtr &wp) const { return wp.expired(); }