示例#1
0
 public Avatar(InteractiveObjectData metaData, string objectName, float[,] perspectiveMap, InteractiveObjectRef interactiveObjectRef)
     : base(metaData, objectName, perspectiveMap, interactiveObjectRef)
 {
     if (!interactiveObjectRef.Attributes.ContainsKey("AvatarSpriteState"))
     {
         interactiveObjectRef.Attributes.Add("AvatarSpriteState", 0);
     }
 }
示例#2
0
        public InteractiveObject(InteractiveObjectData metaData, string objectName, float[,] perspectiveMap, InteractiveObjectRef interactiveObjectRef)
        {
            InteractiveObjectRef = interactiveObjectRef;
            this.PerspectiveMap  = perspectiveMap;
            this.Type            = INTERACTIVE_ENTITY_TYPE;
            images   = new List <Image>();
            MetaData = metaData;

            if (MetaData.Commands != null)
            {
                foreach (var c in MetaData.Commands)
                {
                    c.parent = this;
                }
            }

            int totalFrames = 0;

            foreach (var animation in MetaData.Animations)
            {
                int frameNumber = 0;
                foreach (string path in Utility.RetrieveFilePathForFilesInDirectory(@"./content/objects/" + objectName + @"/" + animation.Name, "*.png"))
                {
                    images.Add(new Image(Library.GetTexture(path))
                    {
                        Scale = scale, OriginX = MetaData.HotSpot.X, OriginY = MetaData.HotSpot.Y
                    });
                    if (animation.FootStepFrames != null && animation.FootStepFrames.Contains(frameNumber + 1))
                    {
                        int frame = frameNumber + totalFrames;
                        if (!footFallFrames.ContainsKey(animation.Name))
                        {
                            footFallFrames.Add(animation.Name, new List <int> {
                                frame
                            });
                        }
                        else
                        {
                            footFallFrames[animation.Name].Add(frame);
                        }
                    }

                    frameNumber++;
                }
                totalFrames += frameNumber;
            }
            sprite = new Flipbook(images.Cast <Graphic>().ToArray());

            int currentTotalFrames = 0;

            foreach (var animation in MetaData.Animations)
            {
                sprite.Add(animation.Name, FP.MakeFrames(currentTotalFrames, (currentTotalFrames += animation.Frames) - 1), animation.FPS, true);
            }
            AddComponent(sprite);
            this.OriginX = MetaData.HotSpot.X * scale;
            this.OriginY = MetaData.HotSpot.Y * scale;
            SetHitbox((int)(MetaData.FrameSize.X * scale), (int)(MetaData.FrameSize.Y * scale), (int)this.OriginX, (int)this.OriginY);
            if (perspectiveMap != null)
            {
                UpdateLayer();
            }

            if (metaData.Attributes == null)
            {
                metaData.Attributes = new Dictionary <string, int>();
            }
            if (interactiveObjectRef.Attributes == null)
            {
                interactiveObjectRef.Attributes = new Dictionary <string, int>();
            }

            foreach (var key in metaData.Attributes.Keys)
            {
                if (!interactiveObjectRef.Attributes.ContainsKey(key))
                {
                    interactiveObjectRef.Attributes.Add(key, metaData.Attributes[key]);
                }
            }
        }