示例#1
0
        /// <summary>
        /// Updates values of this instance to values taken from parameter instance.
        /// </summary>
        /// <param name="Model"></param>
        /// <param name="RaiseChangedEvent"></param>
        public override void UpdateFromModel(ObjectUpdate Model, bool RaiseChangedEvent)
        {
            base.UpdateFromModel(Model, RaiseChangedEvent);

            if (RaiseChangedEvent)
            {
                OverlayFileRID = Model.OverlayFileRID;
                NameRID        = Model.NameRID;
                Flags.UpdateFromModel(Model.Flags, RaiseChangedEvent);
                LightingInfo.UpdateFromModel(Model.LightingInfo, RaiseChangedEvent);
                FirstAnimationType = Model.FirstAnimationType;
                ColorTranslation   = Model.ColorTranslation;
                Effect             = Model.Effect;

                if (Animation != null)
                {
                    Animation.PropertyChanged -= OnAnimationPropertyChanged;
                }

                Animation = Model.Animation;
                Animation.PropertyChanged += OnAnimationPropertyChanged;

                subOverlays.Clear();
                subOverlays.AddRange(Model.SubOverlays);

                Name        = Model.Name;
                OverlayFile = Model.OverlayFile;
                Resource    = Model.Resource;
            }
            else
            {
                overlayFileRID = Model.OverlayFileRID;
                nameRID        = Model.NameRID;
                Flags.UpdateFromModel(Model.Flags, RaiseChangedEvent);
                LightingInfo.UpdateFromModel(Model.LightingInfo, RaiseChangedEvent);
                firstAnimationType = Model.FirstAnimationType;
                colorTranslation   = Model.ColorTranslation;
                effect             = Model.Effect;

                if (animation != null)
                {
                    animation.PropertyChanged -= OnAnimationPropertyChanged;
                }

                animation = Model.Animation;
                animation.PropertyChanged += OnAnimationPropertyChanged;

                subOverlays.Clear();
                subOverlays.AddRange(Model.SubOverlays);

                name        = Model.Name;
                overlayFile = Model.OverlayFile;
                resource    = Model.Resource;
            }

            // appearance update
            ProcessAppearance(true);
        }
示例#2
0
        public override int ReadFrom(byte[] Buffer, int StartIndex = 0)
        {
            int cursor = StartIndex;

            cursor += base.ReadFrom(Buffer, cursor);

            UpdatedObject = new ObjectUpdate(Buffer, cursor);
            cursor += UpdatedObject.ByteLength;

            return cursor - StartIndex;
        }
示例#3
0
        /// <summary>
        /// Processes the animations of the objects,
        /// call regularly in threadloop.
        /// May raise AppearanceChanged event.
        /// </summary>
        /// <param name="Tick"></param>
        /// <param name="Span"></param>
        public virtual void Tick(double Tick, double Span)
        {
            // apply next ObjectUpdate if there is one
            if (NextUpdate != null)
            {
                UpdateFromModel(NextUpdate, true);
                NextUpdate = null;
            }

            // update animation
            Animation.Tick(Tick, Span);

            // update suboverlay animations
            foreach (SubOverlay subOverlay in SubOverlays)
            {
                subOverlay.Animation.Tick(Tick, Span);
            }

            // possibly update appearancehash and raise event
            ProcessAppearance();
        }
示例#4
0
        /// <summary>
        /// Updates values of this instance to values taken from parameter instance.
        /// </summary>
        /// <param name="Model"></param>
        /// <param name="RaiseChangedEvent"></param>
        public override void UpdateFromModel(ObjectUpdate Model, bool RaiseChangedEvent)
        {
            base.UpdateFromModel(Model, RaiseChangedEvent);

            if (RaiseChangedEvent)
            {
                OverlayFileRID = Model.OverlayFileRID;
                NameRID = Model.NameRID;
                Flags.UpdateFromModel(Model.Flags, RaiseChangedEvent);
                LightFlags = Model.LightFlags;
                LightIntensity = Model.LightIntensity;
                LightColor = Model.LightColor;
                FirstAnimationType = Model.FirstAnimationType;
                ColorTranslation = Model.ColorTranslation;
                Effect = Model.Effect;

                if (Animation != null)
                    Animation.PropertyChanged -= OnAnimationPropertyChanged;

                Animation = Model.Animation;
                Animation.PropertyChanged += OnAnimationPropertyChanged;
                 
                subOverlays.Clear();
                subOverlays.AddRange(Model.SubOverlays);

                Name = Model.Name;
                OverlayFile = Model.OverlayFile;
                Resource = Model.Resource;
            }
            else
            {
                overlayFileRID = Model.OverlayFileRID;
                nameRID = Model.NameRID;
                Flags.UpdateFromModel(Model.Flags, RaiseChangedEvent);
                lightFlags = Model.LightFlags;
                lightIntensity = Model.LightIntensity;
                lightColor = Model.LightColor;
                firstAnimationType = Model.FirstAnimationType;
                colorTranslation = Model.ColorTranslation;
                effect = Model.Effect;

                if (animation != null)
                    animation.PropertyChanged -= OnAnimationPropertyChanged;

                animation = Model.Animation;
                animation.PropertyChanged += OnAnimationPropertyChanged;
                              
                subOverlays.Clear();
                subOverlays.AddRange(Model.SubOverlays);

                name = Model.Name;
                overlayFile = Model.OverlayFile;
                resource = Model.Resource;
            }

            // appearance update
            ProcessAppearance(true);
        }
示例#5
0
        public override void UpdateFromModel(ObjectUpdate Model, bool RaiseChangedEvent)
        {
            base.UpdateFromModel(Model, RaiseChangedEvent);

            if (RaiseChangedEvent)
            {      
                MotionFirstAnimationType = Model.MotionFirstAnimationType;
                MotionColorTranslation = Model.MotionColorTranslation;
                MotionEffect = Model.MotionEffect;

                if (MotionAnimation != null)
                    MotionAnimation.PropertyChanged -= OnMotionAnimationPropertyChanged;

                MotionAnimation = Model.MotionAnimation;
                MotionAnimation.PropertyChanged += OnMotionAnimationPropertyChanged;
                
                MotionSubOverlays.Clear();
                MotionSubOverlays.AddRange(Model.MotionSubOverlays);
            }
            else
            {
                motionFirstAnimationType = Model.MotionFirstAnimationType;
                motionColorTranslation = Model.MotionColorTranslation;
                motionEffect = Model.MotionEffect;

                if (motionAnimation != null)
                    motionAnimation.PropertyChanged -= OnMotionAnimationPropertyChanged;

                motionAnimation = Model.MotionAnimation;
                motionAnimation.PropertyChanged += OnMotionAnimationPropertyChanged;
                
                foreach (SubOverlay obj in motionSubOverlays)
                    obj.PropertyChanged -= OnMotionSubOverlayPropertyChanged;

                motionSubOverlays.Clear();
                motionSubOverlays.AddRange(Model.MotionSubOverlays);
            }

            // update appearance
            ProcessAppearance(true);
        }
示例#6
0
 public ChangeMessage(ObjectUpdate UpdatedObject) 
     : base(MessageTypeGameMode.Change)
 {         
     this.UpdatedObject = UpdatedObject;
 }
示例#7
0
 public override unsafe void ReadFrom(ref byte* Buffer)
 {
     base.ReadFrom(ref Buffer);
     UpdatedObject = new ObjectUpdate(ref Buffer);
 }