Skip to content

Commit

Permalink
Merge pull request #381 from Spartan322/extract/StyleBoxWithSound-script
Browse files Browse the repository at this point in the history
Move StyleBoxWithSound to C++ extension
  • Loading branch information
Spartan322 authored Feb 9, 2025
2 parents c5a500a + 227d1ea commit b8bc06a
Show file tree
Hide file tree
Showing 7 changed files with 182 additions and 61 deletions.
17 changes: 17 additions & 0 deletions extension/doc_classes/StyleBoxWithSound.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
<?xml version="1.0" encoding="UTF-8" ?>
<class name="StyleBoxWithSound" inherits="StyleBox" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="https://raw.githubusercontent.com/godotengine/godot/master/doc/class.xsd">
<brief_description>
</brief_description>
<description>
</description>
<tutorials>
</tutorials>
<members>
<member name="audio_bus" type="StringName" setter="set_audio_bus" getter="get_audio_bus" default="&amp;&quot;Master&quot;">
</member>
<member name="audio_stream" type="AudioStream" setter="set_audio_stream" getter="get_audio_stream">
</member>
<member name="style_box" type="StyleBox" setter="set_style_box" getter="get_style_box">
</member>
</members>
</class>
Original file line number Diff line number Diff line change
@@ -0,0 +1,109 @@
#include "StyleBoxWithSound.hpp"

#include <godot_cpp/classes/audio_stream_player.hpp>
#include <godot_cpp/classes/engine.hpp>
#include <godot_cpp/classes/global_constants.hpp>
#include <godot_cpp/classes/main_loop.hpp>
#include <godot_cpp/classes/scene_tree.hpp>
#include <godot_cpp/classes/window.hpp>
#include <godot_cpp/variant/callable_method_pointer.hpp>
#include <godot_cpp/variant/string.hpp>
#include <godot_cpp/variant/utility_functions.hpp>

#include "openvic-extension/utility/ClassBindings.hpp"

using namespace OpenVic;
using namespace godot;

void StyleBoxWithSound::_bind_methods() {
OV_BIND_METHOD(StyleBoxWithSound::get_style_box);
OV_BIND_METHOD(StyleBoxWithSound::set_style_box, { "style" });
OV_BIND_METHOD(StyleBoxWithSound::get_audio_bus);
OV_BIND_METHOD(StyleBoxWithSound::set_audio_bus, { "bus" });
OV_BIND_METHOD(StyleBoxWithSound::get_audio_stream);
OV_BIND_METHOD(StyleBoxWithSound::set_audio_stream, { "stream" });

ADD_PROPERTY(
PropertyInfo(Variant::OBJECT, "style_box", PROPERTY_HINT_RESOURCE_TYPE, "StyleBox"), "set_style_box", "get_style_box"
);
ADD_PROPERTY(PropertyInfo(Variant::STRING_NAME, "audio_bus", PROPERTY_HINT_ENUM, ""), "set_audio_bus", "get_audio_bus");
ADD_PROPERTY(
PropertyInfo(Variant::OBJECT, "audio_stream", PROPERTY_HINT_RESOURCE_TYPE, "AudioStream"), //
"set_audio_stream", "get_audio_stream"
);
}

StyleBoxWithSound::StyleBoxWithSound() {
audio_bus = "Master";
}

Ref<StyleBox> StyleBoxWithSound::get_style_box() const {
return style_box;
}

void StyleBoxWithSound::set_style_box(Ref<StyleBox> const& style) {
style_box = style;
emit_changed();
}

StringName StyleBoxWithSound::get_audio_bus() const {
return audio_bus;
}

void StyleBoxWithSound::set_audio_bus(String const& bus) {
audio_bus = bus;
emit_changed();
}

Ref<AudioStream> StyleBoxWithSound::get_audio_stream() const {
return audio_stream;
}

void StyleBoxWithSound::set_audio_stream(Ref<AudioStream> const& stream) {
audio_stream = stream;
emit_changed();
}

godot::Rect2 StyleBoxWithSound::_get_draw_rect(Rect2 const& rect) const {
if (style_box.is_null()) {
return Rect2();
}
return style_box->_get_draw_rect(rect);
}

void StyleBoxWithSound::_on_audio_finished(AudioStreamPlayer* player) {
player->queue_free();
}

void StyleBoxWithSound::_draw(RID const& canvas_item, Rect2 const& rect) const {
SceneTree* tree = Object::cast_to<SceneTree>(Engine::get_singleton()->get_main_loop());
if (tree != nullptr) {
if (audio_stream.is_valid()) {
AudioStreamPlayer* asp = memnew(AudioStreamPlayer);
asp->connect("finished", callable_mp_static(&StyleBoxWithSound::_on_audio_finished).bind(asp));
asp->set_bus(audio_bus);
asp->set_stream(audio_stream);
asp->set_autoplay(true);
tree->get_root()->add_child(asp, false, Node::INTERNAL_MODE_BACK);
}
}
if (style_box.is_valid()) {
style_box->_draw(canvas_item, rect);
}
}

