public static void Build_Action(string unitPath)
        {
            DirectoryInfo unitDirectory = new DirectoryInfo(unitPath);

            unitName = unitDirectory.Name;
            typeName = "Effect";


            Dictionary <string, List <SpriteAnimationClip> > actionDictionary = new Dictionary <string, List <SpriteAnimationClip> >();
            int    angle      = 0;
            string actionName = "idle";
            bool   flip       = false;

            List <SpriteAnimationClip> clips = new List <SpriteAnimationClip>();

            actionDictionary.Add(actionName, clips);

            SpriteAnimationClip clip = BuildClip(unitDirectory, angle, actionName, loop, flip);

            clips.Add(clip);

            List <AvatarAction> actions = BuildActions(actionDictionary);
            AvatarData          avatar  = BuildAvatarData(actions);

            BuildPrefab(avatar);
        }
        public new SpriteAnimationClip GetClip(string clipName)
        {
            Debug.Log(String.Format("Getting SpriteAnimationClip {0}", clipName));
            SpriteAnimationClip theClip = orig_GetClip(clipName);

            return(orig_GetClip(clipName));
        }
        public void LoadCustomAnimClips()
        {
            Debug.Log("LOADING THE ANIM CLIPS!!!!!");
            List <string> paths = PathMan.GetModFiles(PathMan.ANIM_CLIPS_PATH, ".png");

            Dictionary <string, AnimClipInfo> clipInfos = Utils.GetAnimClipInfos();
            AnimClipInfo defaultClipInto = new AnimClipInfo(); // if it is not defined in the XML

            // Pattern to be considered a frame: alphanumeric "ID" portion and the frame number, seperated with an underscore.
            Regex frameMatchRegex = new Regex(@"(\w+)_([0-9]+)", RegexOptions.IgnoreCase);

            // The key is the id of the anim clip, the value is the list of frames for that clip.
            Dictionary <string, List <AnimClipFrame> > animClips = new Dictionary <string, List <AnimClipFrame> >();

            foreach (string path in paths)
            {
                Match result = frameMatchRegex.Match(path);
                if (result.Success)
                {
                    AnimClipFrame newAnimClipFrame = new AnimClipFrame(path, result.Groups[1].Value, int.Parse(result.Groups[2].Value));
                    // Make a new list for the anim clip key if it doesn't exist already
                    if (!animClips.ContainsKey(newAnimClipFrame.key))
                    {
                        animClips[newAnimClipFrame.key] = new List <AnimClipFrame>();
                    }
                    animClips[newAnimClipFrame.key].Add(newAnimClipFrame);
                }
            }

            foreach (string key in animClips.Keys)
            {
                Debug.Log(String.Format("Getting files for anim clip {0} ", key));
                List <AnimClipFrame> currentFrames = animClips[key];
                // sorting is required since the files could be like
                // Sprite_9.png, Sprite_10.png (the 10 would be first in lexographic sort!)
                currentFrames.Sort();

                // Make an anim clip now.
                List <string> fullPaths = new List <string>();
                foreach (AnimClipFrame clip in currentFrames)
                {
                    fullPaths.Add(clip.fullPath);
                }
                AnimClipInfo newInfo;
                if (!clipInfos.ContainsKey(key))
                {
                    newInfo = defaultClipInto;
                }
                else
                {
                    newInfo = clipInfos[key];
                }
                SpriteAnimationClip newClip = Utils.LoadNewSpriteAnimationClip(fullPaths.ToArray(), newInfo);
                this.spriteAnimClips[key] = newClip;
                Debug.Log("Done with this anim clip!");
            }
        }
