🎉 Make T-Rex effect configurable
This commit is contained in:
+4
-2
@@ -161,8 +161,10 @@ class Extension {
|
||||
tweakTransition('scale-y', 0.5);
|
||||
} else if (mode == 4) {
|
||||
shader = new TRexShader(this._settings);
|
||||
tweakTransition('scale-x', 1.05);
|
||||
tweakTransition('scale-y', 1.05);
|
||||
|
||||
const warp = 0.5 * this._settings.get_double('claw-scratch-warp');
|
||||
tweakTransition('scale-x', 1.0 + warp);
|
||||
tweakTransition('scale-y', 1.0 + warp);
|
||||
}
|
||||
|
||||
if (shader) {
|
||||
|
||||
@@ -58,8 +58,12 @@ var PreferencesDialog = class PreferencesDialog {
|
||||
this._bindColorButton('matrix-trail-color');
|
||||
this._bindColorButton('matrix-tip-color');
|
||||
this._bindColorButton('tv-effect-color');
|
||||
this._bindColorButton('claw-scratch-color');
|
||||
this._bindAdjustment('claw-scratch-scale');
|
||||
this._bindAdjustment('claw-scratch-count');
|
||||
this._bindAdjustment('claw-scratch-warp');
|
||||
|
||||
// The fire-gradient-reset button needs to by bound explicitly.
|
||||
// The fire-gradient-reset button needs to be bound explicitly.
|
||||
this._builder.get_object('reset-fire-colors').connect('clicked', () => {
|
||||
this._settings.reset('fire-color-1');
|
||||
this._settings.reset('fire-color-2');
|
||||
|
||||
@@ -578,6 +578,211 @@
|
||||
</child>
|
||||
|
||||
|
||||
<child>
|
||||
<object class="GtkBox">
|
||||
<property name="margin-top">30</property>
|
||||
<property name="margin-bottom">10</property>
|
||||
<child>
|
||||
<object class="GtkLabel">
|
||||
<property name="label">T-Rex Attack Options</property>
|
||||
<property name="xalign">0</property>
|
||||
<property name="hexpand">1</property>
|
||||
<style>
|
||||
<class name="title-4" />
|
||||
</style>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
|
||||
<child>
|
||||
<object class="GtkFrame">
|
||||
<child>
|
||||
<object class="GtkListBox">
|
||||
<property name="selection-mode">none</property>
|
||||
<property name="show-separators">1</property>
|
||||
<style>
|
||||
<class name="rich-list" />
|
||||
</style>
|
||||
|
||||
<child>
|
||||
<object class="GtkListBoxRow">
|
||||
<property name="activatable">0</property>
|
||||
<child>
|
||||
<object class="GtkBox">
|
||||
<child>
|
||||
<object class="GtkLabel">
|
||||
<property name="label" translatable="yes">Claw Scratch Scale</property>
|
||||
<property name="xalign">0</property>
|
||||
<property name="halign">start</property>
|
||||
<property name="valign">center</property>
|
||||
<property name="hexpand">1</property>
|
||||
</object>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkScale">
|
||||
<property name="halign">end</property>
|
||||
<property name="valign">center</property>
|
||||
<property name="draw-value">1</property>
|
||||
<property name="digits">1</property>
|
||||
<property name="value-pos">left</property>
|
||||
<property name="width-request">300</property>
|
||||
<property name="adjustment">
|
||||
<object class="GtkAdjustment" id="claw-scratch-scale">
|
||||
<property name="upper">10</property>
|
||||
<property name="lower">0.1</property>
|
||||
<property name="step-increment">0.1</property>
|
||||
<property name="page-increment">1</property>
|
||||
</object>
|
||||
</property>
|
||||
</object>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkButton" id="reset-claw-scratch-scale">
|
||||
<property name="icon-name">edit-clear-symbolic</property>
|
||||
<property name="tooltip-text">Reset to Default Value</property>
|
||||
<style>
|
||||
<class name="flat" />
|
||||
</style>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
|
||||
<child>
|
||||
<object class="GtkListBoxRow">
|
||||
<property name="activatable">0</property>
|
||||
<child>
|
||||
<object class="GtkBox">
|
||||
<child>
|
||||
<object class="GtkLabel">
|
||||
<property name="label" translatable="yes">Claw Scratch Count</property>
|
||||
<property name="xalign">0</property>
|
||||
<property name="halign">start</property>
|
||||
<property name="valign">center</property>
|
||||
<property name="hexpand">1</property>
|
||||
</object>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkScale">
|
||||
<property name="halign">end</property>
|
||||
<property name="valign">center</property>
|
||||
<property name="draw-value">1</property>
|
||||
<property name="digits">0</property>
|
||||
<property name="value-pos">left</property>
|
||||
<property name="width-request">300</property>
|
||||
<property name="adjustment">
|
||||
<object class="GtkAdjustment" id="claw-scratch-count">
|
||||
<property name="upper">50</property>
|
||||
<property name="lower">1</property>
|
||||
<property name="step-increment">1</property>
|
||||
<property name="page-increment">10</property>
|
||||
</object>
|
||||
</property>
|
||||
</object>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkButton" id="reset-claw-scratch-count">
|
||||
<property name="icon-name">edit-clear-symbolic</property>
|
||||
<property name="tooltip-text">Reset to Default Value</property>
|
||||
<style>
|
||||
<class name="flat" />
|
||||
</style>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
|
||||
<child>
|
||||
<object class="GtkListBoxRow">
|
||||
<property name="activatable">0</property>
|
||||
<child>
|
||||
<object class="GtkBox">
|
||||
<child>
|
||||
<object class="GtkLabel">
|
||||
<property name="label" translatable="yes">Warp Effect</property>
|
||||
<property name="xalign">0</property>
|
||||
<property name="halign">start</property>
|
||||
<property name="valign">center</property>
|
||||
<property name="hexpand">1</property>
|
||||
</object>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkScale">
|
||||
<property name="halign">end</property>
|
||||
<property name="valign">center</property>
|
||||
<property name="draw-value">1</property>
|
||||
<property name="digits">2</property>
|
||||
<property name="value-pos">left</property>
|
||||
<property name="width-request">300</property>
|
||||
<property name="adjustment">
|
||||
<object class="GtkAdjustment" id="claw-scratch-warp">
|
||||
<property name="upper">1</property>
|
||||
<property name="lower">0</property>
|
||||
<property name="step-increment">0.01</property>
|
||||
<property name="page-increment">0.1</property>
|
||||
</object>
|
||||
</property>
|
||||
</object>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkButton" id="reset-claw-scratch-warp">
|
||||
<property name="icon-name">edit-clear-symbolic</property>
|
||||
<property name="tooltip-text">Reset to Default Value</property>
|
||||
<style>
|
||||
<class name="flat" />
|
||||
</style>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
|
||||
<child>
|
||||
<object class="GtkListBoxRow">
|
||||
<property name="activatable">0</property>
|
||||
<child>
|
||||
<object class="GtkBox">
|
||||
<child>
|
||||
<object class="GtkLabel">
|
||||
<property name="label" translatable="yes">Flash Color</property>
|
||||
<property name="xalign">0</property>
|
||||
<property name="halign">start</property>
|
||||
<property name="valign">center</property>
|
||||
<property name="hexpand">1</property>
|
||||
</object>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkColorButton" id="claw-scratch-color">
|
||||
<property name="use_alpha">1</property>
|
||||
<property name="show_editor">1</property>
|
||||
</object>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkButton" id="reset-claw-scratch-color">
|
||||
<property name="icon-name">edit-clear-symbolic</property>
|
||||
<property name="tooltip-text">Reset to Default Value</property>
|
||||
<style>
|
||||
<class name="flat" />
|
||||
</style>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
|
||||
|
||||
<child>
|
||||
<object class="GtkBox">
|
||||
<property name="margin-top">30</property>
|
||||
|
||||
@@ -96,6 +96,7 @@
|
||||
<description>The color matrix trails.</description>
|
||||
</key>
|
||||
|
||||
|
||||
<key name="tv-effect-color" type="s">
|
||||
<default>"rgb(255, 255, 255)"</default>
|
||||
<summary>TV Effect Color</summary>
|
||||
@@ -103,6 +104,31 @@
|
||||
</key>
|
||||
|
||||
|
||||
<key name="claw-scratch-color" type="s">
|
||||
<default>"rgb(255, 0, 0)"</default>
|
||||
<summary>Claw Scratch Color</summary>
|
||||
<description>The color of the claw scratches.</description>
|
||||
</key>
|
||||
|
||||
<key name="claw-scratch-scale" type="d">
|
||||
<default>1.0</default>
|
||||
<summary>Claw Scratch Scale</summary>
|
||||
<description>Size of the claw scratches.</description>
|
||||
</key>
|
||||
|
||||
<key name="claw-scratch-warp" type="d">
|
||||
<default>0.1</default>
|
||||
<summary>Claw Scratch Warp</summary>
|
||||
<description>Intensity of the claw scratch warp effect.</description>
|
||||
</key>
|
||||
|
||||
<key name="claw-scratch-count" type="i">
|
||||
<default>5</default>
|
||||
<summary>Claw Scratch Count</summary>
|
||||
<description>Number of claw scratches drawn on top of each other.</description>
|
||||
</key>
|
||||
|
||||
|
||||
</schema>
|
||||
|
||||
</schemalist>
|
||||
@@ -35,6 +35,8 @@ var TRexShader = GObject.registerClass({Properties: {}, Signals: {}},
|
||||
clawData.get_pixels(), Cogl.PixelFormat.RGB_888, clawData.width, clawData.height,
|
||||
clawData.rowstride);
|
||||
|
||||
const color = Clutter.Color.from_string(settings.get_string('claw-scratch-color'))[1];
|
||||
|
||||
// This is partially based on https://www.shadertoy.com/view/ldccW4 (CC-BY-NC-SA).
|
||||
this.set_shader_source(`
|
||||
|
||||
@@ -74,10 +76,10 @@ var TRexShader = GObject.registerClass({Properties: {}, Signals: {}},
|
||||
|
||||
void main() {
|
||||
|
||||
|
||||
|
||||
const float CLAW_SIZE = 1;
|
||||
const float NUM_CLAWS = 5;
|
||||
const float CLAW_SIZE = ${settings.get_double('claw-scratch-scale')};
|
||||
const float NUM_CLAWS = ${settings.get_int('claw-scratch-count')};
|
||||
const float WARP_INTENSITY = 1.0 + ${settings.get_double('claw-scratch-warp')};
|
||||
const float FLASH_INTENSITY = 0.1;
|
||||
const float MAX_SPAWN_TIME = 0.5;
|
||||
const float FF_TIME = 0.5; // Relative time for the final fade to transparency.
|
||||
|
||||
@@ -88,7 +90,7 @@ var TRexShader = GObject.registerClass({Properties: {}, Signals: {}},
|
||||
vec2 coords = cogl_tex_coord_in[0].st * 2.0 - 1.0;
|
||||
float dist = length(coords);
|
||||
|
||||
coords = (coords/dist * pow(dist, 1.1)) * 0.5 + 0.5;
|
||||
coords = (coords/dist * pow(dist, WARP_INTENSITY)) * 0.5 + 0.5;
|
||||
|
||||
coords = mix(cogl_tex_coord_in[0].st, coords, uProgress);
|
||||
|
||||
@@ -104,13 +106,17 @@ var TRexShader = GObject.registerClass({Properties: {}, Signals: {}},
|
||||
vec2 dir = vec2(dFdx(mask), dFdy(mask))*uProgress*mask*0.5;
|
||||
cogl_color_out = texture2D(uTexture, coords + dir);
|
||||
|
||||
float flash = 25 * (mask - uProgress) + 1;
|
||||
float flash = 1.0 / FLASH_INTENSITY * (mask - uProgress) + 1;
|
||||
if (flash < 0 || flash >= 1) {
|
||||
flash = 0;
|
||||
}
|
||||
|
||||
vec3 flashColor = vec3(${color.red / 255},
|
||||
${color.green / 255},
|
||||
${color.blue / 255}) * ${color.alpha / 255};
|
||||
|
||||
cogl_color_out *= (mask > uProgress ? 1 : 0);
|
||||
cogl_color_out.rgb += flash * mix(vec3(1, 0, 0), vec3(0), uProgress);
|
||||
cogl_color_out.rgb += flash * mix(flashColor, vec3(0), uProgress);
|
||||
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user