├── .gitignore ├── LICENSE ├── LICENSE.meta ├── README.md ├── README.md.meta ├── Scripts.meta ├── Scripts ├── Cmd.cs ├── Cmd.cs.meta ├── IMessenger.cs ├── IMessenger.cs.meta ├── IRenderer.cs ├── IRenderer.cs.meta ├── IUpdater.cs ├── IUpdater.cs.meta ├── Sub.cs ├── Sub.cs.meta ├── UniTEA.asmdef ├── UniTEA.asmdef.meta ├── UniTEA.cs ├── UniTEA.cs.meta ├── Utils.meta └── Utils │ ├── OneValueMsg.cs │ ├── OneValueMsg.cs.meta │ ├── UniTEA_Utils.asmdef │ └── UniTEA_Utils.asmdef.meta ├── images.meta ├── images ├── logo.png └── logo.png.meta ├── package.json └── package.json.meta /.gitignore: -------------------------------------------------------------------------------- 1 | 2 | # Created by https://www.gitignore.io/api/unity 3 | # Edit at https://www.gitignore.io/?templates=unity 4 | 5 | ### Unity ### 6 | # This .gitignore file should be placed at the root of your Unity project directory 7 | # 8 | # Get latest from https://github.com/github/gitignore/blob/master/Unity.gitignore 9 | /[Ll]ibrary/ 10 | /[Tt]emp/ 11 | /[Oo]bj/ 12 | /[Bb]uild/ 13 | /[Bb]uilds/ 14 | /[Ll]ogs/ 15 | /[Mm]emoryCaptures/ 16 | 17 | # Never ignore Asset meta data 18 | !/[Aa]ssets/**/*.meta 19 | 20 | # Uncomment this line if you wish to ignore the asset store tools plugin 21 | # /[Aa]ssets/AssetStoreTools* 22 | 23 | # TextMesh Pro files 24 | [Aa]ssets/TextMesh*Pro/ 25 | 26 | # Autogenerated Jetbrains Rider plugin 27 | [Aa]ssets/Plugins/Editor/JetBrains* 28 | 29 | # Visual Studio cache directory 30 | .vs/ 31 | 32 | # Gradle cache directory 33 | .gradle/ 34 | 35 | # Autogenerated VS/MD/Consulo solution and project files 36 | ExportedObj/ 37 | .consulo/ 38 | *.csproj 39 | *.unityproj 40 | *.sln 41 | *.suo 42 | *.tmp 43 | *.user 44 | *.userprefs 45 | *.pidb 46 | *.booproj 47 | *.svd 48 | *.pdb 49 | *.mdb 50 | *.opendb 51 | *.VC.db 52 | 53 | # Unity3D generated meta files 54 | *.pidb.meta 55 | *.pdb.meta 56 | *.mdb.meta 57 | 58 | # Unity3D generated file on crash reports 59 | sysinfo.txt 60 | 61 | # Builds 62 | *.apk 63 | *.unitypackage 64 | 65 | # Crashlytics generated file 66 | crashlytics-build.properties 67 | 68 | 69 | # End of https://www.gitignore.io/api/unity 70 | .DS_Store 71 | .vscode/ 72 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2019 Shuji Oba 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /LICENSE.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 87f1195a5c3d2422c84dc4ce58a820a9 3 | DefaultImporter: 4 | externalObjects: {} 5 | userData: 6 | assetBundleName: 7 | assetBundleVariant: 8 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # ![logo](./images/logo.png) 2 | 3 | UniTEA is an implementation of The Elm Architecture for Unity3D. 4 | 5 | ## Environment 6 | 7 | - Unity3D 2018.4 or higher 8 | - C# 7.0 9 | 10 | ## Install 11 | 12 | Add line in Packages/manifest.json 13 | 14 | ```json 15 | { 16 | "dependencies" : { 17 | ... 18 | "com.uzimaru0000.unitea": "https://github.com/uzimaru0000/UniTEA.git", 19 | ... 20 | } 21 | } 22 | ``` 23 | 24 | ## Usage 25 | 26 | 1. Create your application Model. You should use struct. 27 | 28 | ```c# 29 | public struct Model 30 | { 31 | public int count; 32 | } 33 | ``` 34 | 35 | 2. Create a message for your application. You should use enum. 36 | 37 | ```c# 38 | public enum Msg 39 | { 40 | Increase, 41 | Decrease 42 | } 43 | ``` 44 | 45 | 3. Create a class that wraps the message. Implement the `IMessenger` interface. 46 | 47 | ```c# 48 | using UniTEA; 49 | 50 | public class IncreaseMsg : IMessenger 51 | { 52 | public Msg GetMessage() => Msg.Increase; 53 | } 54 | 55 | public class DecreaseMsg : IMessenger 56 | { 57 | public Msg GetMessage() => Msg.Decrease; 58 | } 59 | ``` 60 | 61 | 4. Create Updater class. Implement the `IUpdater` interface. 62 | 63 | ```c# 64 | using UniTEA; 65 | 66 | public class Updater : IUpdater 67 | { 68 | public (Model, Cmd) Update(IMessenger msg, Model model) 69 | { 70 | switch (msg) 71 | { 72 | case IncreaseMsg _: 73 | return (new Model 74 | { 75 | count = model.count + 1; 76 | }, Cmd.none); 77 | case DecreaseMsg _: 78 | return (new Model 79 | { 80 | count = model.count - 1; 81 | }, Cmd.none); 82 | default: 83 | return (model, Cmd.none); 84 | } 85 | } 86 | } 87 | ``` 88 | 89 | 5. Create Renderer class. Implement the `IRenderer` interface. 90 | 91 | ```c# 92 | using UnityEngine; 93 | using UnityEngine.UI; 94 | using UniTEA; 95 | 96 | public class Renderer : MonoBehaviour, IRenderer 97 | { 98 | [SerializeField] 99 | Text display; 100 | [SerializeField] 101 | Button increaseBtn; 102 | [SerializeField] 103 | Button decreaseBtn; 104 | 105 | public void Init(System.Action> dispatcher) 106 | { 107 | increaseBtn.onClick.AddListener(() => dispatcher(new IncreaseMsg())); 108 | decreaseBtn.onClick.AddListener(() => dispatcher(new DecreaseMsg())); 109 | } 110 | 111 | public void Renderer(Model model) 112 | { 113 | display.text = model.count.ToString(); 114 | } 115 | } 116 | ``` 117 | 118 | 6. Create TEAManager class. Make it singleton if necessary. For the UniTEA object, provide an initialization function, an instance of Updater, and an instance of Renderer. 119 | 120 | ```c# 121 | using UniTEA; 122 | using UnityEngine; 123 | 124 | public class TEAManager : MonoBehaviour 125 | { 126 | UniTEA tea; 127 | 128 | [SerializeField] 129 | new Renderer renderer; 130 | 131 | void Start() 132 | { 133 | tea = new TEA( 134 | () => (new Model(), Cmd.none), 135 | new Updater(), 136 | renderer 137 | ); 138 | } 139 | } 140 | ``` 141 | 142 | ## Example 143 | 144 | **TODO: Coming soon!** 145 | 146 | **I'm happy if you contribute!** 147 | 148 | ## Development 149 | 150 | 1. Make your project and make directory Packages in it. 151 | 2. In Packages, `git clone https://github.com/uzimaru0000/UniTEA.git` 152 | 3. Install UniTEA from clone. 153 | 154 | ## Contribution 155 | 156 | 1. Fork it 157 | 2. Create your feature branch (git checkout -b my-new-feature) 158 | 3. Commit your changes (git commit -am 'Add some feature') 159 | 4. Push to the branch (git push origin my-new-feature) 160 | 5. Create new Pull Request 161 | -------------------------------------------------------------------------------- /README.md.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: f26b8e1ce0dd54f31b5713ff2a0fda1b 3 | TextScriptImporter: 4 | externalObjects: {} 5 | userData: 6 | assetBundleName: 7 | assetBundleVariant: 8 | -------------------------------------------------------------------------------- /Scripts.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 42f70a2f0e11d48259f4409e638004dc 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Scripts/Cmd.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace UniTEA 4 | { 5 | public struct Cmd where T : struct 6 | { 7 | public static Cmd none = new Cmd(_ => { }); 8 | 9 | public static Cmd batch(Cmd[] cmds) 10 | { 11 | return new Cmd(d => 12 | { 13 | foreach (Cmd cmd in cmds) 14 | { 15 | cmd.exec(d); 16 | } 17 | }); 18 | } 19 | 20 | Action> task; 21 | 22 | public void exec(Dispatcher d) => this.task(d); 23 | 24 | public Cmd(Action> task) 25 | { 26 | this.task = task; 27 | } 28 | } 29 | } -------------------------------------------------------------------------------- /Scripts/Cmd.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: d6d14220f56b84af6987c2efc5884687 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Scripts/IMessenger.cs: -------------------------------------------------------------------------------- 1 | namespace UniTEA 2 | { 3 | public interface IMessenger where T : struct 4 | { 5 | T GetMessage(); 6 | } 7 | } -------------------------------------------------------------------------------- /Scripts/IMessenger.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: e696fa66bbdc74b9da8800fc6169de96 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Scripts/IRenderer.cs: -------------------------------------------------------------------------------- 1 | namespace UniTEA 2 | { 3 | public interface IRenderer 4 | where T : struct 5 | where U : struct 6 | { 7 | void Init(Dispatcher dispatcher); 8 | void Render(T model); 9 | } 10 | } -------------------------------------------------------------------------------- /Scripts/IRenderer.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 17ce29027a48e4090a868486ef18ce63 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Scripts/IUpdater.cs: -------------------------------------------------------------------------------- 1 | namespace UniTEA 2 | { 3 | public interface IUpdater 4 | where T : struct 5 | where U : struct 6 | { 7 | (T, Cmd) Update(IMessenger msg, T model); 8 | } 9 | } -------------------------------------------------------------------------------- /Scripts/IUpdater.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 02a4e60ea0d85407999b2404212cf77d 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Scripts/Sub.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using UnityEngine; 4 | 5 | namespace UniTEA 6 | { 7 | public class Sub 8 | { 9 | public static Sub none 10 | { 11 | get => new Sub(new NoneEffect()); 12 | } 13 | 14 | public static Sub batch(Sub[] subs) 15 | { 16 | var effects = new IEffect[subs.Length]; 17 | for (var i = 0; i < subs.Length; i++) 18 | { 19 | var sub = subs[i]; 20 | subs[i].effect.OnOccurrence -= subs[i].Invoke; 21 | effects[i] = subs[i].effect; 22 | } 23 | return new Sub(new BatchingEffect(effects)); 24 | } 25 | 26 | public event Action OnWatch; 27 | 28 | IEffect effect; 29 | 30 | void Invoke(T val) => OnWatch?.Invoke(val); 31 | 32 | public Sub(IEffect effect) 33 | { 34 | this.effect = effect; 35 | this.effect.OnOccurrence += Invoke; 36 | } 37 | 38 | public Sub Map(Func func) 39 | { 40 | this.effect.OnOccurrence -= Invoke; 41 | return new Sub(new MappedEffect(this.effect, func)); 42 | } 43 | } 44 | 45 | public interface IEffect 46 | { 47 | event Action OnOccurrence; 48 | } 49 | 50 | class NoneEffect : IEffect 51 | { 52 | public event Action OnOccurrence; 53 | } 54 | 55 | class BatchingEffect : IEffect 56 | { 57 | public event Action OnOccurrence; 58 | 59 | public BatchingEffect(IEffect[] effects) 60 | { 61 | foreach (var effect in effects) 62 | { 63 | effect.OnOccurrence += v => OnOccurrence?.Invoke(v); 64 | } 65 | } 66 | } 67 | 68 | class MappedEffect : IEffect 69 | { 70 | public event Action OnOccurrence; 71 | 72 | public MappedEffect(IEffect effect, Func func) 73 | { 74 | effect.OnOccurrence += val => OnOccurrence.Invoke(func(val)); 75 | } 76 | } 77 | } -------------------------------------------------------------------------------- /Scripts/Sub.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 350742452407e4c5282f861ff7f40395 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Scripts/UniTEA.asmdef: -------------------------------------------------------------------------------- 1 | { 2 | "name": "UniTEA", 3 | "references": [], 4 | "optionalUnityReferences": [], 5 | "includePlatforms": [], 6 | "excludePlatforms": [], 7 | "allowUnsafeCode": false, 8 | "overrideReferences": false, 9 | "precompiledReferences": [], 10 | "autoReferenced": true, 11 | "defineConstraints": [] 12 | } 13 | -------------------------------------------------------------------------------- /Scripts/UniTEA.asmdef.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 379393936f05549a0801b11d48ba008a 3 | AssemblyDefinitionImporter: 4 | externalObjects: {} 5 | userData: 6 | assetBundleName: 7 | assetBundleVariant: 8 | -------------------------------------------------------------------------------- /Scripts/UniTEA.cs: -------------------------------------------------------------------------------- 1 | using System.Threading.Tasks; 2 | 3 | namespace UniTEA 4 | { 5 | public delegate void Dispatcher(IMessenger msg) where T : struct; 6 | 7 | public class UniTEA 8 | where T : struct 9 | where U : struct 10 | { 11 | 12 | IUpdater updater; 13 | IRenderer renderer; 14 | System.Func>> subscription; 15 | T model; 16 | 17 | Sub> currentSubscription; 18 | 19 | public UniTEA( 20 | System.Func<(T, Cmd)> init, 21 | IUpdater updater, 22 | IRenderer renderer 23 | ) : this(init, updater, renderer, _ => Sub>.none) { } 24 | 25 | public UniTEA( 26 | System.Func<(T, Cmd)> init, 27 | IUpdater updater, 28 | IRenderer renderer, 29 | System.Func>> subscription 30 | ) 31 | { 32 | this.updater = updater; 33 | this.renderer = renderer; 34 | this.subscription = subscription; 35 | 36 | var (initModel, cmd) = init.Invoke(); 37 | this.model = initModel; 38 | 39 | cmd.exec(Dispatch); 40 | 41 | this.renderer.Init(Dispatch); 42 | renderer.Render(this.model); 43 | 44 | UpdateSubscription(); 45 | } 46 | 47 | public void Dispatch(IMessenger msg) 48 | { 49 | var (newModel, cmd) = this.updater.Update(msg, model); 50 | if (!Equals(newModel, model)) 51 | { 52 | this.renderer.Render(newModel); 53 | this.model = newModel; 54 | } 55 | cmd.exec(Dispatch); 56 | UpdateSubscription(); 57 | } 58 | 59 | void UpdateSubscription() 60 | { 61 | if (this.currentSubscription != null) 62 | { 63 | this.currentSubscription.OnWatch -= Dispatch; 64 | } 65 | this.currentSubscription = this.subscription(this.model); 66 | this.currentSubscription.OnWatch += Dispatch; 67 | } 68 | } 69 | } -------------------------------------------------------------------------------- /Scripts/UniTEA.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: b37e2af9cdda0471aacc51db81f5dcc2 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Scripts/Utils.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 3ef67bb7b560c4e818e4a8ab0feeebf4 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Scripts/Utils/OneValueMsg.cs: -------------------------------------------------------------------------------- 1 | namespace UniTEA.Utils 2 | { 3 | public abstract class OneValueMsg : IMessenger 4 | where T : struct 5 | { 6 | public abstract T GetMessage(); 7 | 8 | public U value 9 | { 10 | get; 11 | } 12 | 13 | public OneValueMsg(U value) 14 | { 15 | this.value = value; 16 | } 17 | } 18 | } -------------------------------------------------------------------------------- /Scripts/Utils/OneValueMsg.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 34e5fb5bcdd974758a069c943f6bc0b8 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Scripts/Utils/UniTEA_Utils.asmdef: -------------------------------------------------------------------------------- 1 | { 2 | "name": "UniTEA_Utils", 3 | "references": [ 4 | "UniTEA" 5 | ], 6 | "optionalUnityReferences": [], 7 | "includePlatforms": [], 8 | "excludePlatforms": [], 9 | "allowUnsafeCode": false, 10 | "overrideReferences": false, 11 | "precompiledReferences": [], 12 | "autoReferenced": true, 13 | "defineConstraints": [] 14 | } 15 | -------------------------------------------------------------------------------- /Scripts/Utils/UniTEA_Utils.asmdef.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 38990690746584fe38171a90390af55c 3 | AssemblyDefinitionImporter: 4 | externalObjects: {} 5 | userData: 6 | assetBundleName: 7 | assetBundleVariant: 8 | -------------------------------------------------------------------------------- /images.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 8b61103fff26149b587ac1089e132e85 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /images/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/uzimaru0000/UniTEA/9aae57e5d246cddb629313af8542d5c58b697642/images/logo.png -------------------------------------------------------------------------------- /images/logo.png.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 45bbacdb1ddcd4a35a8f11a8198e7025 3 | TextureImporter: 4 | fileIDToRecycleName: {} 5 | externalObjects: {} 6 | serializedVersion: 9 7 | mipmaps: 8 | mipMapMode: 0 9 | enableMipMap: 0 10 | sRGBTexture: 1 11 | linearTexture: 0 12 | fadeOut: 0 13 | borderMipMap: 0 14 | mipMapsPreserveCoverage: 0 15 | alphaTestReferenceValue: 0.5 16 | mipMapFadeDistanceStart: 1 17 | mipMapFadeDistanceEnd: 3 18 | bumpmap: 19 | convertToNormalMap: 0 20 | externalNormalMap: 0 21 | heightScale: 0.25 22 | normalMapFilter: 0 23 | isReadable: 0 24 | streamingMipmaps: 0 25 | streamingMipmapsPriority: 0 26 | grayScaleToAlpha: 0 27 | generateCubemap: 6 28 | cubemapConvolution: 0 29 | seamlessCubemap: 0 30 | textureFormat: 1 31 | maxTextureSize: 2048 32 | textureSettings: 33 | serializedVersion: 2 34 | filterMode: -1 35 | aniso: -1 36 | mipBias: -100 37 | wrapU: 1 38 | wrapV: 1 39 | wrapW: 1 40 | nPOTScale: 0 41 | lightmap: 0 42 | compressionQuality: 50 43 | spriteMode: 1 44 | spriteExtrude: 1 45 | spriteMeshType: 1 46 | alignment: 0 47 | spritePivot: {x: 0.5, y: 0.5} 48 | spritePixelsToUnits: 100 49 | spriteBorder: {x: 0, y: 0, z: 0, w: 0} 50 | spriteGenerateFallbackPhysicsShape: 1 51 | alphaUsage: 1 52 | alphaIsTransparency: 1 53 | spriteTessellationDetail: -1 54 | textureType: 8 55 | textureShape: 1 56 | singleChannelComponent: 0 57 | maxTextureSizeSet: 0 58 | compressionQualitySet: 0 59 | textureFormatSet: 0 60 | platformSettings: 61 | - serializedVersion: 2 62 | buildTarget: DefaultTexturePlatform 63 | maxTextureSize: 2048 64 | resizeAlgorithm: 0 65 | textureFormat: -1 66 | textureCompression: 1 67 | compressionQuality: 50 68 | crunchedCompression: 0 69 | allowsAlphaSplitting: 0 70 | overridden: 0 71 | androidETC2FallbackOverride: 0 72 | spriteSheet: 73 | serializedVersion: 2 74 | sprites: [] 75 | outline: [] 76 | physicsShape: [] 77 | bones: [] 78 | spriteID: fa8ba8ba78cd64d41ad7c54cf5d52f37 79 | vertices: [] 80 | indices: 81 | edges: [] 82 | weights: [] 83 | spritePackingTag: 84 | pSDRemoveMatte: 0 85 | pSDShowRemoveMatteOption: 0 86 | userData: 87 | assetBundleName: 88 | assetBundleVariant: 89 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "com.uzimaru0000.unitea", 3 | "displayName": "UniTEA", 4 | "version": "0.3.1", 5 | "unity": "2018.4", 6 | "description": "Implementation of The Elm Architecture for Unity3D", 7 | "keywords": ["Framework", "TEA", "State"], 8 | "category": "Framework", 9 | "dependencies": {} 10 | } 11 | -------------------------------------------------------------------------------- /package.json.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 17baf2436a79c4e97815e03574e4bcb0 3 | TextScriptImporter: 4 | externalObjects: {} 5 | userData: 6 | assetBundleName: 7 | assetBundleVariant: 8 | --------------------------------------------------------------------------------