Exemplo n.º 4
0
    private void Parse(string atlasName, LuaTable animationCfg)
    {
        List <Sprite> spriteList = ResourceManager.Instance.LoadSpriteAtlas(atlasName);
        Dictionary <string, SpriteAnimationClip> clipMap = new Dictionary <string, SpriteAnimationClip>();

        for (int i = 0; i < spriteList.Count; i++)
        {
            if (spriteList[i] == null)
            {
                continue;
            }

            string[]            names    = spriteList[i].name.Split('_');
            string              action   = names[0];
            string              dir      = names[1];
            string              index    = names[2];
            string              clipName = GetClipName(action, dir);
            SpriteAnimationClip clip     = null;
            if (!clipMap.TryGetValue(clipName, out clip))
            {
                clip = new SpriteAnimationClip();
                clipMap[clipName] = clip;
                clip.Name         = clipName;
                if (animationCfg != null && animationCfg.ContainsKey <string>(action))
                {
                    clip.Length = animationCfg.GetInPath <float>(string.Format("{0}.clip_length", action));
                    if (animationCfg.GetInPath <string>(string.Format("{0}.loop", action)) == "once")
                    {
                        clip.WrapMode = SpriteAnimation.AnimationWrapMode.eOnce;
                    }
                    else
                    {
                        clip.WrapMode = SpriteAnimation.AnimationWrapMode.eLoop;
                    }
                }
                else
                {
                    Debuger.LogError("common", "ArmySpriteAnimation parse animationCfg have problem!");
                    clip.Length   = 1;
                    clip.WrapMode = SpriteAnimation.AnimationWrapMode.eLoop;
                }
                clip.SpriteList = new List <Sprite>();
            }

            clip.SpriteList.Add(spriteList[i]);
        }

        List <SpriteAnimationClip> clipList = new List <SpriteAnimationClip>();

        foreach (var item in clipMap)
        {
            clipList.Add(item.Value);
        }

        Animation = gameObject.AddComponent <SpriteAnimation>();
        Animation.Init(clipList);
    }
        void OnGUI()
        {
            EditorGUILayout.BeginVertical();
            {
                actorName  = EditorGUILayout.TextField("角色名称", actorName);
                actionName = EditorGUILayout.TextField("动作名称", actionName);
                angle      = EditorGUILayout.FloatField("面向角度", angle);
                flip       = EditorGUILayout.Toggle("水平翻转", flip);


                if (GUILayout.Button("生成"))
                {
                    List <Sprite> sprites = new List <Sprite>();

                    foreach (Object obj in Selection.objects)
                    {
                        Sprite sprite = obj as Sprite;
                        if (sprite == null)
                        {
                            string assetPath = AssetDatabase.GetAssetPath(obj);
                            sprite = AssetDatabase.LoadAssetAtPath <Sprite>(assetPath);
                        }

                        if (sprite != null)
                        {
                            sprites.Add(sprite);
                        }
                    }

                    string filename = actorName + "_" + actionName + "_" + angle;
                    string path     = EditorUtility.SaveFilePanelInProject("Save", filename, "asset", "message");

                    if (path != "")
                    {
                        SpriteAnimationClip clip = ScriptableObject.CreateInstance <SpriteAnimationClip>();
                        clip.flip       = flip;
                        clip.angle      = angle;
                        clip.actionName = actionName;
                        sprites.Sort(
                            delegate(Sprite s1, Sprite s2)
                        {
                            return(s1.name.CompareTo(s2.name));
                        }
                            );
                        clip.frames = sprites.ToArray();

                        AssetDatabase.CreateAsset(clip, path);

                        AssetDatabase.SaveAssets();
                        EditorUtility.FocusProjectWindow();
                        Selection.activeObject = clip;
                    }
                }
            }
            EditorGUILayout.EndVertical();
        }
Exemplo n.º 6
0
    void OnClipActive(SpriteAnimationClip clip)
    {
        if (currClip == clip)
        {
            return;
        }

        InitClips();
        //Debug.LogError("Active:" + clip.name);
        currClip        = clip;
        currClipSprites = clip.sprites;
        spriteIndex     = 0;
        currTime        = -1;
    }
