Browse Source

✨ Add default signals to mulitple GameObjects

- Add default signals to UIObject, Timer and Tween.
Pedro Schneider 3 years ago
parent
commit
db161c4133

+ 7 - 0
pandora/game_objects/Timer.js

@@ -68,11 +68,18 @@ class Timer extends GameObject
             this.children[i].update(delta);
     }
 
+    initSignals()
+    {
+        this.addSignal("timeout");
+        this._initSignals();
+    }
+
     onFinish()
     {
         if (this.oneShot) this.paused = true
         this.timeLeft = this.duration;
         this._onFinish();
+        this.emitSignal("timeout");
     }
 
     _onFinish()

+ 14 - 0
pandora/game_objects/Tween.js

@@ -234,9 +234,18 @@ class Tween extends GameObject
 
     allDone()
     {
+        this.emitSignal("tweenAllCompleted");
         this.done = true;
     }
 
+    initSignals()
+    {
+        this.addSignal("tweenAllCompleted");
+        this.addSignal("tweenCompleted");
+        this.addSignal("tweenStarted");
+        this._initSignals();
+    }
+
     update(delta)
     {
         if (!this.done && this.doneTweens == this.tweenData.length) this.allDone();
@@ -246,12 +255,17 @@ class Tween extends GameObject
             if (!this.tweenData[i].playing) continue;
 
             if (this.tweenData[i].t >= 0)
+            {
                 this.interpolate(this.tweenData[i]);
+            }
 
+            if (this.tweenData[i].t < 0 && this.tweenData[i].t + delta >= 0)
+                this.emitSignal("tweenStarted", this.tweenData[i]);
             this.tweenData[i].t = min(this.tweenData[i].t + delta, this.tweenData[i].duration);
 
             if (!this.tweenData[i].done && this.tweenData[i].t == this.tweenData[i].duration)
             {
+                this.emitSignal("tweenDone", this.tweenData[i]);
                 this.tweenData[i].done = true;
                 this.doneTweens += 1;
             }

+ 21 - 0
pandora/game_objects/ui_objects/CheckBox.js

@@ -46,8 +46,29 @@ class CheckBox extends UIObject
         console.log(this.P5Element.checked());
     }
 
+    initSignals()
+    {
+        this.addSignal("mousePressed");
+        this.addSignal("doubleClicked");
+        this.addSignal("mouseWheel");
+        this.addSignal("mouseReleased");
+        this.addSignal("mouseClicked");
+        this.addSignal("mouseMoved");
+        this.addSignal("mouseOver");
+        this.addSignal("mouseOut");
+        this.addSignal("touchStarted");
+        this.addSignal("touchMoved");
+        this.addSignal("touchEnded");
+        this.addSignal("dragOver");
+        this.addSignal("dragLeave");
+
+        this.addSignal("changed")
+        this._initSignals();
+    }
+
     onChanged()
     {
+        this.pandoraObject.emitSignal("changed");
         this.pandoraObject._onChanged();
     }
 }

+ 21 - 0
pandora/game_objects/ui_objects/Input.js

@@ -39,8 +39,29 @@ class Input extends UIObject
 
     }
 
+    initSignals()
+    {
+        this.addSignal("mousePressed");
+        this.addSignal("doubleClicked");
+        this.addSignal("mouseWheel");
+        this.addSignal("mouseReleased");
+        this.addSignal("mouseClicked");
+        this.addSignal("mouseMoved");
+        this.addSignal("mouseOver");
+        this.addSignal("mouseOut");
+        this.addSignal("touchStarted");
+        this.addSignal("touchMoved");
+        this.addSignal("touchEnded");
+        this.addSignal("dragOver");
+        this.addSignal("dragLeave");
+
+        this.addSignal("input");
+        this._initSignals();
+    }
+
     onInput()
     {
+        this.pandoraObject.emitSignal("input");
         this.pandoraObject._onInput();
     }
 }

+ 21 - 0
pandora/game_objects/ui_objects/Radio.js

