void UIDrag::HandleDragMove(StringHash eventType, VariantMap& eventData) { using namespace DragBegin; Button* element = (Button*)eventData[P_ELEMENT].GetVoidPtr(); int buttons = eventData[P_BUTTONS].GetInt(); IntVector2 d = element->GetVar("DELTA").GetIntVector2(); int X = eventData[P_X].GetInt() + d.x_; int Y = eventData[P_Y].GetInt() + d.y_; int BUTTONS = element->GetVar("BUTTONS").GetInt(); Text* t = (Text*)element->GetChild(String("Event Touch")); t->SetText("Drag Move Buttons: " + String(buttons)); if (buttons == BUTTONS) element->SetPosition(IntVector2(X, Y)); }
void UIDrag::HandleDragCancel(StringHash eventType, VariantMap& eventData) { using namespace DragBegin; Button* element = (Button*)eventData[P_ELEMENT].GetVoidPtr(); IntVector2 P = element->GetVar("START").GetIntVector2(); element->SetPosition(P); }
void SoundEffects::HandlePlaySound(StringHash eventType, VariantMap& eventData) { Button* button = static_cast<Button*>(GetEventSender()); const String& soundResourceName = button->GetVar(VAR_SOUNDRESOURCE).GetString(); // Get the sound resource ResourceCache* cache = GetSubsystem<ResourceCache>(); Sound* sound = cache->GetResource<Sound>(soundResourceName); if (sound) { // Create a scene node with a SoundSource component for playing the sound. The SoundSource component plays // non-positional audio, so its 3D position in the scene does not matter. For positional sounds the // SoundSource3D component would be used instead Node* soundNode = scene_->CreateChild("Sound"); SoundSource* soundSource = soundNode->CreateComponent<SoundSource>(); soundSource->Play(sound); // In case we also play music, set the sound volume below maximum so that we don't clip the output soundSource->SetGain(0.75f); // Subscribe to the "sound finished" event generated by the SoundSource for removing the node once the sound has played // Note: the event is sent through the Node (similar to e.g. node physics collision and animation trigger events) // to not require subscribing to the particular component SubscribeToEvent(soundNode, E_SOUNDFINISHED, URHO3D_HANDLER(SoundEffects, HandleSoundFinished)); } }
void SoundEffects::HandlePlaySound(StringHash eventType, VariantMap& eventData) { Button* button = static_cast<Button*>(GetEventSender()); const String& soundResourceName = button->GetVar(VAR_SOUNDRESOURCE).GetString(); // Get the sound resource ResourceCache* cache = GetSubsystem<ResourceCache>(); Sound* sound = cache->GetResource<Sound>(soundResourceName); if (sound) { // Create a scene node with a SoundSource component for playing the sound. The SoundSource component plays // non-positional audio, so its 3D position in the scene does not matter. For positional sounds the // SoundSource3D component would be used instead Node* soundNode = scene_->CreateChild("Sound"); SoundSource* soundSource = soundNode->CreateComponent<SoundSource>(); soundSource->Play(sound); // In case we also play music, set the sound volume below maximum so that we don't clip the output soundSource->SetGain(0.75f); // Set the sound component to automatically remove its scene node from the scene when the sound is done playing soundSource->SetAutoRemove(true); } }