wpf游戏引擎的script实现

发布于:2025-06-12 ⋅ 阅读:(16) ⋅ 点赞:(0)

1.script.cs

using System.IO;
using System.Runtime.Serialization;
using System.Text;

namespace PrimalEditor.Components
{
    [DataContract]
    class Script : Component
    {

        private string _name;

        [DataMember]
        public string Name
        {
            get => _name;
            set
            {
                if (_name != value)
                {
                    _name = value;
                    OnPropertyChanged(Name);

                }


            }

        }


        public override IMSComponent GetMultiselectionComponent(MSEntity msEntity) => new MSScript(msEntity);


        public override void WriteToBinary(BinaryWriter bw)
        {
            var nameBytes = Encoding.UTF8.GetBytes(Name);
            bw.Write(nameBytes.Length);
            bw.Write(nameBytes);
        }

        public Script(GameEntity owner) : base(owner)
        {
        }

    }

    sealed class MSScript : MSComponent<Script>
    {

        private string _name;

        [DataMember]
        public string Name
        {
            get => _name;
            set
            {
                if (_name != value)
                {
                    _name = value;
                    OnPropertyChanged(Name);

                }


            }

        }


        protected override bool UpdateComponents(string propertyName)
        {
            if (propertyName == nameof(Name))
            {
                SelectedComponents.ForEach(c => c.Name = _name);
                return true;


            }
            return false;


        }

        protected override bool UpdateMSComponent()
        {
            Name = MSEntity.GetMixedValue(SelectedComponents, new Func<Script, string>(x => x.Name));
            return true;
        }


        public MSScript(MSEntity msEntity) : base(msEntity)
        {
            Refresh();


        }

    }

}