Exemplo n.º 7
0
    void OnClipActive(SpriteAnimationClip clip)
    {
        if(currClip == clip)
        {
            return;
        }

        InitClips();
        //Debug.LogError("Active:" + clip.name);
        currClip = clip;
        currClipSprites = clip.sprites;
        spriteIndex = 0;
        currTime = -1;
    }
        public static SpriteAnimationClip LoadNewSpriteAnimationClip(string[] FilePaths, AnimClipInfo theInfo)
        {
            Debug.Log("Hi, welcome to LoadNewSpriteAnimationClip!");
            List <Sprite> sprites = new List <Sprite>();
            List <float>  numbers = new List <float>();

            for (int i = 0; i < FilePaths.Length; i++)
            {
                numbers.Add((float)i);
                Debug.Log(String.Format("FRAME {0} IMAGE {1}", i, FilePaths[i]));
                sprites.Add(LoadNewSprite(FilePaths[i]));
            }
            SpriteAnimationClip newClip = new SpriteAnimationClip(theInfo.keyFrameLength, numbers.ToArray(), sprites.ToArray());

            return(newClip);
        }
        public static void Build_Color_Level(string unitPath)
        {
            DirectoryInfo unitDirectory = new DirectoryInfo(unitPath);

            unitName = unitDirectory.Name;
            typeName = unitDirectory.Parent.Name;


            Dictionary <string, List <SpriteAnimationClip> > actionDictionary = new Dictionary <string, List <SpriteAnimationClip> >();

            foreach (DirectoryInfo colorDirectory in unitDirectory.GetDirectories())
            {
                int i     = 0;
                int count = colorDirectory.GetDirectories().Length;
                foreach (DirectoryInfo levelDirectory in colorDirectory.GetDirectories())
                {
                    i++;
                    string actionName = colorDirectory.Name + "_" + levelDirectory.Name;
                    int    angle      = 0;
                    bool   loop       = false;
                    bool   flip       = false;

                    List <SpriteAnimationClip> clips = null;
                    if (!actionDictionary.TryGetValue(actionName, out clips))
                    {
                        clips = new List <SpriteAnimationClip>();
                        actionDictionary.Add(actionName, clips);
                    }


                    if (EditorUtility.DisplayCancelableProgressBar("Build_Level " + typeName + "/" + unitName + "/" + actionName, i + "/" + count, (float)i / (float)count))
                    {
                        break;
                    }
                    SpriteAnimationClip clip = BuildClip(levelDirectory, angle, actionName, loop, flip);
                    clip.loop = clip.frames.Length > 1;
                    clips.Add(clip);
                }
            }

            List <AvatarAction> actions = BuildActions(actionDictionary);
            AvatarData          avatar  = BuildAvatarData(actions);

            BuildPrefab(avatar);
        }
        public static SpriteAnimationClip BuildClip(DirectoryInfo directory, int angle, string actionName, bool loop = false, bool flip = false)
        {
            FileInfo[] files = directory.GetFiles(fileFormat);


            List <Sprite> sprites = new List <Sprite>();

            foreach (FileInfo file in files)
            {
                Sprite sprite = AssetDatabase.LoadAssetAtPath <Sprite>(DataPathToAssetPath(file.FullName));
                sprites.Add(sprite);
            }

            sprites.Sort(
                delegate(Sprite s1, Sprite s2)
            {
                return(s1.name.CompareTo(s2.name));
            }
                );


            SpriteAnimationClip clip = ScriptableObject.CreateInstance <SpriteAnimationClip>();

            clip.frames     = sprites.ToArray();
            clip.actionName = actionName;
            clip.angle      = angle;
            clip.loop       = loop;
            clip.flip       = flip;

            string path = SpriteAnimationPath + "/" + typeName + "/" + unitName + ".asset";

            CheckPath(path);
            AssetDatabase.CreateAsset(clip, path);
            AssetDatabase.SaveAssets();
            return(clip);
        }
Exemplo n.º 11
0
        /// <summary>
        /// Initialize to implement per main type.
        /// </summary>
        override public void Initialize()
        {
            // create the scene
            GameScene scene = new GameScene();

            // create camera object
            camera = new GameObject();
            Camera cameraComponent = new Camera();

            cameraComponent.CameraType = CameraType.Orthographic;
            Point screenSize = Managers.GraphicsManager.ViewportSize;
            float ratio      = (float)screenSize.X / (float)screenSize.Y;

            cameraComponent.ForceScreenSize = new Point((int)(50f * ratio), (int)(25f * ratio));
            camera.AddComponent(cameraComponent);
            camera.SceneNode.Position  = new Vector3(50, 100, 150);
            camera.SceneNode.RotationX = -(float)System.Math.PI * 0.25f;
            camera.Parent = scene.Root;

            // create a tilemap fsor the floor
            TileMap tilemap = scene.Root.AddComponent(new TileMap(Vector2.One * 10f, 10)) as TileMap;

            // create floor material
            BasicMaterial tilesMaterial = new BasicMaterial();

            tilesMaterial.Texture        = Resources.GetTexture("game/floor");
            tilesMaterial.TextureEnabled = true;
            tilesMaterial.SpecularColor  = Color.Black;

            // create some floor tiles
            for (int i = 0; i < 10; ++i)
            {
                for (int j = 0; j < 10; ++j)
                {
                    GameObject    tile      = tilemap.GetTile(new Point(i, j));
                    ShapeRenderer tileModel = tile.AddComponent(new ShapeRenderer(ShapeMeshes.Plane)) as ShapeRenderer;
                    tileModel.SetMaterial(tilesMaterial);
                    tile.SceneNode.Scale     = Vector3.One * 5f;
                    tile.SceneNode.RotationX = (float)System.Math.PI * -0.5f;
                }
            }

            // create random grass sprites
            System.Random rand = new System.Random();
            for (int i = 0; i < 100; ++i)
            {
                GameObject grassObj = new GameObject("grass");
                grassObj.SceneNode.Scale    = Vector3.One * 5;
                grassObj.SceneNode.Position = new Vector3((float)rand.NextDouble() * 90f, 2.5f, (float)rand.NextDouble() * 90f);
                grassObj.AddComponent(new BillboardRenderer("game/grass", faceCamera: false));
                grassObj.Parent = scene.Root;
            }

            // create a tree
            GameObject treeObj = new GameObject("tree");

            treeObj.SceneNode.Scale    = Vector3.One * 30;
            treeObj.SceneNode.Position = new Vector3(50, 15f, 25);
            treeObj.AddComponent(new BillboardRenderer("game/tree", faceCamera: false));
            treeObj.Parent = scene.Root;

            // create a spritesheet with animations (8 steps on X axis, 4 directions on Y axis)
            SpriteSheet sp = new SpriteSheet(new Point(8, 4));

            // add character sprite
            GameObject spriteObj = new GameObject("player");

            spriteObj.SceneNode.Scale    = Vector3.One * 10;
            spriteObj.SceneNode.Position = new Vector3(50, 5, 50);
            spriteObj.AddComponent(new SpriteRenderer(sp, "game/rpg_sprite_walk", faceCamera: false));
            spriteObj.Parent = scene.Root;

            // define walking animation and play on character
            SpriteAnimationClip animationClip = new SpriteAnimationClip(startStep: 0, endStep: 7, speed: 10f, loop: true);

            spriteObj.GetComponent <SpriteRenderer>().PlayAnimation(animationClip);

            // set scene
            GeonBitMain.Instance.Application.LoadScene(scene);
        }
