Exemple #1
0
        /// <summary>
        /// Monitors SyncVars for change.
        /// </summary>
        private void monitorSyncVars()
        {
            //Find SyncVars that changed
            foreach (KeyValuePair <Type, Dictionary <string, SyncVarData> > typeSyncVars in syncVars)
            {
                foreach (KeyValuePair <string, SyncVarData> fieldSyncVarData in typeSyncVars.Value)
                {
                    SyncVarData syncVarData = fieldSyncVarData.Value;
                    object      value       = syncVarData.field.GetValue(syncVarData.networkObj);

                    //Value of SyncVar changed
                    if (!value.Equals(syncVarData.value))
                    {
                        syncVarData.value = value;

                        if (networkIdentity.networkAuthority == NetworkAuthority.CLIENT)
                        {
                            networkIdentity.sendMessage(SyncVarMessageFactory.createSyncVarMessage(this, typeSyncVars.Key, value.GetType(), syncVarData.field.Name, value, true), true);
                        }
                        else if (networkIdentity.networkAuthority == NetworkAuthority.SERVER)
                        {
                            networkIdentity.sendMessage(SyncVarMessageFactory.createSyncVarMessage(this, typeSyncVars.Key, value.GetType(), syncVarData.field.Name, value, false), true);
                        }
                    }
                }
            }
        }
Exemple #2
0
        /// <summary>
        /// Loads all SyncVars in networkObj.
        /// </summary>
        /// <param name="networkObj">The object that the SyncVars are loaded from.</param>
        private void loadSyncVars <T>(T networkObj) where T : NetworkBehaviour
        {
            Type objType = typeof(T);

            FieldInfo[] objectFields = objType.GetFields();
            foreach (FieldInfo field in objectFields)
            {
                SyncVar syncVar = (SyncVar)Attribute.GetCustomAttribute(field, typeof(SyncVar));

                //Found a SyncVar
                if (syncVar != null)
                {
                    //Add a new Dictionary for object type if it doesn't exist
                    if (!syncVars.ContainsKey(objType))
                    {
                        syncVars.Add(objType, new Dictionary <string, SyncVarData>());
                    }

                    object value = field.GetValue(networkObj);

                    //Can only use SyncVars supported by the SyncVarMessageFactory
                    if (SyncVarMessageFactory.isTypeSupported(field.GetType()))
                    {
                        syncVars[objType].Add(field.Name, new SyncVarData(networkObj, field, value));
                        //Debug.Log("[SyncVar Loaded] ObjectType: " + objType + " | Field: " + field.Name + " | Value: " + value);
                    }
                    else
                    {
                        Debug.LogWarning("The type, " + field.GetType() + ", is not a supported SyncVar type.");
                    }
                }
            }
        }