示例#1
0
        void Parse(string animationSpec)
        {
            List <AnimationItem> parsedItems = new List <AnimationItem> ();

            string[]      items = animationSpec.Split(';');
            AnimationItem last  = null;

            foreach (var item in items)
            {
                int           i     = item.IndexOf(':');
                var           tname = i != -1 ? item.Substring(0, i) : item;
                int           pause;
                Type          type;
                AnimationItem aitem = null;

                if (animationItems.TryGetValue(tname, out type))
                {
                    aitem = (AnimationItem)Activator.CreateInstance(type);
                    aitem.Parse(item);
                }
                else if (int.TryParse(item, out pause))
                {
                    aitem = new PauseItem()
                    {
                        Pause = pause
                    };
                }
                else
                {
                    // It must be an image
                    var id  = ImageService.GetStockId(addin, item, size);
                    var img = ImageService.GetPixbuf(id, size);
                    if (img == null)
                    {
                        continue;
                    }
                    aitem = new ImageItem()
                    {
                        Image = img
                    };
                }
                if (last != null)
                {
                    last.NextItem = aitem;
                }
                aitem.PreviousItem = last;
                parsedItems.Add(aitem);
                last = aitem;
            }

            if (parsedItems.Count > 0)
            {
                // Close the chain
                parsedItems[0].PreviousItem = parsedItems [parsedItems.Count - 1];
                parsedItems [parsedItems.Count - 1].NextItem = parsedItems [0];
            }

            images = new List <Gdk.Pixbuf> ();
            pauses = new List <int> ();
            bool lastWasImage = false;

            foreach (var aitem in parsedItems)
            {
                foreach (var frame in aitem.GetFrames())
                {
                    if (frame is Gdk.Pixbuf)
                    {
                        if (lastWasImage)
                        {
                            pauses.Add(defaultPause);
                        }
                        images.Add((Gdk.Pixbuf)frame);
                        lastWasImage = true;
                    }
                    else
                    {
                        if (!lastWasImage)
                        {
                            if (pauses.Count > 0)
                            {
                                pauses [pauses.Count - 1] = pauses [pauses.Count - 1] + (int)frame;
                            }
                            else
                            {
                                // Pause before any image. Add a dummy image
                                images.Add(ImageService.GetPixbuf("md-empty"));
                                pauses.Add((int)frame);
                            }
                        }
                        else
                        {
                            pauses.Add((int)frame);
                        }
                        lastWasImage = false;
                    }
                }
            }
            if (pauses.Count < images.Count)
            {
                pauses.Add(defaultPause);
            }
        }
		void Parse (string animationSpec)
		{
			List<AnimationItem> parsedItems = new List<AnimationItem> ();
			string[] items = animationSpec.Split (';');
			AnimationItem last = null;

			foreach (var item in items) {
				int i = item.IndexOf (':');
				var tname = i != -1 ? item.Substring (0, i) : item;
				int pause;
				Type type;
				AnimationItem aitem = null;

				if (animationItems.TryGetValue (tname, out type)) {
					aitem = (AnimationItem) Activator.CreateInstance (type);
					aitem.Parse (item);
				}
				else if (int.TryParse (item, out pause)) {
					aitem = new PauseItem () { Pause = pause };
				}
				else {
					// It must be an image
					var id = ImageService.GetStockId (addin, item, size);
					var img = ImageService.GetPixbuf (id, size);
					if (img == null)
						continue;
					aitem = new ImageItem () { Image = img };
				}
				if (last != null)
					last.NextItem = aitem;
				aitem.PreviousItem = last;
				parsedItems.Add (aitem);
				last = aitem;
			}

			if (parsedItems.Count > 0) {
				// Close the chain
				parsedItems[0].PreviousItem = parsedItems [parsedItems.Count - 1];
				parsedItems [parsedItems.Count - 1].NextItem = parsedItems [0];
			}

			images = new List<Gdk.Pixbuf> ();
			pauses = new List<int> ();
			bool lastWasImage = false;

			foreach (var aitem in parsedItems) {
				foreach (var frame in aitem.GetFrames ()) {
					if (frame is Gdk.Pixbuf) {
						if (lastWasImage)
							pauses.Add (defaultPause);
						images.Add ((Gdk.Pixbuf)frame);
						lastWasImage = true;
					}
					else {
						if (!lastWasImage) {
							if (pauses.Count > 0)
								pauses [pauses.Count - 1] = pauses [pauses.Count - 1] + (int) frame;
							else {
								// Pause before any image. Add a dummy image
								images.Add (ImageService.GetPixbuf ("md-empty"));
								pauses.Add ((int) frame);
							}
						} else
							pauses.Add ((int)frame);
						lastWasImage = false;
					}
				}
			}
			if (pauses.Count < images.Count)
				pauses.Add (defaultPause);
		}
示例#3
0
 void Update()
 {
     if (fade.IsFade)
     {
         return;
     }
     if (isTranslation)
     {
         return;
     }
     if (isPause)
     {
         if (SwitchInput.GetButtonDown(0, SwitchButton.Pause))
         {
             SeManager.GetInstance().Play(SeEnum.Decision);
             StartCoroutine(ReturnGame());
         }
         else
         {
             PauseItem nextItem = null;
             if (SwitchInput.GetButtonDown(0, SwitchButton.Ok))
             {
                 isPause = false;
                 SeManager.GetInstance().Play(SeEnum.Decision);
                 currentItem.transform.localScale = Vector3.Scale(defaultScale
                                                                  , new Vector3(1 + SizeRange, 1 + SizeRange, 1.0f));
                 currentItem.Execute();
             }
             else if (SwitchInput.GetButtonDown(0, SwitchButton.SelectUp))
             {
                 nextItem = currentItem.up;
             }
             else if (SwitchInput.GetButtonDown(0, SwitchButton.SelectDown))
             {
                 nextItem = currentItem.down;
             }
             else if (SwitchInput.GetButtonDown(0, SwitchButton.SelectRight))
             {
                 nextItem = currentItem.right;
             }
             else if (SwitchInput.GetButtonDown(0, SwitchButton.SelectLeft))
             {
                 nextItem = currentItem.left;
             }
             if (nextItem != null)
             {
                 currentItem.transform.localScale = defaultScale;
                 currentItem = nextItem;
                 timeCount   = 0.0f;
             }
             float addScale = (Mathf.Sin(timeCount) + 1) / 2;
             float scale    = 1 + addScale * SizeRange;
             currentItem.transform.localScale = Vector3.Scale(defaultScale
                                                              , new Vector3(scale, scale, 1.0f));
             timeCount += Time.unscaledDeltaTime * 2.0f;
         }
     }
     else
     {
         if (Time.timeScale == 0.0f)
         {
             return;
         }
         if (SwitchInput.GetButtonDown(0, SwitchButton.Pause))
         {
             currentItem = pauseItems[0];
             foreach (var pauseItem in pauseItems)
             {
                 pauseItem.transform.localScale = defaultScale;
             }
             StartCoroutine(ToPause());
         }
     }
 }