Exemplo n.º 12
0
 /// <summary>
 /// Play animation clip.
 /// </summary>
 /// <param name="clip">Animation clip to play.</param>
 /// <param name="speed">Animation playing speed.</param>
 public void PlayAnimation(SpriteAnimationClip clip, float speed = 1f)
 {
     _entity.PlayAnimation(clip, speed);
 }
Exemplo n.º 13
0
 public void Stop()
 {
     currClip        = null;
     currClipSprites = null;
 }
Exemplo n.º 14
0
        public static void Build_Angle_Action(string unitPath)
        {
            DirectoryInfo unitDirectory = new DirectoryInfo(unitPath);

            unitName = unitDirectory.Name;
            typeName = unitDirectory.Parent.Name;

            Dictionary <string, List <SpriteAnimationClip> > actionDictionary = new Dictionary <string, List <SpriteAnimationClip> >();

            foreach (DirectoryInfo angleDirectory in unitDirectory.GetDirectories())
            {
                int i     = 0;
                int count = angleDirectory.GetDirectories().Length;
                foreach (DirectoryInfo actionDirectory in angleDirectory.GetDirectories())
                {
                    int angle = 0;
                    if (angleDirectory.Name == "back")
                    {
                        angle = backAngle;
                    }
                    else if (angleDirectory.Name == "front")
                    {
                        angle = frontAngle;
                    }
                    else
                    {
                        angle = Convert.ToInt32(angleDirectory.Name);
                    }

                    string actionName = actionDirectory.Name;
                    bool   loop       = ArrayUtility.IndexOf <string>(loopActions, actionName) != -1;
                    bool   flip       = false;

                    List <SpriteAnimationClip> clips = null;
                    if (!actionDictionary.TryGetValue(actionName, out clips))
                    {
                        clips = new List <SpriteAnimationClip>();
                        actionDictionary.Add(actionName, clips);
                    }

                    i++;
                    if (EditorUtility.DisplayCancelableProgressBar("Build_Angle_Action " + typeName + "/" + unitName + "/" + actionName, i + "/" + count, (float)i / (float)count))
                    {
                        break;
                    }

                    SpriteAnimationClip clip = BuildClip(actionDirectory, angle, actionName, loop, flip);
                    clips.Add(clip);

                    if (needFlip)
                    {
                        if (angle != 0 && angle != 180)
                        {
                            angle = 360 - angle;
                            flip  = true;
                            clip  = BuildClip(actionDirectory, angle, actionName, loop, flip);
                            clips.Add(clip);
                        }
                    }
                }
            }

            List <AvatarAction> actions = BuildActions(actionDictionary);
            AvatarData          avatar  = BuildAvatarData(actions);

            BuildPrefab(avatar);
        }
Exemplo n.º 15
0
 public void Stop()
 {
     currClip = null;
     currClipSprites = null;
 }