From dbae4165aa3644fdce4279c492488cff8fbc742e Mon Sep 17 00:00:00 2001 From: chrisgregan Date: Thu, 4 Sep 2014 22:24:31 +0100 Subject: [PATCH] Added Animator Parameter commands & fixed parallax --- Assets/Fungus/Animation.meta | 5 ++ .../Commands => Animation}/SetAnimBool.cs | 0 .../SetAnimBool.cs.meta | 0 .../Commands => Animation}/SetAnimFloat.cs | 0 .../SetAnimFloat.cs.meta | 0 .../Commands => Animation}/SetAnimInteger.cs | 0 .../SetAnimInteger.cs.meta | 0 .../Commands => Animation}/SetAnimTrigger.cs | 0 .../SetAnimTrigger.cs.meta | 0 Assets/Fungus/Sprite/Prefabs/Button.prefab | Bin 8224 -> 0 bytes .../Fungus/Sprite/Prefabs/Button.prefab.meta | 4 -- Assets/Fungus/Sprite/Prefabs/GUIButton.prefab | Bin 6288 -> 0 bytes .../Sprite/Prefabs/GUIButton.prefab.meta | 4 -- .../Sprite/Scripts/AnimationListener.cs | 25 --------- .../Sprite/Scripts/AnimationListener.cs.meta | 8 --- Assets/Fungus/Sprite/Scripts/Parallax.cs | 50 +++++++++--------- Assets/Shuttle/ShuttleGame.unity | Bin 133064 -> 134424 bytes 17 files changed, 29 insertions(+), 67 deletions(-) create mode 100644 Assets/Fungus/Animation.meta rename Assets/Fungus/{Sprite/Commands => Animation}/SetAnimBool.cs (100%) rename Assets/Fungus/{Sprite/Commands => Animation}/SetAnimBool.cs.meta (100%) rename Assets/Fungus/{Sprite/Commands => Animation}/SetAnimFloat.cs (100%) rename Assets/Fungus/{Sprite/Commands => Animation}/SetAnimFloat.cs.meta (100%) rename Assets/Fungus/{Sprite/Commands => Animation}/SetAnimInteger.cs (100%) rename Assets/Fungus/{Sprite/Commands => Animation}/SetAnimInteger.cs.meta (100%) rename Assets/Fungus/{Sprite/Commands => Animation}/SetAnimTrigger.cs (100%) rename Assets/Fungus/{Sprite/Commands => Animation}/SetAnimTrigger.cs.meta (100%) delete mode 100644 Assets/Fungus/Sprite/Prefabs/Button.prefab delete mode 100644 Assets/Fungus/Sprite/Prefabs/Button.prefab.meta delete mode 100644 Assets/Fungus/Sprite/Prefabs/GUIButton.prefab delete mode 100644 Assets/Fungus/Sprite/Prefabs/GUIButton.prefab.meta delete mode 100644 Assets/Fungus/Sprite/Scripts/AnimationListener.cs delete mode 100644 Assets/Fungus/Sprite/Scripts/AnimationListener.cs.meta diff --git a/Assets/Fungus/Animation.meta b/Assets/Fungus/Animation.meta new file mode 100644 index 00000000..6a585646 --- /dev/null +++ b/Assets/Fungus/Animation.meta @@ -0,0 +1,5 @@ +fileFormatVersion: 2 +guid: 623a31d1ed64f48c18a2941fb2e6bb4b +folderAsset: yes +DefaultImporter: + userData: diff --git a/Assets/Fungus/Sprite/Commands/SetAnimBool.cs b/Assets/Fungus/Animation/SetAnimBool.cs similarity index 100% rename from Assets/Fungus/Sprite/Commands/SetAnimBool.cs rename to Assets/Fungus/Animation/SetAnimBool.cs diff --git a/Assets/Fungus/Sprite/Commands/SetAnimBool.cs.meta b/Assets/Fungus/Animation/SetAnimBool.cs.meta similarity index 100% rename from Assets/Fungus/Sprite/Commands/SetAnimBool.cs.meta rename to Assets/Fungus/Animation/SetAnimBool.cs.meta diff --git a/Assets/Fungus/Sprite/Commands/SetAnimFloat.cs b/Assets/Fungus/Animation/SetAnimFloat.cs similarity index 100% rename from Assets/Fungus/Sprite/Commands/SetAnimFloat.cs rename to Assets/Fungus/Animation/SetAnimFloat.cs diff --git a/Assets/Fungus/Sprite/Commands/SetAnimFloat.cs.meta b/Assets/Fungus/Animation/SetAnimFloat.cs.meta similarity index 100% rename from Assets/Fungus/Sprite/Commands/SetAnimFloat.cs.meta rename to Assets/Fungus/Animation/SetAnimFloat.cs.meta diff --git a/Assets/Fungus/Sprite/Commands/SetAnimInteger.cs b/Assets/Fungus/Animation/SetAnimInteger.cs similarity index 100% rename from Assets/Fungus/Sprite/Commands/SetAnimInteger.cs rename to Assets/Fungus/Animation/SetAnimInteger.cs diff --git a/Assets/Fungus/Sprite/Commands/SetAnimInteger.cs.meta b/Assets/Fungus/Animation/SetAnimInteger.cs.meta similarity index 100% rename from Assets/Fungus/Sprite/Commands/SetAnimInteger.cs.meta rename to Assets/Fungus/Animation/SetAnimInteger.cs.meta diff --git a/Assets/Fungus/Sprite/Commands/SetAnimTrigger.cs b/Assets/Fungus/Animation/SetAnimTrigger.cs similarity index 100% rename from Assets/Fungus/Sprite/Commands/SetAnimTrigger.cs rename to Assets/Fungus/Animation/SetAnimTrigger.cs diff --git a/Assets/Fungus/Sprite/Commands/SetAnimTrigger.cs.meta b/Assets/Fungus/Animation/SetAnimTrigger.cs.meta similarity index 100% rename from Assets/Fungus/Sprite/Commands/SetAnimTrigger.cs.meta rename to Assets/Fungus/Animation/SetAnimTrigger.cs.meta diff --git a/Assets/Fungus/Sprite/Prefabs/Button.prefab b/Assets/Fungus/Sprite/Prefabs/Button.prefab deleted file mode 100644 index f830536da85c51a93fb3cd21c4bb5f6e907b3e03..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8224 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 IPlrJN2Dz9>X8-^I diff --git a/Assets/Fungus/Sprite/Prefabs/Button.prefab.meta b/Assets/Fungus/Sprite/Prefabs/Button.prefab.meta deleted file mode 100644 index c6a9f627..00000000 --- a/Assets/Fungus/Sprite/Prefabs/Button.prefab.meta +++ /dev/null @@ -1,4 +0,0 @@ -fileFormatVersion: 2 -guid: 2830c354320dd41fb8c7fe61f592942c -NativeFormatImporter: - userData: diff --git a/Assets/Fungus/Sprite/Prefabs/GUIButton.prefab b/Assets/Fungus/Sprite/Prefabs/GUIButton.prefab deleted file mode 100644 index 4d49a34625df3b54fe6f5b5959858972f27f02c3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6288 zcmeHLyKfvt7@s2~B)s2w@N!-#q6i{@M1hQ*#7R!r$zeMPiNYG+&7GIr?H;@9!%lUg zKr~3SAc|CUfT$21B|`8&P#^>~1yq>t_s!1kH@jmONKj=?d%LsqoB5vm`({_E!_O;q zrP- zblQxwXb_v;Ocdv8w03R%9n;OPL_Kq9s0W$CiVQE#?z+>-(^nUIQJ$m=Te+b{l6aQp zcT&^W>m8k%IJax5gEaLHI?yn^ML+bdz)R84v@f!peLzriAY5BeN9P*_2nwM|5G!LP zS30!g+@!G{vi$vaQaLLq|3D3dZbSZE0T9c-tVhOL3>~T-%ZCrpp!Gcc2jx>pxj7Iz z4f%IlOt})e*U8pbNa#YW*N3LZWA_MLYu8jW+9XRp|_ z`@{@f22HzPfM6b4!!)EL8UPNIc`~H*~6cI@c`xkpQAp#(M6;P-j`YN0}b=Ba^arkIHG&uy&6T#@QIu z?s2(DaqVk&IDp_Vomw?p`DSX)U7S_9z2qnz5fgAD7^R~E)GAW85v5}RP=A={Tun@x zM_oN!p~JfQ34vubsQ)JMOOl@JtE`(E6L*p<%85L9_(=~x!&=(4w>WH1)yC1asQqW9o99=2scwii!>JFpsjrlGc1g1LS;cTbKBF!jbN=j^E zD$bsh68>R0drlFi%$_S%B+J}BEf#T6^t0#L00K)2(rVNU=H01M;FTJW+^!ieB5-1W z*g`d9!jAzF+l6E_PGTYv&Vb^n;|QZrU`5Mo6}zEMxD1fRq|AU&jTq~wU^h^_tPXOC zew1c8KT5I?0D;B~Q|ddbGSf}s9zRgB3djXVYofr*D&W>^@QbVh4pd9HMZHZA3^Gy{ z16Gm#N|r852Fd{%TQRlgx>HdRoKu6O94ZL@W94x_ z?=oj4*HmF_^{w`&UR6+YtkHUs4C&!&XCUK=VMog9-~=FvR#P2k{UjajvQs7qo~WAs zw^`4nr}bqc2STjJ$yb$`|9z+Y#-_$w0qr;XlpTu+?NpW%Bo#dY;1bD;>fj7>jNBJU zR>U}(+!sh1^v7@VT9N_%@%MOKlAjy58<-bMh07fil<^3V6xvrRWOqy+^#v4`8(}BV z8e|ogtmnq-3fcW0w2=%5bX^;d_5#|-jjxj?wULbH#;ZcQ5e<9v-pO@TG9Ri4aG5U9OSJqKUb*>ay`gDvjYhM^pwI$^N>{jzCpyW8WV&lP)eC9xPv9v0^6H^t0 zXrI`25iPg8Ew(wp+cUHpnsp2Q9cVd8@@r|YsJq8`#Nlk`cZ#-s32*W!oS~*l;T8Me z@+f~}bvFqOh_c62bjyAj@ch;yXI8KQW|T}!uiXFJ?3F}|DLCpul0=Jfr(hW*NwiL`XEuM9sk5wH z%F9H_vTnJCt&(LOh-HcoiToL};It;uR)%=eeWE3EsWqg}@a-yh(PioW<_N4?-Qj2- zug!GM^mI5;1EJf{;bZ_*?whUE1wX<+r}jcGY>kIWulV$MS|aC)4xPX-w?44G)^v?4 z9MfY5)CQeb=>P`D+#g@4@96v%9bl`J&bJ1C?mt2k&d@cA4GvhZe*1LgsQJA8{nxMm zy4d;Xo3|~MfBBbLJh`y+?)z&${Bq`#8=u*`!0*~10V_fSG-w9NXwV1^ym|S0`}}5} z)22~zOs>bd9t_C*T7z|H?reM35?niPxcemWwdxvI=)1!oL2s{h-5Ab4Z+}%zhJDj- YpHn~mxHwzhtX;UdwcBMEdbbGl4~K09A^-pY diff --git a/Assets/Fungus/Sprite/Prefabs/GUIButton.prefab.meta b/Assets/Fungus/Sprite/Prefabs/GUIButton.prefab.meta deleted file mode 100644 index 4dedd3d2..00000000 --- a/Assets/Fungus/Sprite/Prefabs/GUIButton.prefab.meta +++ /dev/null @@ -1,4 +0,0 @@ -fileFormatVersion: 2 -guid: a55e55be9295f4b9db04d66b1f66612c -NativeFormatImporter: - userData: diff --git a/Assets/Fungus/Sprite/Scripts/AnimationListener.cs b/Assets/Fungus/Sprite/Scripts/AnimationListener.cs deleted file mode 100644 index c101bdf3..00000000 --- a/Assets/Fungus/Sprite/Scripts/AnimationListener.cs +++ /dev/null @@ -1,25 +0,0 @@ -using UnityEngine; -using System.Collections; - -namespace Fungus -{ - /** - * Listener component to handle animation events. - * Usage: - * 1. Attach this script to the animated sprite that you want to listen to for events. - * 2. Add an event on the animation timeline - * 3. Edit the event and choose the 'CallRoomMethod' function - * 4. In the string parameters box, enter the name of the method to call in the active Room's script. - */ - public class AnimationListener : MonoBehaviour - { - /** - * Handler method for animation events. - * The string event parameter is used to call a named method on the active room class - */ - void CallRoomMethod(string methodName) - { - // TODO: Execute a FungusScript sequence - } - } -} \ No newline at end of file diff --git a/Assets/Fungus/Sprite/Scripts/AnimationListener.cs.meta b/Assets/Fungus/Sprite/Scripts/AnimationListener.cs.meta deleted file mode 100644 index c3d971ee..00000000 --- a/Assets/Fungus/Sprite/Scripts/AnimationListener.cs.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 6876254e624e04c9c9e4d2d9edb2901c -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: diff --git a/Assets/Fungus/Sprite/Scripts/Parallax.cs b/Assets/Fungus/Sprite/Scripts/Parallax.cs index 64f38a5f..7cd13701 100644 --- a/Assets/Fungus/Sprite/Scripts/Parallax.cs +++ b/Assets/Fungus/Sprite/Scripts/Parallax.cs @@ -5,28 +5,22 @@ namespace Fungus { /** * Attach this component to a sprite object to apply a simple parallax scrolling effect. - * The horizontal and vertical parallax offset is calculated based on the distance from the camera to the position of the parent Room. - * The scale parallax is calculated based on the ratio of the camera size to the size of the Room. This gives a 'dolly zoom' effect. - * Accelerometer based parallax may also be applied on devices that support it. + * The horizontal and vertical parallax offset is calculated based on the distance from the camera to the position of the background sprite. + * The scale parallax is calculated based on the ratio of the camera size to the size of the background sprite. This gives a 'dolly zoom' effect. + * Accelerometer based parallax is also applied on devices that support it. */ public class Parallax : MonoBehaviour { /** - * Scale factor for calculating the parallax offset. - */ - public Vector2 parallaxScale = new Vector2(0.25f, 0f); - - /** - * Scale factor when camera is zoomed out to show the full Room. - * This will typically be set to 1 to show the sprite at normal size. + * The background sprite which this sprite is layered on top of. + * The position of this sprite is used to calculate the parallax offset. */ - public float zoomedOutScale = 1f; + public SpriteRenderer backgroundSprite; /** - * Scale factor when camera is fully zoomed in on Room. - * Setting this to a value greater than 1 will give a 'dolly zoom' effect when zooming in. + * Scale factor for calculating the parallax offset. */ - public float zoomedInScale = 1f; + public Vector2 parallaxScale = new Vector2(0.25f, 0f); /** * Scale factor for calculating parallax offset based on device accelerometer tilt angle. @@ -35,7 +29,6 @@ namespace Fungus public float accelerometerScale = 0.5f; Vector3 startPosition; - // Vector3 startScale; Vector3 acceleration; Vector3 velocity; @@ -44,20 +37,33 @@ namespace Fungus { // Store the starting position and scale of the sprite object startPosition = transform.position; - // startScale = transform.localScale; + + // Default to using parent sprite as background + if (backgroundSprite == null) + { + backgroundSprite = gameObject.GetComponentInParent(); + } } void Update () { + if (backgroundSprite == null) + { + return; + } + Vector3 translation = Vector3.zero; - // Apply parallax translation based on camera position relative to Room + // Apply parallax translation based on camera position relative to background sprite { - Vector3 a = startPosition; + Vector3 a = backgroundSprite.bounds.center; Vector3 b = Camera.main.transform.position; translation = (a - b); translation.x *= parallaxScale.x; translation.y *= parallaxScale.y; + translation.z = 0; + + // TODO: Limit parallax offset to just outside the bounds of the background sprite } // Apply parallax translation based on device accelerometer @@ -72,14 +78,6 @@ namespace Fungus } transform.position = startPosition + translation; - - // Set new scale for sprite - /* - float roomSize = parentRoom.renderer.bounds.extents.y; - float t = Camera.main.orthographicSize / roomSize ; - float scale = Mathf.Lerp (zoomedInScale, zoomedOutScale, t); - transform.localScale = startScale * scale; - */ } } } diff --git a/Assets/Shuttle/ShuttleGame.unity b/Assets/Shuttle/ShuttleGame.unity index 1d5fe2c8dd4132e05c8e2e90ea7393e651f35b39..a1ea153a2c2ed16cb0f591476e3a6300e6332eab 100644 GIT binary patch delta 6689 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 delta 6434 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