@@ -88,8 +88,29 @@ class Radio extends UIObject
         console.log(this.getSelected());
     }
 
+    initSignals()
+    {
+        this.addSignal("mousePressed");
+        this.addSignal("doubleClicked");
+        this.addSignal("mouseWheel");
+        this.addSignal("mouseReleased");
+        this.addSignal("mouseClicked");
+        this.addSignal("mouseMoved");
+        this.addSignal("mouseOver");
+        this.addSignal("mouseOut");
+        this.addSignal("touchStarted");
+        this.addSignal("touchMoved");
+        this.addSignal("touchEnded");
+        this.addSignal("dragOver");
+        this.addSignal("dragLeave");
+
+        this.emitSignal("changed");
+        this._initSignals();
+    }
+
     onChanged()
     {
+        this.pandoraObject.emitSignal("changed");
         this.pandoraObject._onChanged();
     }
 }

+ 21 - 0
pandora/game_objects/ui_objects/Select.js

@@ -71,8 +71,29 @@ class Select extends UIObject
 
     }
 
+    initSignals()
+    {
+        this.addSignal("mousePressed");
+        this.addSignal("doubleClicked");
+        this.addSignal("mouseWheel");
+        this.addSignal("mouseReleased");
+        this.addSignal("mouseClicked");
+        this.addSignal("mouseMoved");
+        this.addSignal("mouseOver");
+        this.addSignal("mouseOut");
+        this.addSignal("touchStarted");
+        this.addSignal("touchMoved");
+        this.addSignal("touchEnded");
+        this.addSignal("dragOver");
+        this.addSignal("dragLeave");
+
+        this.addSignal("changed");
+        this._initSignals();
+    }
+
     onChanged()
     {
+        this.pandoraObject.emitSignal("changed");
         this.pandoraObject._onChanged();
     }
 }

+ 22 - 1
pandora/game_objects/ui_objects/Slider.js

@@ -35,11 +35,32 @@ class Slider extends UIObject
 
     _onChanged()
     {
-        console.log(this.getValue());
+
+    }
+
+    initSignals()
+    {
+        this.addSignal("mousePressed");
+        this.addSignal("doubleClicked");
+        this.addSignal("mouseWheel");
+        this.addSignal("mouseReleased");
+        this.addSignal("mouseClicked");
+        this.addSignal("mouseMoved");
+        this.addSignal("mouseOver");
+        this.addSignal("mouseOut");
+        this.addSignal("touchStarted");
+        this.addSignal("touchMoved");
+        this.addSignal("touchEnded");
+        this.addSignal("dragOver");
+        this.addSignal("dragLeave");
+
+        this.addSignal("changed");
+        this._initSignals();
     }
 
     onChanged()
     {
+        this.pandoraObject.emitSignal("changed");
         this.pandoraObject._onChanged();
     }
 }

+ 51 - 18
pandora/game_objects/ui_objects/UIObject.js