void StyleBoxWithSound::_validate_property(PropertyInfo& property) const {
static StringName audio_bus_name = "audio_bus";
if (property.name == audio_bus_name) {
String options;
for (int i = 0; i < AudioServer::get_singleton()->get_bus_count(); i++) {
if (i > 0) {
options += ",";
}
String name = AudioServer::get_singleton()->get_bus_name(i);
options += name;
}

property.hint_string = options;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
#pragma once

#include <godot_cpp/classes/audio_stream.hpp>
#include <godot_cpp/classes/audio_stream_player.hpp>
#include <godot_cpp/classes/style_box.hpp>
#include <godot_cpp/variant/rect2.hpp>
#include <godot_cpp/variant/rid.hpp>
#include <godot_cpp/variant/string.hpp>

#include <openvic-simulation/utility/Getters.hpp>

namespace OpenVic {
class StyleBoxWithSound : public godot::StyleBox {
GDCLASS(StyleBoxWithSound, godot::StyleBox)

godot::Ref<godot::StyleBox> style_box;
godot::StringName audio_bus;
godot::Ref<godot::AudioStream> audio_stream;

static void _on_audio_finished(godot::AudioStreamPlayer* player);

protected:
static void _bind_methods();

void _validate_property(godot::PropertyInfo& property) const;

public:
StyleBoxWithSound();

godot::Ref<godot::StyleBox> get_style_box() const;
void set_style_box(godot::Ref<godot::StyleBox> const& style);
godot::StringName get_audio_bus() const;
void set_audio_bus(godot::String const& bus);
godot::Ref<godot::AudioStream> get_audio_stream() const;
void set_audio_stream(godot::Ref<godot::AudioStream> const& stream);

virtual godot::Rect2 _get_draw_rect(godot::Rect2 const& rect) const override;
virtual void _draw(godot::RID const& canvas_item, godot::Rect2 const& rect) const override;
};
}
5 changes: 4 additions & 1 deletion extension/src/openvic-extension/register_types.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,9 @@
#include <godot_cpp/classes/engine.hpp>

#include "openvic-extension/classes/GFXButtonStateTexture.hpp"
#include "openvic-extension/classes/GFXSpriteTexture.hpp"
#include "openvic-extension/classes/GFXMaskedFlagTexture.hpp"
#include "openvic-extension/classes/GFXPieChartTexture.hpp"
#include "openvic-extension/classes/GFXSpriteTexture.hpp"
#include "openvic-extension/classes/GUIButton.hpp"
#include "openvic-extension/classes/GUIIcon.hpp"
#include "openvic-extension/classes/GUIIconButton.hpp"
Expand All @@ -21,6 +21,7 @@
#include "openvic-extension/classes/GUIScrollbar.hpp"
#include "openvic-extension/classes/GUITextureRect.hpp"
#include "openvic-extension/classes/MapMesh.hpp"
#include "openvic-extension/classes/resources/StyleBoxWithSound.hpp"
#include "openvic-extension/singletons/AssetManager.hpp"
#include "openvic-extension/singletons/Checksum.hpp"
#include "openvic-extension/singletons/CursorSingleton.hpp"
Expand Down Expand Up @@ -115,6 +116,8 @@ void initialize_openvic_types(ModuleInitializationLevel p_level) {
/* Depend on GUIButton */
ClassDB::register_class<GUIIconButton>();
ClassDB::register_class<GUIMaskedFlagButton>();

ClassDB::register_class<StyleBoxWithSound>();
}

void uninitialize_openvic_types(ModuleInitializationLevel p_level) {
Expand Down
21 changes: 7 additions & 14 deletions game/assets/graphics/theme/game_session_menu.tres
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
[gd_resource type="Theme" load_steps=11 format=3 uid="uid://cqrfmjt5yeti7"]
[gd_resource type="Theme" load_steps=10 format=3 uid="uid://cqrfmjt5yeti7"]

[ext_resource type="StyleBox" uid="uid://blwilunhmyvpq" path="res://assets/graphics/theme/main_menu_button_normal.tres" id="1_7med2"]
[ext_resource type="Script" path="res://src/Game/Theme/StyleBoxWithSound.gd" id="2_oj3dv"]
[ext_resource type="AudioStream" uid="uid://bsldcs3l8s7ug" path="res://addons/kenney_ui_audio/click3.wav" id="3_j823n"]
[ext_resource type="Texture2D" uid="uid://c0p34i3d3b0pw" path="res://assets/graphics/main_menu_button.png" id="4_lno5s"]

Expand Down Expand Up @@ -35,24 +34,18 @@ content_margin_bottom = 14.0
texture = ExtResource("4_lno5s")
modulate_color = Color(0.588235, 0.588235, 0.588235, 1)

[sub_resource type="StyleBoxTexture" id="StyleBoxTexture_l2rw3"]
[sub_resource type="StyleBoxTexture" id="StyleBoxTexture_ybnai"]
content_margin_left = 20.0
content_margin_top = 10.0
content_margin_right = 20.0
content_margin_bottom = 14.0
texture = ExtResource("4_lno5s")
modulate_color = Color(0.85098, 0.85098, 0.85098, 1)

[sub_resource type="StyleBox" id="StyleBox_ptkcj"]
resource_local_to_scene = false
resource_name = ""
content_margin_left = -1.0
content_margin_top = -1.0
content_margin_right = -1.0
content_margin_bottom = -1.0
script = ExtResource("2_oj3dv")
style_box = SubResource("StyleBoxTexture_l2rw3")
sound = ExtResource("3_j823n")
[sub_resource type="StyleBoxWithSound" id="StyleBoxWithSound_vn3ou"]
style_box = SubResource("StyleBoxTexture_ybnai")
audio_bus = &"SFX_BUS"
audio_stream = ExtResource("3_j823n")

[sub_resource type="StyleBoxLine" id="StyleBoxLine_kaw4i"]
color = Color(0.454902, 0.45098, 0.435294, 1)
Expand All @@ -77,7 +70,7 @@ SessionButton/styles/disabled = SubResource("StyleBoxTexture_jvvyi")
SessionButton/styles/focus = SubResource("StyleBoxFlat_6ab1x")
SessionButton/styles/hover = SubResource("StyleBoxTexture_jslj0")
SessionButton/styles/normal = ExtResource("1_7med2")
SessionButton/styles/pressed = SubResource("StyleBox_ptkcj")
SessionButton/styles/pressed = SubResource("StyleBoxWithSound_vn3ou")
SessionPanel/base_type = &"Panel"
SessionPanel/styles/panel = null
SessionSeparator/base_type = &"HSeparator"
Expand Down
17 changes: 5 additions & 12 deletions game/assets/graphics/theme/main_menu.tres
Original file line number Diff line number Diff line change
@@ -1,12 +1,11 @@
[gd_resource type="Theme" load_steps=37 format=3 uid="uid://qoi3oec48jp0"]
[gd_resource type="Theme" load_steps=36 format=3 uid="uid://qoi3oec48jp0"]

[ext_resource type="Script" path="res://src/Game/Theme/StyleBoxCombinedTexture.gd" id="1_axke7"]
[ext_resource type="Script" path="res://src/Game/Theme/TextureSetting.gd" id="2_7bwl2"]
[ext_resource type="Texture2D" uid="uid://dapuqgpjs56bs" path="res://assets/graphics/main_menu_background.png" id="3_cpatd"]
[ext_resource type="Texture2D" uid="uid://q25s41oavuxw" path="res://assets/graphics/main_menu_border_paper.png" id="4_sl60o"]
[ext_resource type="Texture2D" uid="uid://c0p34i3d3b0pw" path="res://assets/graphics/main_menu_button.png" id="5_xj7ql"]
[ext_resource type="StyleBox" uid="uid://blwilunhmyvpq" path="res://assets/graphics/theme/main_menu_button_normal.tres" id="6_dx0aj"]
[ext_resource type="Script" path="res://src/Game/Theme/StyleBoxWithSound.gd" id="7_qo00e"]
[ext_resource type="AudioStream" uid="uid://bsldcs3l8s7ug" path="res://addons/kenney_ui_audio/click3.wav" id="8_etuft"]

[sub_resource type="Resource" id="Resource_hxpog"]
Expand Down Expand Up @@ -129,16 +128,10 @@ content_margin_bottom = 14.0
texture = ExtResource("5_xj7ql")
modulate_color = Color(0.85098, 0.85098, 0.85098, 1)

[sub_resource type="StyleBox" id="StyleBox_uuspe"]
resource_local_to_scene = false
resource_name = ""
content_margin_left = -1.0
content_margin_top = -1.0
content_margin_right = -1.0
content_margin_bottom = -1.0
script = ExtResource("7_qo00e")
[sub_resource type="StyleBoxWithSound" id="StyleBoxWithSound_uuspe"]
style_box = SubResource("StyleBoxTexture_l2rw3")
sound = ExtResource("8_etuft")
audio_bus = &"SFX_BUS"
audio_stream = ExtResource("8_etuft")

[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_xdtca"]

Expand Down Expand Up @@ -207,7 +200,7 @@ TitleButton/styles/disabled = SubResource("StyleBoxTexture_dd2b8")
TitleButton/styles/focus = SubResource("StyleBoxFlat_2txce")
TitleButton/styles/hover = SubResource("StyleBoxTexture_3efxh")
TitleButton/styles/normal = ExtResource("6_dx0aj")
TitleButton/styles/pressed = SubResource("StyleBox_uuspe")
TitleButton/styles/pressed = SubResource("StyleBoxWithSound_uuspe")
VersionLabel/base_type = &"Button"
VersionLabel/colors/font_hover_color = Color(0.360784, 0.360784, 0.360784, 1)
VersionLabel/colors/font_hover_pressed_color = Color(0.215686, 0.215686, 0.215686, 1)
Expand Down
34 changes: 0 additions & 34 deletions game/src/Game/Theme/StyleBoxWithSound.gd

This file was deleted.

0 comments on commit b8bc06a

Please sign in to comment.