Newer
Older
HoloAnatomy / Assets / HoloToolkit / Sharing / Scripts / SyncModel / SyncBool.cs
SURFACEBOOK2\jackwynne on 25 May 2018 1 KB v1
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License. See LICENSE in the project root for license information.

namespace HoloToolkit.Sharing.SyncModel
{
    /// <summary>
    /// This class implements the boolean primitive for the syncing system.
    /// It does the heavy lifting to make adding new bools to a class easy.
    /// </summary>
    public class SyncBool : SyncPrimitive
    {
        private BoolElement element;
        private bool value;

#if UNITY_EDITOR
        public override object RawValue
        {
            get { return value; }
        }
#endif

        public bool Value
        {
            get { return value; }

            set
            {
                // Has the value actually changed?
                if (this.value != value)
                {
                    // Change the value
                    this.value = value;

                    if (element != null)
                    {
                        // Notify network that the value has changed
                        element.SetValue(value);
                    }
                }
            }
        }

        public SyncBool(string field) : base(field) { }

        public override void InitializeLocal(ObjectElement parentElement)
        {
            element = parentElement.CreateBoolElement(XStringFieldName, value);
            NetworkElement = element;
        }

        public void AddFromLocal(ObjectElement parentElement, bool localValue)
        {
            InitializeLocal(parentElement);
            Value = localValue;
        }

        public override void AddFromRemote(Element remoteElement)
        {
            NetworkElement = remoteElement;
            element = BoolElement.Cast(remoteElement);
            value = element.GetValue();
        }

        public override void UpdateFromRemote(bool remoteValue)
        {
            value = remoteValue;
        }
    }
}