@@ -132,7 +132,7 @@ class UIObject extends GameObject
     {
         this.visible = false;
         this.P5Element.hide();
-        
+
         for (let i = 0; i < this.children.length; i++)
         {
             if (!this.children[i].hide) continue;
@@ -150,23 +150,7 @@ class UIObject extends GameObject
     }
 
     // Callbacks
-    draw(delta, db)
-    {
-        let ar = db.screenWidth / db.width;
-        let offsetx = (windowWidth - db.screenWidth) / 2;
-        let offsety = (windowHeight - db.screenHeight) / 2;
-        this.P5Element.position(offsetx + this.position.x * ar, offsety + this.position.y * ar);
-        this.P5Element.size(this.size.x * ar, this.size.y * ar);
-
-        this.setStyle(
-        {
-            "font-size": `${this.fontSize * ar}px`
-        });
-
-        this._draw(delta, db);
-        for (let i = 0; i < this.children.length; i++)
-            this.children[i].draw(delta, db);
-    }
+    
 
     _onMousePressed()
     {
@@ -235,68 +219,117 @@ class UIObject extends GameObject
 
     // -----------------------------------------------
 
+    initSignals()
+    {
+        this.addSignal("mousePressed");
+        this.addSignal("doubleClicked");
+        this.addSignal("mouseWheel");
+        this.addSignal("mouseReleased");
+        this.addSignal("mouseClicked");
+        this.addSignal("mouseMoved");
+        this.addSignal("mouseOver");
+        this.addSignal("mouseOut");
+        this.addSignal("touchStarted");
+        this.addSignal("touchMoved");
+        this.addSignal("touchEnded");
+        this.addSignal("dragOver");
+        this.addSignal("dragLeave");
+        this._initSignals();
+    }
+
+    draw(delta, db)
+    {
+        let ar = db.screenWidth / db.width;
+        let offsetx = (windowWidth - db.screenWidth) / 2;
+        let offsety = (windowHeight - db.screenHeight) / 2;
+        this.P5Element.position(offsetx + this.position.x * ar, offsety + this.position.y * ar);
+        this.P5Element.size(this.size.x * ar, this.size.y * ar);
+
+        this.setStyle(
+        {
+            "font-size": `${this.fontSize * ar}px`
+        });
+
+        this._draw(delta, db);
+        for (let i = 0; i < this.children.length; i++)
+            this.children[i].draw(delta, db);
+    }
+
     onMousePressed()
     {
+        this.pandoraObject.emitSignal("mousePressed");
         this.pandoraObject._onMousePressed();
     }
 
     onDoubleClicked()
     {
+        this.pandoraObject.emitSignal("doubleClicked");
         this.pandoraObject._onDoubleClicked();
     }
 
     onMouseWheel()
     {
+        this.pandoraObject.emitSignal("mouseWheel");
         this.pandoraObject._onMouseWheel();
     }
 
     onMouseReleased()
     {
+        this.pandoraObject.emitSignal("mouseReleased");
         this.pandoraObject._onMouseReleased();
     }
 
     onMouseClicked()
     {
+        this.pandoraObject.emitSignal("mouseClicked");
         this.pandoraObject._onMouseClicked();
     }
 
     onMouseMoved()
     {
+        this.pandoraObject.emitSignal("mouseMoved");
         this.pandoraObject._onMouseMoved();
     }
 
     onMouseOver()
     {
+        this.pandoraObject.emitSignal("mouseOver");
         this.pandoraObject._onMouseOver();
     }
 
     onMouseOut()
     {
+        this.pandoraObject.emitSignal("mouseOut");
         this.pandoraObject._onMouseOut();
     }
 
     onTouchStarted()
     {
+        this.pandoraObject.emitSignal("touchStarted");
         this.pandoraObject._onTouchStarted();
     }
 
     onTouchMoved()
     {
+        this.pandoraObject.emitSignal("touchMoved");
         this.pandoraObject._onTouchMoved();
     }
 
     onTouchEnded()
     {
+        this.pandoraObject.emitSignal("touchEnded");
         this.pandoraObject._onTouchEnded();
     }
 
     onDragOver()
     {
+        this.pandoraObject.emitSignal("dragOver");
         this.pandoraObject._onDragOver();
     }
 
     onDragLeave()
     {
+        this.pandoraObject.emitSignal("dragLeave");
         this.pandoraObject._onDragLeave();
     }
 }

+ 1 - 6
src/sketch.js

@@ -44,11 +44,6 @@ class TestObject2 extends Object2D
 
 class TestButton extends Button
 {
-    _initSignals()
-    {
-        this.addSignal("buttonPressed");
-    }
-
     _setup()
     {
         this.setPosition(100, 200);
@@ -77,7 +72,7 @@ function setup()
 
     test = new TestObject("myTest");
     but = new TestButton("b1", "Emit signal");
-    but.connect("buttonPressed", test, "_onSignal");
+    but.connect("mousePressed", test, "_onSignal");
     GameHandler.addRootObject(but);
     GameHandler.addRootObject(test);
     test.addChild(new TestObject2("myTest2"));