diff --git a/Assets/Photon.meta b/Assets/Photon.meta
new file mode 100644
index 0000000..7b4ed7f
--- /dev/null
+++ b/Assets/Photon.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: cb56c3824ef5c8e40acfc607e00aded4
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Photon/Fusion.meta b/Assets/Photon/Fusion.meta
new file mode 100644
index 0000000..fb14d0e
--- /dev/null
+++ b/Assets/Photon/Fusion.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 985f71308df30494eab1c01a553f6450
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Photon/Fusion/Assemblies.meta b/Assets/Photon/Fusion/Assemblies.meta
new file mode 100644
index 0000000..92cb20e
--- /dev/null
+++ b/Assets/Photon/Fusion/Assemblies.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 6b498a0317a268b4f95f38e8863f3e53
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Photon/Fusion/Assemblies/Fusion.Common.dll b/Assets/Photon/Fusion/Assemblies/Fusion.Common.dll
new file mode 100644
index 0000000..f819111
Binary files /dev/null and b/Assets/Photon/Fusion/Assemblies/Fusion.Common.dll differ
diff --git a/Assets/Photon/Fusion/Assemblies/Fusion.Common.dll.debug b/Assets/Photon/Fusion/Assemblies/Fusion.Common.dll.debug
new file mode 100644
index 0000000..49dca4a
Binary files /dev/null and b/Assets/Photon/Fusion/Assemblies/Fusion.Common.dll.debug differ
diff --git a/Assets/Photon/Fusion/Assemblies/Fusion.Common.dll.debug.meta b/Assets/Photon/Fusion/Assemblies/Fusion.Common.dll.debug.meta
new file mode 100644
index 0000000..c476b28
--- /dev/null
+++ b/Assets/Photon/Fusion/Assemblies/Fusion.Common.dll.debug.meta
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: dfe46f6ff6fe58c47aa967992595b12e
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Photon/Fusion/Assemblies/Fusion.Common.dll.meta b/Assets/Photon/Fusion/Assemblies/Fusion.Common.dll.meta
new file mode 100644
index 0000000..e02e4f2
--- /dev/null
+++ b/Assets/Photon/Fusion/Assemblies/Fusion.Common.dll.meta
@@ -0,0 +1,33 @@
+fileFormatVersion: 2
+guid: a4d1b22b416816f4a830209a6058fe35
+PluginImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ iconMap: {}
+ executionOrder: {}
+ defineConstraints: []
+ isPreloaded: 0
+ isOverridable: 0
+ isExplicitlyReferenced: 0
+ validateReferences: 1
+ platformData:
+ - first:
+ Any:
+ second:
+ enabled: 1
+ settings: {}
+ - first:
+ Editor: Editor
+ second:
+ enabled: 0
+ settings:
+ DefaultValueInitialized: true
+ - first:
+ Windows Store Apps: WindowsStoreApps
+ second:
+ enabled: 0
+ settings:
+ CPU: AnyCPU
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Photon/Fusion/Assemblies/Fusion.Common.pdb.debug b/Assets/Photon/Fusion/Assemblies/Fusion.Common.pdb.debug
new file mode 100644
index 0000000..da491e6
Binary files /dev/null and b/Assets/Photon/Fusion/Assemblies/Fusion.Common.pdb.debug differ
diff --git a/Assets/Photon/Fusion/Assemblies/Fusion.Common.pdb.debug.meta b/Assets/Photon/Fusion/Assemblies/Fusion.Common.pdb.debug.meta
new file mode 100644
index 0000000..80c4c01
--- /dev/null
+++ b/Assets/Photon/Fusion/Assemblies/Fusion.Common.pdb.debug.meta
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: 64771868c228aac4caec4e19fea3aa53
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Photon/Fusion/Assemblies/Fusion.Common.xml b/Assets/Photon/Fusion/Assemblies/Fusion.Common.xml
new file mode 100644
index 0000000..7b71eb9
--- /dev/null
+++ b/Assets/Photon/Fusion/Assemblies/Fusion.Common.xml
@@ -0,0 +1,156 @@
+
+
+
+ Fusion.Common
+
+
+
+
+ Task Factory is used to create new Tasks and Schedule long running Tasks
+
+
+
+
+ Stores a Task Factory ready made to be used with Unity
+
+
+
+
+ Task Scheduler based on the TaskFactory currently set
+
+
+
+
+ Setup a new TaskFactory tailored to work with Unity
+
+
+
+
+ Create a new TaskFactory reference with settings to work wiht Unity
+
+ TaskFactory ref with the right arguments set
+
+
+
+ Queue that usese Sync locks for each operations
+
+ Type used by the internal Queue
+
+
+
+ Compress the byte array uisng GZip
+
+ Original byte array
+ Compressed byte array
+
+
+
+ Decompress the byte array using GZip
+
+ Compressed byte array
+ Decompressed byte array
+
+
+
+ Represents the current ID of the communicator.
+
+
+
+
+ Sends a package data using the communication system
+
+ Event Code used to send the Package
+ Target Actor of the Package
+ Flag if this Package should be sent reliably
+ Data Buffer
+ Buffer Length
+
+
+
+ Retrieve a Data Package
+
+ Data Package Sender
+ Buffer to be filled with the Data
+ Buffer length
+ Total number of bytes written to buffer
+
+
+
+ Check if there are data package to be retrieved
+
+ True if the internal buffer has pendind data
+
+
+
+ Push a new Package into the communicator queues
+
+ Data Sender Actor
+ Event Code of the Package
+ Package
+
+
+
+ Register a callback for a specific Message Type
+
+
+
+
+
+
+ Send a Protocol Message using the communicator system
+
+ Target Actor of the Protocol Message
+ Protocol Message to be sent
+
+
+
+ Step the Communicator internals
+
+
+
+
+ Represents a Protocol Message
+
+ Used to tag the Messages in .
+
+
+
+
+ Collection of simple JSON Utility methods
+
+
+
+
+ Removes from a JSON serialized by Unity Serializer the "referenes" field.
+ This aims to reduce the JSON size when sending accross the network
+
+ JSON output of "JsonUtility.ToJson" call
+ Same JSON but without the "referenes" object
+
+
+
+ Instructs all sub-Samplers to register a frame change. The next Add will go to the next frame section.
+
+
+
+
+ Get Sampler from the connection specific collection.
+
+
+
+
+ Get Sampler from the common samplers (non-connection specific) collection.
+
+
+
+
+ Sort 4 byte integers
+
+ array to sort
+ temp array that is >= aLength
+ length of array
+ integer array with size (1 << RADIX)
+ integer array with size (1 << RADIX) * 4
+
+
+
diff --git a/Assets/Photon/Fusion/Assemblies/Fusion.Common.xml.meta b/Assets/Photon/Fusion/Assemblies/Fusion.Common.xml.meta
new file mode 100644
index 0000000..8bea615
--- /dev/null
+++ b/Assets/Photon/Fusion/Assemblies/Fusion.Common.xml.meta
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: d1aa52c25b7410d409a610b7ae0e2be5
+TextScriptImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Photon/Fusion/Assemblies/Fusion.Realtime.dll b/Assets/Photon/Fusion/Assemblies/Fusion.Realtime.dll
new file mode 100644
index 0000000..6ac7c98
Binary files /dev/null and b/Assets/Photon/Fusion/Assemblies/Fusion.Realtime.dll differ
diff --git a/Assets/Photon/Fusion/Assemblies/Fusion.Realtime.dll.debug b/Assets/Photon/Fusion/Assemblies/Fusion.Realtime.dll.debug
new file mode 100644
index 0000000..79e2df1
Binary files /dev/null and b/Assets/Photon/Fusion/Assemblies/Fusion.Realtime.dll.debug differ
diff --git a/Assets/Photon/Fusion/Assemblies/Fusion.Realtime.dll.debug.meta b/Assets/Photon/Fusion/Assemblies/Fusion.Realtime.dll.debug.meta
new file mode 100644
index 0000000..565c665
--- /dev/null
+++ b/Assets/Photon/Fusion/Assemblies/Fusion.Realtime.dll.debug.meta
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: 3b0bcfb09765a4a4ebf152ab4db50ef4
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Photon/Fusion/Assemblies/Fusion.Realtime.dll.meta b/Assets/Photon/Fusion/Assemblies/Fusion.Realtime.dll.meta
new file mode 100644
index 0000000..ac114ab
--- /dev/null
+++ b/Assets/Photon/Fusion/Assemblies/Fusion.Realtime.dll.meta
@@ -0,0 +1,33 @@
+fileFormatVersion: 2
+guid: 7de3b8b9e1263ad479e2d0c4261b7646
+PluginImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ iconMap: {}
+ executionOrder: {}
+ defineConstraints: []
+ isPreloaded: 0
+ isOverridable: 0
+ isExplicitlyReferenced: 0
+ validateReferences: 1
+ platformData:
+ - first:
+ Any:
+ second:
+ enabled: 1
+ settings: {}
+ - first:
+ Editor: Editor
+ second:
+ enabled: 0
+ settings:
+ DefaultValueInitialized: true
+ - first:
+ Windows Store Apps: WindowsStoreApps
+ second:
+ enabled: 0
+ settings:
+ CPU: AnyCPU
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Photon/Fusion/Assemblies/Fusion.Realtime.pdb.debug b/Assets/Photon/Fusion/Assemblies/Fusion.Realtime.pdb.debug
new file mode 100644
index 0000000..7b6c6f5
Binary files /dev/null and b/Assets/Photon/Fusion/Assemblies/Fusion.Realtime.pdb.debug differ
diff --git a/Assets/Photon/Fusion/Assemblies/Fusion.Realtime.pdb.debug.meta b/Assets/Photon/Fusion/Assemblies/Fusion.Realtime.pdb.debug.meta
new file mode 100644
index 0000000..859ef0d
--- /dev/null
+++ b/Assets/Photon/Fusion/Assemblies/Fusion.Realtime.pdb.debug.meta
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: 2522e117b83964644bbf25885af7bea2
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Photon/Fusion/Assemblies/Fusion.Realtime.xml b/Assets/Photon/Fusion/Assemblies/Fusion.Realtime.xml
new file mode 100644
index 0000000..b0e680e
--- /dev/null
+++ b/Assets/Photon/Fusion/Assemblies/Fusion.Realtime.xml
@@ -0,0 +1,4507 @@
+
+
+
+ Fusion.Realtime
+
+
+
+
+ Responsible for running a thread that will keep the LoadBalancingClient connected to the Cloud
+ when the application is in the background
+
+
+ Fusion Realtime Client
+
+ This will deal with all communication done with the Photon Cloud
+
+
+ Fusion Realtime Client
+
+ This will deal with all communication done with the Photon Cloud
+
+
+
+ Defines for how long the Fallback Thread should keep the connection, before it may time out as usual.
+ We want to the Client to keep it's connection when an app is in the background (and doesn't call Update / Service Clients should not keep their connection indefinitely in the background, so after some milliseconds, the Fallback Thread should stop keeping it up.
+
+
+
+ Delay between each ACK/Ping to Photon Cloud
+
+
+
+
+ Signal if ACK was Sent
+
+
+
+
+ Thread ID
+
+
+
+
+ Check if Thread is running by checking the Thread ID
+
+
+
+
+ Starts a new rhread to send ACK to Cloud
+
+
+
+
+ Stop the currently running background thread
+
+
+
+
+ ACK Thread Action.
+
+ This will check the last time the LBC sent anything to the Cloud, if it's more than ,
+ an ACK Msg will be sent, so the Cloud keeps the connection active.
+
+ True if the Thread should keep running, false otherwise.
+
+
+
+ Handles all received events from the Photon Cloud
+
+ Event Data
+
+
+
+ Send data to another Actor on the Room
+
+ Target Actor of the Event
+ Event Code
+ Data to be sent
+ Buffer Length
+ Flag to set reliability on the Event
+ True if the event was sent, false otherwise
+
+
+
+ Utility method used to extract the content of a from a object holder.
+ This is necessary so there are no references of Photon Lib DLLs other than on the Fusion.Realtime project
+
+ Data Object Holder, this must be a reference of a
+ Buffer to write the content of the array slice
+ Output size of the written buffer
+ True if the extraction was done correctly, false otherwise
+
+
+
+ Fusion Plugin Name for request
+
+
+
+
+ Alternative Name Server for CN Region
+
+
+
+
+ Flag to signal if the Client is Ready to perform cloud action and it is in a Room
+
+
+
+
+ Signal if some room property has changed
+
+
+
+
+ Change the Custom Properties of the current Room
+
+ New set of Custom Properties
+ True if the change was made, false otherwise
+
+
+
+ Change the IsVisible Property of the current Room
+
+ New value of IsVisible
+ True if the change was made, false otherwise
+
+
+
+ Change the IsOpen Property of the current Room
+
+ New value of IsOpen
+ True if the change was made, false otherwise
+
+
+
+ Get Current Custom Properties of Room
+
+ Custom Properties Dictionary
+
+
+
+ Used to keep the client communication
+
+
+
+
+ Build a new EnterRoomParams ref using the default configs and optional Room Name
+
+ Which lobby the Room should exits
+ Room Name, if not set, a Random Name will be used
+ Optional Room Custom Properties
+ EnterRoomParams reference.
+
+
+
+ Build a new OpJoinRandomRoomParams that will be used to setup which Room the local peer wants to join
+
+ Type of Lobby to search rooms
+ Optional list of filter parameters
+ OpJoinRandomRoomParams reference
+
+
+
+ Convert a into a pair of and respectively
+ representing the custom properties of a session and the property names that will be published on the Lobby
+
+ Dictionary to be converted
+ Hashtable with all allowed Custom Properties
+ String array with all public key names
+
+
+
+ Connect to master server.
+
+ Client
+ App settings
+ Runs client.Service() during the operation
+ When connected to master server callback was called.
+ Is thrown when the connection terminated
+ Is thrown when the authentication failed
+ Is thrown when the operation could not be started
+ Is thrown when the operation completed unsuccessfully
+ Is thrown when the operation timed out
+
+
+
+ Runs reconnect and rejoin.
+
+ Client object
+ Runs client.Service() during the operation
+ Returns when inside the room
+ Is thrown when the connection terminated
+ Is thrown when the operation could not be started
+ Is thrown when the operation completed unsuccessfully
+ Is thrown when the operation timed out
+
+
+
+ Disconnects the client.
+
+ Client.
+ Runs client.Service() during the operation
+ Returns when the client has successfully disconnected
+ Is thrown when the connection terminated
+ Is thrown when the operation could not be started
+ Is thrown when the operation completed unsuccessfully
+ Is thrown when the operation timed out
+
+
+
+ Create and join a room.
+
+ Client object
+ Enter room params
+ Set ErrorCode as result on RoomCreateFailed or RoomJoinFailed
+ Runs client.Service() during the operation
+ When the room has been entered
+ Is thrown when the connection terminated
+ Is thrown when the operation could not be started
+ Is thrown when the operation completed unsuccessfully
+ Is thrown when the operation timed out
+
+
+
+ Create or Join a Room.
+
+ Client object
+ Enter room params
+ Set ErrorCode as result on RoomCreateFailed or RoomJoinFailed
+ Runs client.Service() during the operation
+ When the room has been entered
+ Is thrown when the connection terminated
+ Is thrown when the operation could not be started
+ Is thrown when the operation completed unsuccessfully
+ Is thrown when the operation timed out
+
+
+
+ Join room.
+
+ Client object
+ Enter room params
+ Set ErrorCode as result when JoinRoomFailed
+ Runs client.Service() during the operation
+ When room has been entered
+ Is thrown when the connection terminated
+ Is thrown when the operation could not be started
+ Is thrown when the operation completed unsuccessfully
+ Is thrown when the operation timed out
+
+
+
+ Join random or Create room
+
+ Client object
+ Join random room params
+ Enter room params
+ Set ErrorCode as result when operation fails with ErrorCode
+ Runs client.Service() during the operation
+ When inside a room
+ Is thrown when the connection terminated
+ Is thrown when the operation could not be started
+ Is thrown when the operation completed unsuccessfully
+ Is thrown when the operation timed out
+
+
+
+ Join a Random Room
+
+ Client object
+ Join random room params
+ Set ErrorCode as result when operation fails with ErrorCode
+ Runs client.Service() during the operation
+ When inside a room
+ Is thrown when the connection terminated
+ Is thrown when the operation could not be started
+ Is thrown when the operation completed unsuccessfully
+ Is thrown when the operation timed out
+
+
+
+ Create a instance, sets up the Photon callbacks, schedules removing them, create a connection service task.
+ The handler will monitor the Photon callbacks and complete, fault accordingly.
+ Use the callbacks to change the default handling.
+ can complete with ErrorCode.Ok, exception on errors and a timeout .
+
+ Client
+ The default implementation will throw an exception on every unexpected result, set this to false to return a result instead
+ Runs client.Service() during the operation
+ Photon Connection Handler object
+
+
+
+ Starts a task that calls every updateIntervalMs milliseconds.
+ The task is stopped by the cancellation token from .
+ It will set an exception on the TaskCompletionSource if after the timeout it is still not completed.
+
+ Client
+ Cancellation token to stop the update loop
+ Completion source is notified on an exception in Service()
+
+
+
+ Convert a into a
+
+
+
+
+ Convert a into a
+
+
+
+
+ Calculate the total size a would take when serialized
+
+ Hashtable to check the size
+ Total size of the Hashtable in serialized format
+
+
+
+ Convert the Room Custom Properties into a
+
+ RoomInfo to extract the custom properties
+ with the data
+
+
+
+ Calculate the total size a would take when serialized
+
+ Dictionary to check the size
+ Total size of the Dictionary in serialized format
+
+
+
+ Settings for Photon application(s) and the server to connect to.
+
+
+ This is Serializable for Unity, so it can be included in ScriptableObject instances.
+
+
+
+ AppId for Photon Fusion.
+
+
+ AppId for Photon Chat.
+
+
+ AppId for Photon Voice.
+
+
+ The AppVersion can be used to identify builds and will split the AppId distinct "Virtual AppIds" (important for matchmaking).
+
+
+ If false, the app will attempt to connect to a Master Server (which is obsolete but sometimes still necessary).
+ if true, Server points to a NameServer (or is null, using the default), else it points to a MasterServer.
+
+
+ Can be set to any of the Photon Cloud's region names to directly connect to that region.
+ if this IsNullOrEmpty() AND UseNameServer == true, use BestRegion. else, use a server
+
+
+
+ The address (hostname or IP) of the server to connect to.
+
+
+ If not null, this sets the port of the first Photon server to connect to (that will "forward" the client as needed).
+
+
+ The address (hostname or IP and port) of the proxy server.
+
+
+ Enables a fallback to another protocol in case a connect to the Name Server fails.
+ See: LoadBalancingClient.EnableProtocolFallback.
+
+
+ Defines how authentication is done. On each system, once or once via a WSS connection (safe).
+
+
+ If true, the client will request the list of currently available lobbies.
+
+
+ Log level for the network lib.
+
+
+ If true, the Server field contains a Master Server address (if any address at all).
+
+
+ If true, the client should fetch the region list from the Name Server and find the one with best ping.
+ See "Best Region" in the online docs.
+
+
+ If true, the default nameserver address for the Photon Cloud should be used.
+
+
+ If true, the default ports for a protocol will be used.
+
+
+ ToString but with more details.
+
+
+ Checks if a string is a Guid by attempting to create one.
+ The potential guid to check.
+ True if new Guid(val) did not fail.
+
+
+
+ Get a Copy from the into a new instance.
+
+ Copy of
+
+
+
+ Photon client to log information and statistics from.
+
+
+
+ Option to let the fallback thread call Disconnect after the KeepAliveInBackground time. Default: false.
+
+ If set to true, the thread will disconnect the client regularly, should the client not call SendOutgoingCommands / Service.
+ This may happen due to an app being in background (and not getting a lot of CPU time) or when loading assets.
+
+ If false, a regular timeout time will have to pass (on top) to time out the client.
+
+
+
+ Defines for how long the Fallback Thread should keep the connection, before it may time out as usual.
+ We want to the Client to keep it's connection when an app is in the background (and doesn't call Update / Service Clients should not keep their connection indefinitely in the background, so after some milliseconds, the Fallback Thread should stop keeping it up.
+
+
+ Counts how often the Fallback Thread called SendAcksOnly, which is purely of interest to monitor if the game logic called SendOutgoingCommands as intended.
+
+
+ True if a fallback thread is running. Will call the client's SendAcksOnly() method to keep the connection up.
+
+
+ Keeps the ConnectionHandler, even if a new scene gets loaded.
+
+
+ Indicates that the app is closing. Set in OnApplicationQuit().
+
+
+ Called by Unity when the application gets closed. The UnityEngine will also call OnDisable, which disconnects.
+
+
+
+
+
+ Called by Unity when the application gets closed. Disconnects if OnApplicationQuit() was called before.
+
+
+ A thread which runs independent from the Update() calls. Keeps connections online while loading or in background. See .
+
+
+
+ Internally used class, containing de/serialization methods for various Unity-specific classes.
+ Adding those to the Photon serialization protocol allows you to send them in events, etc.
+
+
+
+ Register de/serializer methods for Unity specific types. Makes the types usable in RaiseEvent and PUN.
+
+
+
+ This static class defines some useful extension methods for several existing classes (e.g. Vector3, float and others).
+
+
+
+
+ Merges all keys from addHash into the target. Adds new keys and updates the values of existing keys in target.
+
+ The IDictionary to update.
+ The IDictionary containing data to merge into target.
+
+
+
+ Merges keys of type string to target Hashtable.
+
+
+ Does not remove keys from target (so non-string keys CAN be in target if they were before).
+
+ The target IDictionary passed in plus all string-typed keys from the addHash.
+ A IDictionary that should be merged partly into target to update it.
+
+
+ Helper method for debugging of IDictionary content, including type-information. Using this is not performant.
+ Should only be used for debugging as necessary.
+ Some Dictionary or Hashtable.
+ String of the content of the IDictionary.
+
+
+
+ Helper method for debugging of object[] content. Using this is not performant.
+ Should only be used for debugging as necessary.
+ Any object[].
+ A comma-separated string containing each value's ToString().
+
+
+
+ This method copies all string-typed keys of the original into a new Hashtable.
+
+
+ Does not recurse (!) into hashes that might be values in the root-hash.
+ This does not modify the original.
+
+ The original IDictonary to get string-typed keys from.
+ New Hashtable containing only string-typed keys of the original.
+
+
+
+ This method copies all string-typed keys of the original into a new Hashtable.
+
+
+ Does not recurse (!) into hashes that might be values in the root-hash.
+ This does not modify the original.
+
+ The original IDictonary to get string-typed keys from.
+ New Hashtable containing only string-typed keys of the original.
+
+
+ Used by StripKeysWithNullValues.
+
+ By making keysWithNullValue a static variable to clear before using, allocations only happen during the warm-up phase
+ as the list needs to grow. Once it hit the high water mark for keys you need to remove.
+
+
+
+ Removes all keys with null values.
+
+ Photon properties are removed by setting their value to null. Changes the original IDictionary!
+ Uses lock(keysWithNullValue), which should be no problem in expected use cases.
+
+ The IDictionary to strip of keys with null value.
+
+
+ Removes all keys with null values.
+
+ Photon properties are removed by setting their value to null. Changes the original IDictionary!
+ Uses lock(keysWithNullValue), which should be no problem in expected use cases.
+
+ The IDictionary to strip of keys with null value.
+
+
+
+ Checks if a particular integer value is in an int-array.
+
+ This might be useful to look up if a particular actorNumber is in the list of players of a room.
+ The array of ints to check.
+ The number to lookup in target.
+ True if nr was found in target.
+
+
+
+ Used to store info about a friend's online state and in which room he/she is.
+
+
+
+
+ State values for a client, which handles switching Photon server types, some operations, etc.
+
+ \ingroup publicApi
+
+
+ Peer is created but not used yet.
+
+
+ Transition state while connecting to a server. On the Photon Cloud this sends the AppId and AuthenticationValues (UserID).
+
+
+ Not Used.
+
+
+ The client sent an OpJoinLobby and if this was done on the Master Server, it will result in. Depending on the lobby, it gets room listings.
+
+
+ The client is in a lobby, connected to the MasterServer. Depending on the lobby, it gets room listings.
+
+
+ Transition from MasterServer to GameServer.
+
+
+ Transition to GameServer (client authenticates and joins/creates a room).
+
+
+ Connected to GameServer (going to auth and join game).
+
+
+ Transition state while joining or creating a room on GameServer.
+
+
+ The client entered a room. The CurrentRoom and Players are known and you can now raise events.
+
+
+ Transition state when leaving a room.
+
+
+ Transition from GameServer to MasterServer (after leaving a room/game).
+
+
+ Connecting to MasterServer (includes sending authentication values).
+
+
+ The client disconnects (from any server). This leads to state Disconnected.
+
+
+ The client is no longer connected (to any server). Connect to MasterServer to go on.
+
+
+ Connected to MasterServer. You might use matchmaking or join a lobby now.
+
+
+ Client connects to the NameServer. This process includes low level connecting and setting up encryption. When done, state becomes ConnectedToNameServer.
+
+
+ Client is connected to the NameServer and established encryption already. You should call OpGetRegions or ConnectToRegionMaster.
+
+
+ Clients disconnects (specifically) from the NameServer (usually to connect to the MasterServer).
+
+
+ Client was unable to connect to Name Server and will attempt to connect with an alternative network protocol (TCP).
+
+
+
+ Internal state, how this peer gets into a particular room (joining it or creating it).
+
+
+
+ This client creates a room, gets into it (no need to join) and can set room properties.
+
+
+ The room existed already and we join into it (not setting room properties).
+
+
+ Done on Master Server and (if successful) followed by a Join on Game Server.
+
+
+ Done on Master Server and (if successful) followed by a Join or Create on Game Server.
+
+
+ Client is either joining or creating a room. On Master- and Game-Server.
+
+
+ Enumeration of causes for Disconnects (used in LoadBalancingClient.DisconnectedCause).
+ Read the individual descriptions to find out what to do about this type of disconnect.
+
+
+ No error was tracked.
+
+
+ OnStatusChanged: The server is not available or the address is wrong. Make sure the port is provided and the server is up.
+
+
+ OnStatusChanged: Dns resolution for a hostname failed. The exception for this is being catched and logged with error level.
+
+
+ OnStatusChanged: The server address was parsed as IPv4 illegally. An illegal address would be e.g. 192.168.1.300. IPAddress.TryParse() will let this pass but our check won't.
+
+
+ OnStatusChanged: Some internal exception caused the socket code to fail. This may happen if you attempt to connect locally but the server is not available. In doubt: Contact Exit Games.
+
+
+ OnStatusChanged: The server disconnected this client due to timing out (missing acknowledgement from the client).
+
+
+ OnStatusChanged: This client detected that the server's responses are not received in due time.
+
+
+ OnStatusChanged: The server disconnected this client from within the room's logic (the C# code).
+
+
+ OnStatusChanged: The server disconnected this client for unknown reasons.
+
+
+ OnOperationResponse: Authenticate in the Photon Cloud with invalid AppId. Update your subscription or contact Exit Games.
+
+
+ OnOperationResponse: Authenticate in the Photon Cloud with invalid client values or custom authentication setup in Cloud Dashboard.
+
+
+ The authentication ticket should provide access to any Photon Cloud server without doing another authentication-service call. However, the ticket expired.
+
+
+ OnOperationResponse: Authenticate (temporarily) failed when using a Photon Cloud subscription without CCU Burst. Update your subscription.
+
+
+ OnOperationResponse: Authenticate when the app's Photon Cloud subscription is locked to some (other) region(s). Update your subscription or master server address.
+
+
+ OnOperationResponse: Operation that's (currently) not available for this client (not authorized usually). Only tracked for op Authenticate.
+
+
+ OnStatusChanged: The client disconnected from within the logic (the C# code).
+
+
+ The client called an operation too frequently and got disconnected due to hitting the OperationLimit. This triggers a client-side disconnect, too.
+ To protect the server, some operations have a limit. When an OperationResponse fails with ErrorCode.OperationLimitReached, the client disconnects.
+
+
+ The client received a "Disconnect Message" from the server. Check the debug logs for details.
+
+
+ Available server (types) for internally used field: server.
+ Photon uses 3 different roles of servers: Name Server, Master Server and Game Server.
+
+
+ This server is where matchmaking gets done and where clients can get lists of rooms in lobbies.
+
+
+ This server handles a number of rooms to execute and relay the messages between players (in a room).
+
+
+ This server is used initially to get the address (IP) of a Master Server for a specific region. Not used for Photon OnPremise (self hosted).
+
+
+ Defines which sort of app the LoadBalancingClient is used for: Realtime or Voice.
+
+
+ Realtime apps are for gaming / interaction. Also used by PUN 2.
+
+
+ Voice apps stream audio.
+
+
+ Fusion clients are for matchmaking and relay in Photon Fusion.
+
+
+
+ Defines how the communication gets encrypted.
+
+
+
+
+ This is the default encryption mode: Messages get encrypted only on demand (when you send operations with the "encrypt" parameter set to true).
+
+
+
+
+ With this encryption mode for UDP, the connection gets setup and all further datagrams get encrypted almost entirely. On-demand message encryption (like in PayloadEncryption) is unavailable.
+
+
+
+
+ With this encryption mode for UDP, the connection gets setup with random sequence numbers and all further datagrams get encrypted almost entirely. On-demand message encryption (like in PayloadEncryption) is unavailable.
+
+
+
+
+ Datagram Encryption with GCM.
+
+
+
+ Container for port definitions.
+
+
+ Typical ports: UDP: 5058 or 27000, TCP: 4533, WSS: 19093 or 443.
+
+
+ Typical ports: UDP: 5056 or 27002, TCP: 4530, WSS: 19090 or 443.
+
+
+ Typical ports: UDP: 5055 or 27001, TCP: 4531, WSS: 19091 or 443.
+
+
+
+ This class implements the Photon LoadBalancing workflow by using a LoadBalancingPeer.
+ It keeps a state and will automatically execute transitions between the Master and Game Servers.
+
+
+ This class (and the Player class) should be extended to implement your own game logic.
+ You can override CreatePlayer as "factory" method for Players and return your own Player instances.
+ The State of this class is essential to know when a client is in a lobby (or just on the master)
+ and when in a game where the actual gameplay should take place.
+ Extension notes:
+ An extension of this class should override the methods of the IPhotonPeerListener, as they
+ are called when the state changes. Call base.method first, then pick the operation or state you
+ want to react to and put it in a switch-case.
+ We try to provide demo to each platform where this api can be used, so lookout for those.
+
+
+
+
+ The client uses a LoadBalancingPeer as API to communicate with the server.
+ This is public for ease-of-use: Some methods like OpRaiseEvent are not relevant for the connection state and don't need a override.
+
+
+
+
+ Gets or sets the binary protocol version used by this client
+
+
+ Use this always instead of setting it via
+ () directly, especially when WSS protocol is used.
+
+
+
+ The version of your client. A new version also creates a new "virtual app" to separate players from older client versions.
+
+
+ The AppID as assigned from the Photon Cloud. If you host yourself, this is the "regular" Photon Server Application Name (most likely: "LoadBalancing").
+
+
+ The ClientAppType defines which sort of AppId should be expected. The LoadBalancingClient supports Realtime and Voice app types. Default: Realtime.
+
+
+ User authentication values to be sent to the Photon server right after connecting.
+ Set this property or pass AuthenticationValues by Connect(..., authValues).
+
+
+ Enables the new Authentication workflow.
+
+
+ Defines how the communication gets encrypted.
+
+
+ Optionally contains a protocol which will be used on Master- and GameServer.
+
+ When using AuthMode = AuthModeOption.AuthOnceWss, the client uses a wss-connection on the NameServer but another protocol on the other servers.
+ As the NameServer sends an address, which is different per protocol, it needs to know the expected protocol.
+
+ This is nullable by design. In many cases, the protocol on the NameServer is not different from the other servers.
+ If set, the operation AuthOnce will contain this value and the OpAuth response on the NameServer will execute a protocol switch.
+
+
+
+ Simplifies getting the token for connect/init requests, if this feature is enabled.
+
+
+ Internally used cache for the server's token. Identifies a user/session and can be used to rejoin.
+
+
+ True if this client uses a NameServer to get the Master Server address.
+ This value is public, despite being an internal value, which should only be set by this client.
+
+
+ Name Server Host Name for Photon Cloud. Without port and without any prefix.
+
+
+ Name Server Address for Photon Cloud (based on current protocol). You can use the default values and usually won't have to set this value.
+
+
+ Name Server port per protocol (the UDP port is different than TCP, etc).
+
+
+ Replaced by ServerPortOverrides.
+
+
+ Defines overrides for server ports. Used per server-type if > 0. Important: You must change these when the protocol changes!
+
+ Typical ports are listed in PhotonPortDefinition.
+
+ Instead of using the port provided from the servers, the specified port is used (independent of the protocol).
+ If a value is 0 (default), the port is not being replaced.
+
+ Different protocols have different typical ports per server-type.
+ https://doc.photonengine.com/en-us/pun/current/reference/tcp-and-udp-port-numbers
+
+ In case of using the AuthMode AutOnceWss, the name server's protocol is wss, while udp or tcp will be used on the master server and game server.
+ Set the ports accordingly per protocol and server.
+
+
+
+ Enables a fallback to another protocol in case a connect to the Name Server fails.
+
+ When connecting to the Name Server fails for a first time, the client will select an alternative
+ network protocol and re-try to connect.
+
+ The fallback will use the default Name Server port as defined by ProtocolToNameServerPort.
+
+ The fallback for TCP is UDP. All other protocols fallback to TCP.
+
+
+
+ The currently used server address (if any). The type of server is define by Server property.
+
+
+ Your Master Server address. In PhotonCloud, call ConnectToRegionMaster() to find your Master Server.
+
+ In the Photon Cloud, explicit definition of a Master Server Address is not best practice.
+ The Photon Cloud has a "Name Server" which redirects clients to a specific Master Server (per Region and AppId).
+
+
+
+ The game server's address for a particular room. In use temporarily, as assigned by master.
+
+
+ The server this client is currently connected or connecting to.
+
+ Each server (NameServer, MasterServer, GameServer) allow some operations and reject others.
+
+
+
+
+ Defines a proxy URL for WebSocket connections. Can be the proxy or point to a .pac file.
+
+
+ This URL supports various definitions:
+
+ "user:pass@proxyaddress:port"
+ "proxyaddress:port"
+ "system:"
+ "pac:"
+ "pac:http://host/path/pacfile.pac"
+
+ Important: Don't define a protocol, except to point to a pac file. the proxy address should not begin with http:// or https://.
+
+
+
+ Backing field for property.
+
+
+ Current state this client is in. Careful: several states are "transitions" that lead to other states.
+
+
+ Returns if this client is currently connected or connecting to some type of server.
+ This is even true while switching servers. Use IsConnectedAndReady to check only for those states that enable you to send Operations.
+
+
+
+ A refined version of IsConnected which is true only if your connection is ready to send operations.
+
+
+ Not all operations can be called on all types of servers. If an operation is unavailable on the currently connected server,
+ this will result in a OperationResponse with ErrorCode != 0.
+
+ Examples: The NameServer allows OpGetRegions which is not available anywhere else.
+ The MasterServer does not allow you to send events (OpRaiseEvent) and on the GameServer you are unable to join a lobby (OpJoinLobby).
+
+ To check which server you are on, use: .
+
+
+
+ Register a method to be called when this client's ClientState gets set.
+ This can be useful to react to being connected, joined into a room, etc.
+
+
+ Register a method to be called when an event got dispatched. Gets called after the LoadBalancingClient handled the internal events first.
+
+ This is an alternative to extending LoadBalancingClient to override OnEvent().
+
+ Note that OnEvent is calling EventReceived after it handled internal events first.
+ That means for example: Joining players will already be in the player list but leaving
+ players will already be removed from the room.
+
+
+
+ Register a method to be called when an operation response is received.
+
+ This is an alternative to extending LoadBalancingClient to override OnOperationResponse().
+
+ Note that OnOperationResponse gets executed before your Action is called.
+ That means for example: The OpJoinLobby response already set the state to "JoinedLobby"
+ and the response to OpLeave already triggered the Disconnect before this is called.
+
+
+
+ Wraps up the target objects for a group of callbacks, so they can be called conveniently.
+ By using Add or Remove, objects can "subscribe" or "unsubscribe" for this group of callbacks.
+
+
+ Wraps up the target objects for a group of callbacks, so they can be called conveniently.
+ By using Add or Remove, objects can "subscribe" or "unsubscribe" for this group of callbacks.
+
+
+ Wraps up the target objects for a group of callbacks, so they can be called conveniently.
+ By using Add or Remove, objects can "subscribe" or "unsubscribe" for this group of callbacks.
+
+
+ Wraps up the target objects for a group of callbacks, so they can be called conveniently.
+ By using Add or Remove, objects can "subscribe" or "unsubscribe" for this group of callbacks.
+
+
+ Wraps up the target objects for a group of callbacks, so they can be called conveniently.
+ By using Add or Remove, objects can "subscribe" or "unsubscribe" for this group of callbacks.
+
+
+ Wraps up the target objects for a group of callbacks, so they can be called conveniently.
+ By using Add or Remove, objects can "subscribe" or "unsubscribe" for this group of callbacks.
+
+
+ Summarizes (aggregates) the different causes for disconnects of a client.
+
+ A disconnect can be caused by: errors in the network connection or some vital operation failing
+ (which is considered "high level"). While operations always trigger a call to OnOperationResponse,
+ connection related changes are treated in OnStatusChanged.
+ The DisconnectCause is set in either case and summarizes the causes for any disconnect in a single
+ state value which can be used to display (or debug) the cause for disconnection.
+
+
+
+ Internal value if the client is in a lobby.
+ This is used to re-set this.State, when joining/creating a room fails.
+
+
+ The lobby this client currently uses. Defined when joining a lobby or creating rooms
+
+
+
+ If enabled, the client will get a list of available lobbies from the Master Server.
+
+
+ Set this value before the client connects to the Master Server. While connected to the Master
+ Server, a change has no effect.
+
+ Implement OptionalInfoCallbacks.OnLobbyStatisticsUpdate, to get the list of used lobbies.
+
+ The lobby statistics can be useful if your title dynamically uses lobbies, depending (e.g.)
+ on current player activity or such.
+ In this case, getting a list of available lobbies, their room-count and player-count can
+ be useful info.
+
+ ConnectUsingSettings sets this to the PhotonServerSettings value.
+
+
+
+ Internal lobby stats cache, used by LobbyStatistics.
+
+
+ The local player is never null but not valid unless the client is in a room, too. The ID will be -1 outside of rooms.
+
+
+
+ The nickname of the player (synced with others). Same as client.LocalPlayer.NickName.
+
+
+
+ An ID for this user. Sent in OpAuthenticate when you connect. If not set, the PlayerName is applied during connect.
+
+ On connect, if the UserId is null or empty, the client will copy the PlayName to UserId. If PlayerName is not set either
+ (before connect), the server applies a temporary ID which stays unknown to this client and other clients.
+
+ The UserId is what's used in FindFriends and for fetching data for your account (with WebHooks e.g.).
+
+ By convention, set this ID before you connect, not while being connected.
+ There is no error but the ID won't change while being connected.
+
+
+
+ The current room this client is connected to (null if none available).
+
+
+ Is true while being in a room (this.state == ClientState.Joined).
+
+ Aside from polling this value, game logic should implement IMatchmakingCallbacks in some class
+ and react when that gets called.
+ OpRaiseEvent, OpLeave and some other operations can only be used (successfully) when the client is in a room..
+
+
+
+ Statistic value available on master server: Players on master (looking for games).
+
+
+ Statistic value available on master server: Players in rooms (playing).
+
+
+ Statistic value available on master server: Rooms currently created.
+
+
+ Internally used to decide if a room must be created or joined on game server.
+
+
+ Used when the client arrives on the GS, to join the room with the correct values.
+
+
+ Used to cache a failed "enter room" operation on the Game Server, to return to the Master Server before calling a fail-callback.
+
+
+ Maximum of userIDs that can be sent in one friend list request.
+
+
+ Contains the list of names of friends to look up their state on the server.
+
+
+ Internal flag to know if the client currently fetches a friend list.
+
+
+ The cloud region this client connects to. Set by ConnectToRegionMaster(). Not set if you don't use a NameServer!
+
+
+ The cluster name provided by the Name Server.
+
+ The value is provided by the OpResponse for OpAuthenticate/OpAuthenticateOnce.
+ Default: null. This value only ever updates from the Name Server authenticate response.
+
+
+
+ Contains the list if enabled regions this client may use. Null, unless the client got a response to OpGetRegions.
+
+
+ Stores the best region summary of a previous session to speed up connecting.
+
+
+ Set when the best region pinging is done.
+
+
+ Internal connection setting/flag. If the client should connect to the best region or not.
+
+ It's set in the Connect...() methods. Only ConnectUsingSettings() sets it to true.
+ If true, client will ping available regions and select the best.
+ A bestRegionSummaryFromStorage can be used to cut the ping time short.
+
+
+
+ Definition of parameters for encryption data (included in Authenticate operation response).
+
+
+
+ Key for encryption mode
+
+
+
+
+ Key for first secret
+
+
+
+
+ Key for second secret
+
+
+
+ Add if true, remove if false.
+
+
+ Creates a LoadBalancingClient with UDP protocol or the one specified.
+ Specifies the network protocol to use for connections.
+
+
+ Creates a LoadBalancingClient, setting various values needed before connecting.
+ The Master Server's address to connect to. Used in Connect.
+ The AppId of this title. Needed for the Photon Cloud. Find it in the Dashboard.
+ A version for this client/build. In the Photon Cloud, players are separated by AppId, GameVersion and Region.
+ Specifies the network protocol to use for connections.
+
+
+
+ Gets the NameServer Address (with prefix and port), based on the set protocol (this.LoadBalancingPeer.UsedProtocol).
+
+ NameServer Address (with prefix and port).
+
+
+
+ Starts the "process" to connect to a Master Server, using MasterServerAddress and AppId properties.
+
+
+ To connect to the Photon Cloud, use ConnectUsingSettings() or ConnectToRegionMaster().
+
+ The process to connect includes several steps: the actual connecting, establishing encryption, authentification
+ (of app and optionally the user) and connecting to the MasterServer
+
+ Users can connect either anonymously or use "Custom Authentication" to verify each individual player's login.
+ Custom Authentication in Photon uses external services and communities to verify users. While the client provides a user's info,
+ the service setup is done in the Photon Cloud Dashboard.
+ The parameter authValues will set this.AuthValues and use them in the connect process.
+
+ Connecting to the Photon Cloud might fail due to:
+ - Network issues (OnStatusChanged() StatusCode.ExceptionOnConnect)
+ - Region not available (OnOperationResponse() for OpAuthenticate with ReturnCode == ErrorCode.InvalidRegion)
+ - Subscription CCU limit reached (OnOperationResponse() for OpAuthenticate with ReturnCode == ErrorCode.MaxCcuReached)
+
+
+
+
+ Connects to the NameServer for Photon Cloud, where a region and server list can be obtained.
+
+
+ If the workflow was started or failed right away.
+
+
+
+ Connects you to a specific region's Master Server, using the Name Server to find the IP.
+
+
+ If the region is null or empty, no connection will be made.
+ If the region (code) provided is not available, the connection process will fail on the Name Server.
+ This method connects only to the region defined. No "Best Region" pinging will be done.
+
+ If the region string does not contain a "/", this means no specific cluster is requested.
+ To support "Sharding", the region gets a "/*" postfix in this case, to select a random cluster.
+
+ If the operation could be sent. If false, no operation was sent.
+
+
+
+ Privately used only for reconnecting.
+
+
+
+ Can be used to reconnect to the master server after a disconnect.
+ Common use case: Press the Lock Button on a iOS device and you get disconnected immediately.
+
+
+
+ Can be used to return to a room quickly by directly reconnecting to a game server to rejoin a room.
+
+
+ Rejoining room will not send any player properties. Instead client will receive up-to-date ones from server.
+ If you want to set new player properties, do it once rejoined.
+
+ False, if the conditions are not met. Then, this client does not attempt the ReconnectAndRejoin.
+
+
+ Disconnects the peer from a server or stays disconnected. If the client / peer was connected, a callback will be triggered.
+
+ Disconnect will attempt to notify the server of the client closing the connection.
+
+ Clients that are in a room, will leave the room. If the room's playerTTL > 0, the player will just become inactive (and may rejoin).
+
+ This method will not change the current State, if this client State is PeerCreated, Disconnecting or Disconnected.
+ In those cases, there is also no callback for the disconnect. The DisconnectedCause will only change if the client was connected.
+
+
+
+
+ Private Disconnect variant that sets the state, too.
+
+
+
+
+ Useful to test loss of connection which will end in a client timeout. This modifies LoadBalancingPeer.NetworkSimulationSettings. Read remarks.
+
+
+ Use with care as this sets LoadBalancingPeer.IsSimulationEnabled.
+ Read LoadBalancingPeer.IsSimulationEnabled to check if this is on or off, if needed.
+
+ If simulateTimeout is true, LoadBalancingPeer.NetworkSimulationSettings.IncomingLossPercentage and
+ LoadBalancingPeer.NetworkSimulationSettings.OutgoingLossPercentage will be set to 100.
+ Obviously, this overrides any network simulation settings done before.
+
+ If you want fine-grained network simulation control, use the NetworkSimulationSettings.
+
+ The timeout will lead to a call to , as usual in a client timeout.
+
+ You could modify this method (or use NetworkSimulationSettings) to deliberately run into a server timeout by
+ just setting the OutgoingLossPercentage = 100 and the IncomingLossPercentage = 0.
+
+ If true, a connection loss is simulated. If false, the simulation ends.
+
+
+
+ This method dispatches all available incoming commands and then sends this client's outgoing commands.
+ It uses DispatchIncomingCommands and SendOutgoingCommands to do that.
+
+
+ The Photon client libraries are designed to fit easily into a game or application. The application
+ is in control of the context (thread) in which incoming events and responses are executed and has
+ full control of the creation of UDP/TCP packages.
+
+ Sending packages and dispatching received messages are two separate tasks. Service combines them
+ into one method at the cost of control. It calls DispatchIncomingCommands and SendOutgoingCommands.
+
+ Call this method regularly (10..50 times a second).
+
+ This will Dispatch ANY received commands (unless a reliable command in-order is still missing) and
+ events AND will send queued outgoing commands. Fewer calls might be more effective if a device
+ cannot send many packets per second, as multiple operations might be combined into one package.
+
+
+ You could replace Service by:
+
+ while (DispatchIncomingCommands()); //Dispatch until everything is Dispatched...
+ SendOutgoingCommands(); //Send a UDP/TCP package with outgoing messages
+
+
+
+
+
+
+ While on the NameServer, this gets you the list of regional servers (short names and their IPs to ping them).
+
+ If the operation could be sent. If false, no operation was sent (e.g. while not connected to the NameServer).
+
+
+
+ Request the rooms and online status for a list of friends. All clients should set a unique UserId before connecting. The result is available in this.FriendList.
+
+
+ Used on Master Server to find the rooms played by a selected list of users.
+ The result will be stored in LoadBalancingClient.FriendList, which is null before the first server response.
+
+ Users identify themselves by setting a UserId in the LoadBalancingClient instance.
+ This will send the ID in OpAuthenticate during connect (to master and game servers).
+ Note: Changing a player's name doesn't make sense when using a friend list.
+
+ The list of usernames must be fetched from some other source (not provided by Photon).
+
+
+ Internal:
+ The server response includes 2 arrays of info (each index matching a friend from the request):
+ ParameterCode.FindFriendsResponseOnlineList = bool[] of online states
+ ParameterCode.FindFriendsResponseRoomIdList = string[] of room names (empty string if not in a room)
+
+ The options may be used to define which state a room must match to be returned.
+
+ Array of friend's names (make sure they are unique).
+ Options that affect the result of the FindFriends operation.
+ If the operation could be sent (requires connection).
+
+
+ If already connected to a Master Server, this joins the specified lobby. This request triggers an OnOperationResponse() call and the callback OnJoinedLobby().
+ The lobby to join. Use null for default lobby.
+ If the operation could be sent. False, if the client is not IsConnectedAndReady or when it's not connected to a Master Server.
+
+
+ Opposite of joining a lobby. You don't have to explicitly leave a lobby to join another (client can be in one max, at any time).
+ If the operation could be sent (has to be connected).
+
+
+
+ Joins a random room that matches the filter. Will callback: OnJoinedRoom or OnJoinRandomFailed.
+
+
+ Used for random matchmaking. You can join any room or one with specific properties defined in opJoinRandomRoomParams.
+
+ You can use expectedCustomRoomProperties and expectedMaxPlayers as filters for accepting rooms.
+ If you set expectedCustomRoomProperties, a room must have the exact same key values set at Custom Properties.
+ You need to define which Custom Room Properties will be available for matchmaking when you create a room.
+ See: OpCreateRoom(string roomName, RoomOptions roomOptions, TypedLobby lobby)
+
+ This operation fails if no rooms are fitting or available (all full, closed or not visible).
+ It may also fail when actually joining the room which was found. Rooms may close, become full or empty anytime.
+
+ This method can only be called while the client is connected to a Master Server so you should
+ implement the callback OnConnectedToMaster.
+ Check the return value to make sure the operation will be called on the server.
+ Note: There will be no callbacks if this method returned false.
+
+
+ This client's State is set to ClientState.Joining immediately, when the operation could
+ be called. In the background, the client will switch servers and call various related operations.
+
+ When you're in the room, this client's State will become ClientState.Joined.
+
+
+ When entering a room, this client's Player Custom Properties will be sent to the room.
+ Use LocalPlayer.SetCustomProperties to set them, even while not yet in the room.
+ Note that the player properties will be cached locally and are not wiped when leaving a room.
+
+ More about matchmaking:
+ https://doc.photonengine.com/en-us/realtime/current/reference/matchmaking-and-lobby
+
+ You can define an array of expectedUsers, to block player slots in the room for these users.
+ The corresponding feature in Photon is called "Slot Reservation" and can be found in the doc pages.
+
+ Optional definition of properties to filter rooms in random matchmaking.
+ If the operation could be sent currently (requires connection to Master Server).
+
+
+
+ Attempts to join a room that matches the specified filter and creates a room if none found.
+
+
+ This operation is a combination of filter-based random matchmaking with the option to create a new room,
+ if no fitting room exists.
+ The benefit of that is that the room creation is done by the same operation and the room can be found
+ by the very next client, looking for similar rooms.
+
+ There are separate parameters for joining and creating a room.
+
+ This method can only be called while connected to a Master Server.
+ This client's State is set to ClientState.Joining immediately.
+
+ Either IMatchmakingCallbacks.OnJoinedRoom or IMatchmakingCallbacks.OnCreatedRoom get called.
+
+ More about matchmaking:
+ https://doc.photonengine.com/en-us/realtime/current/reference/matchmaking-and-lobby
+
+ Check the return value to make sure the operation will be called on the server.
+ Note: There will be no callbacks if this method returned false.
+
+ If the operation will be sent (requires connection to Master Server).
+
+
+
+ Creates a new room. Will callback: OnCreatedRoom and OnJoinedRoom or OnCreateRoomFailed.
+
+
+ When successful, the client will enter the specified room and callback both OnCreatedRoom and OnJoinedRoom.
+ In all error cases, OnCreateRoomFailed gets called.
+
+ Creating a room will fail if the room name is already in use or when the RoomOptions clashing
+ with one another. Check the EnterRoomParams reference for the various room creation options.
+
+
+ This method can only be called while the client is connected to a Master Server so you should
+ implement the callback OnConnectedToMaster.
+ Check the return value to make sure the operation will be called on the server.
+ Note: There will be no callbacks if this method returned false.
+
+
+ When you're in the room, this client's State will become ClientState.Joined.
+
+
+ When entering a room, this client's Player Custom Properties will be sent to the room.
+ Use LocalPlayer.SetCustomProperties to set them, even while not yet in the room.
+ Note that the player properties will be cached locally and are not wiped when leaving a room.
+
+ You can define an array of expectedUsers, to block player slots in the room for these users.
+ The corresponding feature in Photon is called "Slot Reservation" and can be found in the doc pages.
+
+ Definition of properties for the room to create.
+ If the operation could be sent currently (requires connection to Master Server).
+
+
+
+ Joins a specific room by name and creates it on demand. Will callback: OnJoinedRoom or OnJoinRoomFailed.
+
+
+ Useful when players make up a room name to meet in:
+ All involved clients call the same method and whoever is first, also creates the room.
+
+ When successful, the client will enter the specified room.
+ The client which creates the room, will callback both OnCreatedRoom and OnJoinedRoom.
+ Clients that join an existing room will only callback OnJoinedRoom.
+ In all error cases, OnJoinRoomFailed gets called.
+
+ Joining a room will fail, if the room is full, closed or when the user
+ already is present in the room (checked by userId).
+
+ To return to a room, use OpRejoinRoom.
+
+ This method can only be called while the client is connected to a Master Server so you should
+ implement the callback OnConnectedToMaster.
+ Check the return value to make sure the operation will be called on the server.
+ Note: There will be no callbacks if this method returned false.
+
+ This client's State is set to ClientState.Joining immediately, when the operation could
+ be called. In the background, the client will switch servers and call various related operations.
+
+ When you're in the room, this client's State will become ClientState.Joined.
+
+
+ If you set room properties in roomOptions, they get ignored when the room is existing already.
+ This avoids changing the room properties by late joining players.
+
+ When entering a room, this client's Player Custom Properties will be sent to the room.
+ Use LocalPlayer.SetCustomProperties to set them, even while not yet in the room.
+ Note that the player properties will be cached locally and are not wiped when leaving a room.
+
+ You can define an array of expectedUsers, to block player slots in the room for these users.
+ The corresponding feature in Photon is called "Slot Reservation" and can be found in the doc pages.
+
+ Definition of properties for the room to create or join.
+ If the operation could be sent currently (requires connection to Master Server).
+
+
+
+ Joins a room by name. Will callback: OnJoinedRoom or OnJoinRoomFailed.
+
+
+ Useful when using lobbies or when players follow friends or invite each other.
+
+ When successful, the client will enter the specified room and callback via OnJoinedRoom.
+ In all error cases, OnJoinRoomFailed gets called.
+
+ Joining a room will fail if the room is full, closed, not existing or when the user
+ already is present in the room (checked by userId).
+
+ To return to a room, use OpRejoinRoom.
+ When players invite each other and it's unclear who's first to respond, use OpJoinOrCreateRoom instead.
+
+ This method can only be called while the client is connected to a Master Server so you should
+ implement the callback OnConnectedToMaster.
+ Check the return value to make sure the operation will be called on the server.
+ Note: There will be no callbacks if this method returned false.
+
+ A room's name has to be unique (per region, appid and gameversion).
+ When your title uses a global matchmaking or invitations (e.g. an external solution),
+ keep regions and the game versions in mind to join a room.
+
+
+ This client's State is set to ClientState.Joining immediately, when the operation could
+ be called. In the background, the client will switch servers and call various related operations.
+
+ When you're in the room, this client's State will become ClientState.Joined.
+
+
+ When entering a room, this client's Player Custom Properties will be sent to the room.
+ Use LocalPlayer.SetCustomProperties to set them, even while not yet in the room.
+ Note that the player properties will be cached locally and are not wiped when leaving a room.
+
+ You can define an array of expectedUsers, to reserve player slots in the room for friends or party members.
+ The corresponding feature in Photon is called "Slot Reservation" and can be found in the doc pages.
+
+ Definition of properties for the room to join.
+ If the operation could be sent currently (requires connection to Master Server).
+
+
+
+ Rejoins a room by roomName (using the userID internally to return). Will callback: OnJoinedRoom or OnJoinRoomFailed.
+
+
+ Used to return to a room, before this user was removed from the players list.
+ Internally, the userID will be checked by the server, to make sure this user is in the room (active or inactice).
+
+ In contrast to join, this operation never adds a players to a room. It will attempt to retake an existing
+ spot in the playerlist or fail. This makes sure the client doean't accidentally join a room when the
+ game logic meant to re-activate an existing actor in an existing room.
+
+ This method will fail on the server, when the room does not exist, can't be loaded (persistent rooms) or
+ when the userId is not in the player list of this room. This will lead to a callback OnJoinRoomFailed.
+
+ Rejoining room will not send any player properties. Instead client will receive up-to-date ones from server.
+ If you want to set new player properties, do it once rejoined.
+
+
+
+
+ Leaves the current room, optionally telling the server that the user is just becoming inactive. Will callback: OnLeftRoom.
+
+
+
+ OpLeaveRoom skips execution when the room is null or the server is not GameServer or the client is disconnecting from GS already.
+ OpLeaveRoom returns false in those cases and won't change the state, so check return of this method.
+
+ In some cases, this method will skip the OpLeave call and just call Disconnect(),
+ which not only leaves the room but also the server. Disconnect also triggers a leave and so that workflow is is quicker.
+
+ If true, this player becomes inactive in the game and can return later (if PlayerTTL of the room is != 0).
+ WebFlag: Securely transmit the encrypted object AuthCookie to the web service in PathLeave webhook when available
+ If the current room could be left (impossible while not in a room).
+
+
+ Gets a list of rooms matching the (non empty) SQL filter for the given SQL-typed lobby.
+
+ Operation is only available for lobbies of type SqlLobby and the filter can not be empty.
+ It will check those conditions and fail locally, returning false.
+
+ This is an async request which triggers a OnOperationResponse() call.
+
+
+ The lobby to query. Has to be of type SqlLobby.
+ The sql query statement.
+ If the operation could be sent (has to be connected).
+
+
+
+ Updates and synchronizes a Player's Custom Properties. Optionally, expectedProperties can be provided as condition.
+
+
+ Custom Properties are a set of string keys and arbitrary values which is synchronized
+ for the players in a Room. They are available when the client enters the room, as
+ they are in the response of OpJoin and OpCreate.
+
+ Custom Properties either relate to the (current) Room or a Player (in that Room).
+
+ Both classes locally cache the current key/values and make them available as
+ property: CustomProperties. This is provided only to read them.
+ You must use the method SetCustomProperties to set/modify them.
+
+ Any client can set any Custom Properties anytime (when in a room).
+ It's up to the game logic to organize how they are best used.
+
+ You should call SetCustomProperties only with key/values that are new or changed. This reduces
+ traffic and performance.
+
+ Unless you define some expectedProperties, setting key/values is always permitted.
+ In this case, the property-setting client will not receive the new values from the server but
+ instead update its local cache in SetCustomProperties.
+
+ If you define expectedProperties, the server will skip updates if the server property-cache
+ does not contain all expectedProperties with the same values.
+ In this case, the property-setting client will get an update from the server and update it's
+ cached key/values at about the same time as everyone else.
+
+ The benefit of using expectedProperties can be only one client successfully sets a key from
+ one known value to another.
+ As example: Store who owns an item in a Custom Property "ownedBy". It's 0 initally.
+ When multiple players reach the item, they all attempt to change "ownedBy" from 0 to their
+ actorNumber. If you use expectedProperties {"ownedBy", 0} as condition, the first player to
+ take the item will have it (and the others fail to set the ownership).
+
+ Properties get saved with the game state for Turnbased games (which use IsPersistent = true).
+
+ Defines which player the Custom Properties belong to. ActorID of a player.
+ Hashtable of Custom Properties that changes.
+ Provide some keys/values to use as condition for setting the new values. Client must be in room.
+ Defines if the set properties should be forwarded to a WebHook. Client must be in room.
+
+ False if propertiesToSet is null or empty or have zero string keys.
+ If not in a room, returns true if local player and expectedProperties and webFlags are null.
+ False if actorNr is lower than or equal to zero.
+ Otherwise, returns if the operation could be sent to the server.
+
+
+
+ Internally used to cache and set properties (including well known properties).
+ Requires being in a room (because this attempts to send an operation which will fail otherwise).
+
+
+
+ Updates and synchronizes this Room's Custom Properties. Optionally, expectedProperties can be provided as condition.
+
+
+ Custom Properties are a set of string keys and arbitrary values which is synchronized
+ for the players in a Room. They are available when the client enters the room, as
+ they are in the response of OpJoin and OpCreate.
+
+ Custom Properties either relate to the (current) Room or a Player (in that Room).
+
+ Both classes locally cache the current key/values and make them available as
+ property: CustomProperties. This is provided only to read them.
+ You must use the method SetCustomProperties to set/modify them.
+
+ Any client can set any Custom Properties anytime (when in a room).
+ It's up to the game logic to organize how they are best used.
+
+ You should call SetCustomProperties only with key/values that are new or changed. This reduces
+ traffic and performance.
+
+ Unless you define some expectedProperties, setting key/values is always permitted.
+ In this case, the property-setting client will not receive the new values from the server but
+ instead update its local cache in SetCustomProperties.
+
+ If you define expectedProperties, the server will skip updates if the server property-cache
+ does not contain all expectedProperties with the same values.
+ In this case, the property-setting client will get an update from the server and update it's
+ cached key/values at about the same time as everyone else.
+
+ The benefit of using expectedProperties can be only one client successfully sets a key from
+ one known value to another.
+ As example: Store who owns an item in a Custom Property "ownedBy". It's 0 initally.
+ When multiple players reach the item, they all attempt to change "ownedBy" from 0 to their
+ actorNumber. If you use expectedProperties {"ownedBy", 0} as condition, the first player to
+ take the item will have it (and the others fail to set the ownership).
+
+ Properties get saved with the game state for Turnbased games (which use IsPersistent = true).
+
+ Hashtable of Custom Properties that changes.
+ Provide some keys/values to use as condition for setting the new values.
+ Defines web flags for an optional PathProperties webhook.
+
+ False if propertiesToSet is null or empty or have zero string keys.
+ Otherwise, returns if the operation could be sent to the server.
+
+
+
+ Internally used to cache and set properties (including well known properties).
+ Requires being in a room (because this attempts to send an operation which will fail otherwise).
+
+
+
+ Send an event with custom code/type and any content to the other players in the same room.
+
+ Identifies this type of event (and the content). Your game's event codes can start with 0.
+ Any serializable datatype (including Hashtable like the other OpRaiseEvent overloads).
+ Contains used send options. If you pass null, the default options will be used.
+ Send options for reliable, encryption etc
+ If operation could be enqueued for sending. Sent when calling: Service or SendOutgoingCommands.
+
+
+
+ Operation to handle this client's interest groups (for events in room).
+
+
+ Note the difference between passing null and byte[0]:
+ null won't add/remove any groups.
+ byte[0] will add/remove all (existing) groups.
+ First, removing groups is executed. This way, you could leave all groups and join only the ones provided.
+
+ Changes become active not immediately but when the server executes this operation (approximately RTT/2).
+
+ Groups to remove from interest. Null will not remove any. A byte[0] will remove all.
+ Groups to add to interest. Null will not add any. A byte[0] will add all current.
+ If operation could be enqueued for sending. Sent when calling: Service or SendOutgoingCommands.
+
+
+
+ Privately used to read-out properties coming from the server in events and operation responses (which might be a bit tricky).
+
+
+
+
+ Privately used only to read properties for a distinct actor (which might be the hashtable OR a key-pair value IN the actorProperties).
+
+
+
+
+ Internally used to set the LocalPlayer's ID (from -1 to the actual in-room ID).
+
+ New actor ID (a.k.a actorNr) assigned when joining a room.
+
+
+
+ Called internally, when a game was joined or created on the game server successfully.
+
+
+ This reads the response, finds out the local player's actorNumber (a.k.a. Player.ID) and applies properties of the room and players.
+ Errors for these operations are to be handled before this method is called.
+
+ Contains the server's response for an operation called by this peer.
+
+
+
+ Factory method to create a player instance - override to get your own player-type with custom features.
+
+ The name of the player to be created.
+ The player ID (a.k.a. actorNumber) of the player to be created.
+ Sets the distinction if the player to be created is your player or if its assigned to someone else.
+ The custom properties for this new player
+ The newly created player
+
+
+ Internal "factory" method to create a room-instance.
+
+
+ Debug output of low level api (and this client).
+ This method is not responsible to keep up the state of a LoadBalancingClient. Calling base.DebugReturn on overrides is optional.
+
+
+
+ Uses the OperationResponses provided by the server to advance the internal state and call ops as needed.
+
+
+ When this method finishes, it will call your OnOpResponseAction (if any). This way, you can get any
+ operation response without overriding this class.
+
+ To implement a more complex game/app logic, you should implement your own class that inherits the
+ LoadBalancingClient. Override this method to use your own operation-responses easily.
+
+ This method is essential to update the internal state of a LoadBalancingClient, so overriding methods
+ must call base.OnOperationResponse().
+
+ Contains the server's response for an operation called by this peer.
+
+
+
+ Uses the connection's statusCodes to advance the internal state and call operations as needed.
+
+ This method is essential to update the internal state of a LoadBalancingClient. Overriding methods must call base.OnStatusChanged.
+
+
+
+ Uses the photonEvent's provided by the server to advance the internal state and call ops as needed.
+
+ This method is essential to update the internal state of a LoadBalancingClient. Overriding methods must call base.OnEvent.
+
+
+ In Photon 4, "raw messages" will get their own callback method in the interface. Not used yet.
+
+
+ A callback of the RegionHandler, provided in OnRegionListReceived.
+ The regionHandler wraps up best region and other region relevant info.
+
+
+
+ This operation makes Photon call your custom web-service by path/name with the given parameters (converted into Json).
+ Use as a callback.
+
+
+ A WebRPC calls a custom, http-based function on a server you provide. The uriPath is relative to a "base path"
+ which is configured server-side. The sent parameters get converted from C# types to Json. Vice versa, the response
+ of the web-service will be converted to C# types and sent back as normal operation response.
+
+ To use this feature, you have to setup your server:
+
+ For a Photon Cloud application,
+ visit the Dashboard and setup "WebHooks". The BaseUrl is used for WebRPCs as well.
+
+ The class is a helper-class that extracts the most valuable content from the WebRPC
+ response.
+
+ The url path to call, relative to the baseUrl configured on Photon's server-side.
+ The parameters to send to the web-service method.
+ Defines if the authentication cookie gets sent to a WebHook (if setup).
+
+
+
+ Registers an object for callbacks for the implemented callback-interfaces.
+
+
+ Adding and removing callback targets is queued to not mess with callbacks in execution.
+ Internally, this means that the addition/removal is done before the LoadBalancingClient
+ calls the next callbacks. This detail should not affect a game's workflow.
+
+ The covered callback interfaces are: IConnectionCallbacks, IMatchmakingCallbacks,
+ ILobbyCallbacks, IInRoomCallbacks, IOnEventCallback and IWebRpcCallback.
+
+ See:
+
+ The object that registers to get callbacks from this client.
+
+
+
+ Unregisters an object from callbacks for the implemented callback-interfaces.
+
+
+ Adding and removing callback targets is queued to not mess with callbacks in execution.
+ Internally, this means that the addition/removal is done before the LoadBalancingClient
+ calls the next callbacks. This detail should not affect a game's workflow.
+
+ The covered callback interfaces are: IConnectionCallbacks, IMatchmakingCallbacks,
+ ILobbyCallbacks, IInRoomCallbacks, IOnEventCallback and IWebRpcCallback.
+
+ See:
+
+ The object that unregisters from getting callbacks.
+
+
+
+ Applies queued callback cahnges from a queue to the actual containers. Will cause exceptions if used while callbacks execute.
+
+
+ There is no explicit check that this is not called during callbacks, however the implemented, private logic takes care of this.
+
+
+
+ Helper method to cast and apply a target per (interface) type.
+ Either of the interfaces for callbacks.
+ The queued change to apply (add or remove) some target.
+ The container that calls callbacks on it's list of targets.
+
+
+
+ Collection of "organizational" callbacks for the Realtime Api to cover: Connection and Regions.
+
+
+ Classes that implement this interface must be registered to get callbacks for various situations.
+
+ To register for callbacks, call and pass the class implementing this interface
+ To stop getting callbacks, call and pass the class implementing this interface
+
+
+ \ingroup callbacks
+
+
+
+ Called to signal that the "low level connection" got established but before the client can call operation on the server.
+
+
+ After the (low level transport) connection is established, the client will automatically send
+ the Authentication operation, which needs to get a response before the client can call other operations.
+
+ Your logic should wait for either: OnRegionListReceived or OnConnectedToMaster.
+
+ This callback is useful to detect if the server can be reached at all (technically).
+ Most often, it's enough to implement OnDisconnected(DisconnectCause cause) and check for the cause.
+
+ This is not called for transitions from the masterserver to game servers.
+
+
+
+
+ Called when the client is connected to the Master Server and ready for matchmaking and other tasks.
+
+
+ The list of available rooms won't become available unless you join a lobby via LoadBalancingClient.OpJoinLobby.
+ You can join rooms and create them even without being in a lobby. The default lobby is used in that case.
+
+
+
+
+ Called after disconnecting from the Photon server. It could be a failure or an explicit disconnect call
+
+
+ The reason for this disconnect is provided as DisconnectCause.
+
+
+
+
+ Called when the Name Server provided a list of regions for your title.
+
+
+ This callback is called as soon as the list is available. No pings were sent for Best Region selection yet.
+ If the client is set to connect to the Best Region (lowest ping), one or more regions get pinged.
+ Not all regions are pinged. As soon as the results are final, the client will connect to the best region,
+ so you can check the ping results when connected to the Master Server.
+
+ Check the RegionHandler class description, to make use of the provided values.
+
+ The currently used RegionHandler.
+
+
+
+ Called when your Custom Authentication service responds with additional data.
+
+
+ Custom Authentication services can include some custom data in their response.
+ When present, that data is made available in this callback as Dictionary.
+ While the keys of your data have to be strings, the values can be either string or a number (in Json).
+ You need to make extra sure, that the value type is the one you expect. Numbers become (currently) int64.
+
+ Example: void OnCustomAuthenticationResponse(Dictionary<string, object> data) { ... }
+
+
+
+
+
+ Called when the custom authentication failed. Followed by disconnect!
+
+
+ Custom Authentication can fail due to user-input, bad tokens/secrets.
+ If authentication is successful, this method is not called. Implement OnJoinedLobby() or OnConnectedToMaster() (as usual).
+
+ During development of a game, it might also fail due to wrong configuration on the server side.
+ In those cases, logging the debugMessage is very important.
+
+ Unless you setup a custom authentication service for your app (in the [Dashboard](https://dashboard.photonengine.com)),
+ this won't be called!
+
+ Contains a debug message why authentication failed. This has to be fixed during development.
+
+
+
+ Collection of "organizational" callbacks for the Realtime Api to cover the Lobby.
+
+
+ Classes that implement this interface must be registered to get callbacks for various situations.
+
+ To register for callbacks, call and pass the class implementing this interface
+ To stop getting callbacks, call and pass the class implementing this interface
+
+
+ \ingroup callbacks
+
+
+
+ Called on entering a lobby on the Master Server. The actual room-list updates will call OnRoomListUpdate.
+
+
+ While in the lobby, the roomlist is automatically updated in fixed intervals (which you can't modify in the public cloud).
+ The room list gets available via OnRoomListUpdate.
+
+
+
+
+ Called after leaving a lobby.
+
+
+ When you leave a lobby, [OpCreateRoom](@ref OpCreateRoom) and [OpJoinRandomRoom](@ref OpJoinRandomRoom)
+ automatically refer to the default lobby.
+
+
+
+
+ Called for any update of the room-listing while in a lobby (InLobby) on the Master Server.
+
+
+ Each item is a RoomInfo which might include custom properties (provided you defined those as lobby-listed when creating a room).
+ Not all types of lobbies provide a listing of rooms to the client. Some are silent and specialized for server-side matchmaking.
+
+
+
+
+ Called when the Master Server sent an update for the Lobby Statistics.
+
+
+ This callback has two preconditions:
+ EnableLobbyStatistics must be set to true, before this client connects.
+ And the client has to be connected to the Master Server, which is providing the info about lobbies.
+
+
+
+
+ Collection of "organizational" callbacks for the Realtime Api to cover Matchmaking.
+
+
+ Classes that implement this interface must be registered to get callbacks for various situations.
+
+ To register for callbacks, call and pass the class implementing this interface
+ To stop getting callbacks, call and pass the class implementing this interface
+
+
+ \ingroup callbacks
+
+
+
+ Called when the server sent the response to a FindFriends request.
+
+
+ After calling OpFindFriends, the Master Server will cache the friend list and send updates to the friend
+ list. The friends includes the name, userId, online state and the room (if any) for each requested user/friend.
+
+ Use the friendList to update your UI and store it, if the UI should highlight changes.
+
+
+
+
+ Called when this client created a room and entered it. OnJoinedRoom() will be called as well.
+
+
+ This callback is only called on the client which created a room (see OpCreateRoom).
+
+ As any client might close (or drop connection) anytime, there is a chance that the
+ creator of a room does not execute OnCreatedRoom.
+
+ If you need specific room properties or a "start signal", implement OnMasterClientSwitched()
+ and make each new MasterClient check the room's state.
+
+
+
+
+ Called when the server couldn't create a room (OpCreateRoom failed).
+
+
+ Creating a room may fail for various reasons. Most often, the room already exists (roomname in use) or
+ the RoomOptions clash and it's impossible to create the room.
+
+ When creating a room fails on a Game Server:
+ The client will cache the failure internally and returns to the Master Server before it calls the fail-callback.
+ This way, the client is ready to find/create a room at the moment of the callback.
+ In this case, the client skips calling OnConnectedToMaster but returning to the Master Server will still call OnConnected.
+ Treat callbacks of OnConnected as pure information that the client could connect.
+
+ Operation ReturnCode from the server.
+ Debug message for the error.
+
+
+
+ Called when the LoadBalancingClient entered a room, no matter if this client created it or simply joined.
+
+
+ When this is called, you can access the existing players in Room.Players, their custom properties and Room.CustomProperties.
+
+ In this callback, you could create player objects. For example in Unity, instantiate a prefab for the player.
+
+ If you want a match to be started "actively", enable the user to signal "ready" (using OpRaiseEvent or a Custom Property).
+
+
+
+
+ Called when a previous OpJoinRoom call failed on the server.
+
+
+ Joining a room may fail for various reasons. Most often, the room is full or does not exist anymore
+ (due to someone else being faster or closing the room).
+
+ When joining a room fails on a Game Server:
+ The client will cache the failure internally and returns to the Master Server before it calls the fail-callback.
+ This way, the client is ready to find/create a room at the moment of the callback.
+ In this case, the client skips calling OnConnectedToMaster but returning to the Master Server will still call OnConnected.
+ Treat callbacks of OnConnected as pure information that the client could connect.
+
+ Operation ReturnCode from the server.
+ Debug message for the error.
+
+
+
+ Called when a previous OpJoinRandom call failed on the server.
+
+
+ The most common causes are that a room is full or does not exist (due to someone else being faster or closing the room).
+
+ This operation is only ever sent to the Master Server. Once a room is found by the Master Server, the client will
+ head off to the designated Game Server and use the operation Join on the Game Server.
+
+ When using multiple lobbies (via OpJoinLobby or a TypedLobby parameter), another lobby might have more/fitting rooms.
+
+ Operation ReturnCode from the server.
+ Debug message for the error.
+
+
+
+ Called when the local user/client left a room, so the game's logic can clean up it's internal state.
+
+
+ When leaving a room, the LoadBalancingClient will disconnect the Game Server and connect to the Master Server.
+ This wraps up multiple internal actions.
+
+ Wait for the callback OnConnectedToMaster, before you use lobbies and join or create rooms.
+
+
+
+
+ Collection of "in room" callbacks for the Realtime Api to cover: Players entering or leaving, property updates and Master Client switching.
+
+
+ Classes that implement this interface must be registered to get callbacks for various situations.
+
+ To register for callbacks, call and pass the class implementing this interface
+ To stop getting callbacks, call and pass the class implementing this interface
+
+
+ \ingroup callbacks
+
+
+
+ Called when a remote player entered the room. This Player is already added to the playerlist.
+
+
+ If your game starts with a certain number of players, this callback can be useful to check the
+ Room.playerCount and find out if you can start.
+
+
+
+
+ Called when a remote player left the room or became inactive. Check otherPlayer.IsInactive.
+
+
+ If another player leaves the room or if the server detects a lost connection, this callback will
+ be used to notify your game logic.
+
+ Depending on the room's setup, players may become inactive, which means they may return and retake
+ their spot in the room. In such cases, the Player stays in the Room.Players dictionary.
+
+ If the player is not just inactive, it gets removed from the Room.Players dictionary, before
+ the callback is called.
+
+
+
+
+ Called when room properties changed. The propertiesThatChanged contain only the keys that changed.
+
+
+ In most cases, this method gets called due to some player settings Room Properties.
+ However, there are also "Well Known Properties", which use byte keys and this callback may include them.
+ Especially when entering a room, the server will also send the required Well Known Properties and those
+ are not filtered out before Realtime calls OnRoomPropertiesUpdate.
+
+ You can safely ignore the byte typed keys in propertiesThatChanged.
+
+ Changing properties is usually done by Room.SetCustomProperties.
+
+
+
+
+
+ Called when custom player-properties are changed. Player and the changed properties are passed as object[].
+
+
+ Changing properties must be done by Player.SetCustomProperties, which causes this callback locally, too.
+
+ Contains Player that changed.
+ Contains the properties that changed.
+
+
+
+ Called after switching to a new MasterClient when the current one leaves.
+
+
+ This is not called when this client enters a room.
+ The former MasterClient is still in the player list when this method get called.
+
+
+
+
+ Event callback for the Realtime Api. Covers events from the server and those sent by clients via OpRaiseEvent.
+
+
+ Classes that implement this interface must be registered to get callbacks for various situations.
+
+ To register for callbacks, call and pass the class implementing this interface
+ To stop getting callbacks, call and pass the class implementing this interface
+
+
+ \ingroup callbacks
+
+
+ Called for any incoming events.
+
+ To receive events, implement IOnEventCallback in any class and register it via AddCallbackTarget
+ (either in LoadBalancingClient or PhotonNetwork).
+
+ With the EventData.Sender you can look up the Player who sent the event.
+
+ It is best practice to assign an eventCode for each different type of content and action, so the Code
+ will be essential to read the incoming events.
+
+
+
+
+ Interface for "WebRpc" callbacks for the Realtime Api. Currently includes only responses for Web RPCs.
+
+
+ Classes that implement this interface must be registered to get callbacks for various situations.
+
+ To register for callbacks, call and pass the class implementing this interface
+ To stop getting callbacks, call and pass the class implementing this interface
+
+
+ \ingroup callbacks
+
+
+
+ Called when the response to a WebRPC is available. See .
+
+
+ Important: The response.ReturnCode is 0 if Photon was able to reach your web-service.
+ The content of the response is what your web-service sent. You can create a WebRpcResponse from it.
+ Example: WebRpcResponse webResponse = new WebRpcResponse(operationResponse);
+
+ Please note: Class OperationResponse is in a namespace which needs to be "used":
+ using ExitGames.Client.Photon; // includes OperationResponse (and other classes)
+
+
+ public void OnWebRpcResponse(OperationResponse response)
+ {
+ Debug.LogFormat("WebRPC operation response {0}", response.ToStringFull());
+ switch (response.ReturnCode)
+ {
+ case ErrorCode.Ok:
+ WebRpcResponse webRpcResponse = new WebRpcResponse(response);
+ Debug.LogFormat("Parsed WebRPC response {0}", response.ToStringFull());
+ if (string.IsNullOrEmpty(webRpcResponse.Name))
+ {
+ Debug.LogError("Unexpected: WebRPC response did not contain WebRPC method name");
+ }
+ if (webRpcResponse.ResultCode == 0) // success
+ {
+ switch (webRpcResponse.Name)
+ {
+ // todo: add your code here
+ case GetGameListWebRpcMethodName: // example
+ // ...
+ break;
+ }
+ }
+ else if (webRpcResponse.ResultCode == -1)
+ {
+ Debug.LogErrorFormat("Web server did not return ResultCode for WebRPC method=\"{0}\", Message={1}", webRpcResponse.Name, webRpcResponse.Message);
+ }
+ else
+ {
+ Debug.LogErrorFormat("Web server returned ResultCode={0} for WebRPC method=\"{1}\", Message={2}", webRpcResponse.ResultCode, webRpcResponse.Name, webRpcResponse.Message);
+ }
+ break;
+ case ErrorCode.ExternalHttpCallFailed: // web service unreachable
+ Debug.LogErrorFormat("WebRPC call failed as request could not be sent to the server. {0}", response.DebugMessage);
+ break;
+ case ErrorCode.HttpLimitReached: // too many WebRPCs in a short period of time
+ // the debug message should contain the limit exceeded
+ Debug.LogErrorFormat("WebRPCs rate limit exceeded: {0}", response.DebugMessage);
+ break;
+ case ErrorCode.InvalidOperation: // WebRPC not configured at all OR not configured properly OR trying to send on name server
+ if (PhotonNetwork.Server == ServerConnection.NameServer)
+ {
+ Debug.LogErrorFormat("WebRPC not supported on NameServer. {0}", response.DebugMessage);
+ }
+ else
+ {
+ Debug.LogErrorFormat("WebRPC not properly configured or not configured at all. {0}", response.DebugMessage);
+ }
+ break;
+ default:
+ // other unknown error, unexpected
+ Debug.LogErrorFormat("Unexpected error, {0} {1}", response.ReturnCode, response.DebugMessage);
+ break;
+ }
+ }
+
+
+
+
+
+ Interface for event callback for the Realtime Api.
+
+
+ Classes that implement this interface must be registered to get callbacks for various situations.
+
+ To register for callbacks, call and pass the class implementing this interface
+ To stop getting callbacks, call and pass the class implementing this interface
+
+
+ \ingroup callbacks
+
+
+
+ Called when the client receives an event from the server indicating that an error happened there.
+
+
+ In most cases this could be either:
+ 1. an error from webhooks plugin (if HasErrorInfo is enabled), read more here:
+ https://doc.photonengine.com/en-us/realtime/current/gameplay/web-extensions/webhooks#options
+ 2. an error sent from a custom server plugin via PluginHost.BroadcastErrorInfoEvent, see example here:
+ https://doc.photonengine.com/en-us/server/current/plugins/manual#handling_http_response
+ 3. an error sent from the server, for example, when the limit of cached events has been exceeded in the room
+ (all clients will be disconnected and the room will be closed in this case)
+ read more here: https://doc.photonengine.com/en-us/realtime/current/gameplay/cached-events#special_considerations
+
+ If you implement or you will also get this event.
+
+ Object containing information about the error
+
+
+
+ Container type for callbacks defined by IConnectionCallbacks. See LoadBalancingCallbackTargets.
+
+
+ While the interfaces of callbacks wrap up the methods that will be called,
+ the container classes implement a simple way to call a method on all registered objects.
+
+
+
+
+ Container type for callbacks defined by IMatchmakingCallbacks. See MatchMakingCallbackTargets.
+
+
+ While the interfaces of callbacks wrap up the methods that will be called,
+ the container classes implement a simple way to call a method on all registered objects.
+
+
+
+
+ Container type for callbacks defined by IInRoomCallbacks. See InRoomCallbackTargets.
+
+
+ While the interfaces of callbacks wrap up the methods that will be called,
+ the container classes implement a simple way to call a method on all registered objects.
+
+
+
+
+ Container type for callbacks defined by ILobbyCallbacks. See LobbyCallbackTargets.
+
+
+ While the interfaces of callbacks wrap up the methods that will be called,
+ the container classes implement a simple way to call a method on all registered objects.
+
+
+
+
+ Container type for callbacks defined by IWebRpcCallback. See WebRpcCallbackTargets.
+
+
+ While the interfaces of callbacks wrap up the methods that will be called,
+ the container classes implement a simple way to call a method on all registered objects.
+
+
+
+
+ Container type for callbacks defined by . See .
+
+
+ While the interfaces of callbacks wrap up the methods that will be called,
+ the container classes implement a simple way to call a method on all registered objects.
+
+
+
+
+ Class wrapping the received event.
+
+
+ This is passed inside callback.
+ If you implement or you will also get but not parsed.
+
+ In most cases this could be either:
+ 1. an error from webhooks plugin (if HasErrorInfo is enabled), read more here:
+ https://doc.photonengine.com/en-us/realtime/current/gameplay/web-extensions/webhooks#options
+ 2. an error sent from a custom server plugin via PluginHost.BroadcastErrorInfoEvent, see example here:
+ https://doc.photonengine.com/en-us/server/current/plugins/manual#handling_http_response
+ 3. an error sent from the server, for example, when the limit of cached events has been exceeded in the room
+ (all clients will be disconnected and the room will be closed in this case)
+ read more here: https://doc.photonengine.com/en-us/realtime/current/gameplay/cached-events#special_considerations
+
+
+
+
+ String containing information about the error.
+
+
+
+
+ A LoadBalancingPeer provides the operations and enum definitions needed to use the LoadBalancing server application which is also used in Photon Cloud.
+
+
+ This class is internally used.
+ The LoadBalancingPeer does not keep a state, instead this is done by a LoadBalancingClient.
+
+
+
+ Obsolete accessor to the RegionHandler.PingImplementation.
+
+
+
+ Creates a Peer with specified connection protocol. You need to set the Listener before using the peer.
+
+ Each connection protocol has it's own default networking ports for Photon.
+ The preferred option is UDP.
+
+
+
+ Creates a Peer with specified connection protocol and a Listener for callbacks.
+
+
+
+
+ Joins the lobby on the Master Server, where you get a list of RoomInfos of currently open rooms.
+ This is an async request which triggers a OnOperationResponse() call.
+
+ The lobby join to.
+ If the operation could be sent (has to be connected).
+
+
+
+ Leaves the lobby on the Master Server.
+ This is an async request which triggers a OnOperationResponse() call.
+
+ If the operation could be sent (requires connection).
+
+
+ Used by OpJoinRoom and by OpCreateRoom alike.
+
+
+
+ Creates a room (on either Master or Game Server).
+ The OperationResponse depends on the server the peer is connected to:
+ Master will return a Game Server to connect to.
+ Game Server will return the joined Room's data.
+ This is an async request which triggers a OnOperationResponse() call.
+
+
+ If the room is already existing, the OperationResponse will have a returnCode of ErrorCode.GameAlreadyExists.
+
+
+
+
+ Joins a room by name or creates new room if room with given name not exists.
+ The OperationResponse depends on the server the peer is connected to:
+ Master will return a Game Server to connect to.
+ Game Server will return the joined Room's data.
+ This is an async request which triggers a OnOperationResponse() call.
+
+
+ If the room is not existing (anymore), the OperationResponse will have a returnCode of ErrorCode.GameDoesNotExist.
+ Other possible ErrorCodes are: GameClosed, GameFull.
+
+ If the operation could be sent (requires connection).
+
+
+
+ Operation to join a random, available room. Overloads take additional player properties.
+ This is an async request which triggers a OnOperationResponse() call.
+ If all rooms are closed or full, the OperationResponse will have a returnCode of ErrorCode.NoRandomMatchFound.
+ If successful, the OperationResponse contains a gameserver address and the name of some room.
+
+ If the operation could be sent currently (requires connection).
+
+
+
+ Only used on the Master Server. It will assign a game server and room to join-or-create.
+ On the Game Server, the OpJoin is used with option "create if not exists".
+
+
+
+
+ Leaves a room with option to come back later or "for good".
+
+ Async games can be re-joined (loaded) later on. Set to false, if you want to abandon a game entirely.
+ WebFlag: Securely transmit the encrypted object AuthCookie to the web service in PathLeave webhook when available
+ If the opteration can be send currently.
+
+
+ Gets a list of games matching a SQL-like where clause.
+
+ Operation is only available in lobbies of type SqlLobby.
+ This is an async request which triggers a OnOperationResponse() call.
+ Returned game list is stored in RoomInfoList.
+
+
+ The lobby to query. Has to be of type SqlLobby.
+ The sql query statement.
+ If the operation could be sent (has to be connected).
+
+
+
+ Request the rooms and online status for a list of friends (each client must set a unique username via OpAuthenticate).
+
+
+ Used on Master Server to find the rooms played by a selected list of users.
+ Users identify themselves by using OpAuthenticate with a unique user ID.
+ The list of user IDs must be fetched from some other source (not provided by Photon).
+
+ The server response includes 2 arrays of info (each index matching a friend from the request):
+ ParameterCode.FindFriendsResponseOnlineList = bool[] of online states
+ ParameterCode.FindFriendsResponseRoomIdList = string[] of room names (empty string if not in a room)
+
+ The options may be used to define which state a room must match to be returned.
+
+ Array of friend's names (make sure they are unique).
+ Options that affect the result of the FindFriends operation.
+ If the operation could be sent (requires connection).
+
+
+
+ Sets properties of a player / actor.
+ Internally this uses OpSetProperties, which can be used to either set room or player properties.
+
+ The payer ID (a.k.a. actorNumber) of the player to attach these properties to.
+ The properties to add or update.
+ If set, these must be in the current properties-set (on the server) to set actorProperties: CAS.
+ Set these to forward the properties to a WebHook as defined for this app (in Dashboard).
+ If the operation could be sent (requires connection).
+
+
+
+ Sets properties of a room.
+ Internally this uses OpSetProperties, which can be used to either set room or player properties.
+
+ The properties to add or update.
+ The properties expected when update occurs. (CAS : "Check And Swap")
+ WebFlag to indicate if request should be forwarded as "PathProperties" webhook or not.
+ If the operation could be sent (has to be connected).
+
+
+
+ Sends this app's appId and appVersion to identify this application server side.
+ This is an async request which triggers a OnOperationResponse() call.
+
+
+ This operation makes use of encryption, if that is established before.
+ See: EstablishEncryption(). Check encryption with IsEncryptionAvailable.
+ This operation is allowed only once per connection (multiple calls will have ErrorCode != Ok).
+
+ Your application's name or ID to authenticate. This is assigned by Photon Cloud (webpage).
+ The client's version (clients with differing client appVersions are separated and players don't meet).
+ Contains all values relevant for authentication. Even without account system (external Custom Auth), the clients are allowed to identify themselves.
+ Optional region code, if the client should connect to a specific Photon Cloud Region.
+ Set to true on Master Server to receive "Lobby Statistics" events.
+ If the operation could be sent (has to be connected).
+
+
+
+ Sends this app's appId and appVersion to identify this application server side.
+ This is an async request which triggers a OnOperationResponse() call.
+
+
+ This operation makes use of encryption, if that is established before.
+ See: EstablishEncryption(). Check encryption with IsEncryptionAvailable.
+ This operation is allowed only once per connection (multiple calls will have ErrorCode != Ok).
+
+ Your application's name or ID to authenticate. This is assigned by Photon Cloud (webpage).
+ The client's version (clients with differing client appVersions are separated and players don't meet).
+ Optional authentication values. The client can set no values or a UserId or some parameters for Custom Authentication by a server.
+ Optional region code, if the client should connect to a specific Photon Cloud Region.
+
+
+ If the operation could be sent (has to be connected).
+
+
+
+ Operation to handle this client's interest groups (for events in room).
+
+
+ Note the difference between passing null and byte[0]:
+ null won't add/remove any groups.
+ byte[0] will add/remove all (existing) groups.
+ First, removing groups is executed. This way, you could leave all groups and join only the ones provided.
+
+ Changes become active not immediately but when the server executes this operation (approximately RTT/2).
+
+ Groups to remove from interest. Null will not remove any. A byte[0] will remove all.
+ Groups to add to interest. Null will not add any. A byte[0] will add all current.
+ If operation could be enqueued for sending. Sent when calling: Service or SendOutgoingCommands.
+
+
+
+ Send an event with custom code/type and any content to the other players in the same room.
+
+ This override explicitly uses another parameter order to not mix it up with the implementation for Hashtable only.
+ Identifies this type of event (and the content). Your game's event codes can start with 0.
+ Any serializable datatype (including Hashtable like the other OpRaiseEvent overloads).
+ Contains (slightly) less often used options. If you pass null, the default options will be used.
+ Send options for reliable, encryption etc
+ If operation could be enqueued for sending. Sent when calling: Service or SendOutgoingCommands.
+
+
+
+ Internally used operation to set some "per server" settings. This is for the Master Server.
+
+ Set to true, to get Lobby Statistics (lists of existing lobbies).
+ False if the operation could not be sent.
+
+
+ Used in the RoomOptionFlags parameter, this bitmask toggles options in the room.
+
+
+
+ Options for OpFindFriends can be combined to filter which rooms of friends are returned.
+
+
+
+ Include a friend's room only if it is created and confirmed by the game server.
+
+
+ Include a friend's room only if it is visible (using Room.IsVisible).
+
+
+ Include a friend's room only if it is open (using Room.IsOpen).
+
+
+ Turns the bool options into an integer, which is sent as option flags for Op FindFriends.
+ The options applied to bits of an integer.
+
+
+
+ Parameters for the matchmaking of JoinRandomRoom and JoinRandomOrCreateRoom.
+
+
+ More about matchmaking: .
+
+
+
+ The custom room properties a room must have to fit. All key-values must be present to match. In SQL Lobby, use SqlLobbyFilter instead.
+
+
+ Filters by the MaxPlayers value of rooms.
+
+
+ The MatchmakingMode affects how rooms get filled. By default, the server fills rooms.
+
+
+ The lobby in which to match. The type affects how filters are applied.
+
+
+ SQL query to filter room matches. For default-typed lobbies, use ExpectedCustomRoomProperties instead.
+
+
+ The expected users list blocks player slots for your friends or team mates to join the room, too.
+ See: https://doc.photonengine.com/en-us/pun/v2/lobby-and-matchmaking/matchmaking-and-lobby#matchmaking_slot_reservation
+
+
+ Parameters for creating rooms.
+
+
+ The name of the room to create. If null, the server generates a unique name. If not null, it must be unique and new or will cause an error.
+
+
+ The RoomOptions define the optional behaviour of rooms.
+
+
+ A lobby to attach the new room to. If set, this overrides a joined lobby (if any).
+
+
+ The custom player properties that describe this client / user. Keys must be strings.
+
+
+ Internally used value to skip some values when the operation is sent to the Master Server.
+
+
+ Internally used value to check which join mode we should call.
+
+
+ A list of users who are expected to join the room along with this client. Reserves slots for rooms with MaxPlayers value.
+
+
+
+ ErrorCode defines the default codes associated with Photon client/server communication.
+
+
+
+ (0) is always "OK", anything else an error or specific situation.
+
+
+
+ (-3) Operation can't be executed yet (e.g. OpJoin can't be called before being authenticated, RaiseEvent cant be used before getting into a room).
+
+
+ Before you call any operations on the Cloud servers, the automated client workflow must complete its authorization.
+ Wait until State is: JoinedLobby or ConnectedToMasterServer
+
+
+
+ (-2) The operation you called is not implemented on the server (application) you connect to. Make sure you run the fitting applications.
+
+
+ (-2) The operation you called could not be executed on the server.
+
+ Make sure you are connected to the server you expect.
+
+ This code is used in several cases:
+ The arguments/parameters of the operation might be out of range, missing entirely or conflicting.
+ The operation you called is not implemented on the server (application). Server-side plugins affect the available operations.
+
+
+
+ (-1) Something went wrong in the server. Try to reproduce and contact Exit Games.
+
+
+ (32767) Authentication failed. Possible cause: AppId is unknown to Photon (in cloud service).
+
+
+ (32766) GameId (name) already in use (can't create another). Change name.
+
+
+ (32765) Game is full. This rarely happens when some player joined the room before your join completed.
+
+
+ (32764) Game is closed and can't be joined. Join another game.
+
+
+ (32762) All servers are busy. This is a temporary issue and the game logic should try again after a brief wait time.
+
+ This error may happen for all operations that create rooms. The operation response will contain this error code.
+
+ This error is very unlikely to happen as we monitor load on all servers and add them on demand.
+ However, it's good to be prepared for a shortage of machines or surge in CCUs.
+
+
+
+ (32761) Not in use currently.
+
+
+ (32760) Random matchmaking only succeeds if a room exists thats neither closed nor full. Repeat in a few seconds or create a new room.
+
+
+ (32758) Join can fail if the room (name) is not existing (anymore). This can happen when players leave while you join.
+
+
+ (32757) Authorization on the Photon Cloud failed because the concurrent users (CCU) limit of the app's subscription is reached.
+
+ Unless you have a plan with "CCU Burst", clients might fail the authentication step during connect.
+ Affected client are unable to call operations. Please note that players who end a game and return
+ to the master server will disconnect and re-connect, which means that they just played and are rejected
+ in the next minute / re-connect.
+ This is a temporary measure. Once the CCU is below the limit, players will be able to connect an play again.
+
+ OpAuthorize is part of connection workflow but only on the Photon Cloud, this error can happen.
+ Self-hosted Photon servers with a CCU limited license won't let a client connect at all.
+
+
+
+ (32756) Authorization on the Photon Cloud failed because the app's subscription does not allow to use a particular region's server.
+
+ Some subscription plans for the Photon Cloud are region-bound. Servers of other regions can't be used then.
+ Check your master server address and compare it with your Photon Cloud Dashboard's info.
+ https://dashboard.photonengine.com
+
+ OpAuthorize is part of connection workflow but only on the Photon Cloud, this error can happen.
+ Self-hosted Photon servers with a CCU limited license won't let a client connect at all.
+
+
+
+
+ (32755) Custom Authentication of the user failed due to setup reasons (see Cloud Dashboard) or the provided user data (like username or token). Check error message for details.
+
+
+
+ (32753) The Authentication ticket expired. Usually, this is refreshed behind the scenes. Connect (and authorize) again.
+
+
+
+ (32752) A server-side plugin (or webhook) failed to execute and reported an error. Check the OperationResponse.DebugMessage.
+
+
+
+
+ (32751) CreateGame/JoinGame/Join operation fails if expected plugin does not correspond to loaded one.
+
+
+
+
+ (32750) for join requests. Indicates the current peer already called join and is joined to the room.
+
+
+
+
+ (32749) for join requests. Indicates the list of InactiveActors already contains an actor with the requested ActorNr or UserId.
+
+
+
+
+ (32748) for join requests. Indicates the list of Actors (active and inactive) did not contain an actor with the requested ActorNr or UserId.
+
+
+
+
+ (32747) for join requests. Note: for future use - Indicates the requested UserId was found in the ExcludedList.
+
+
+
+
+ (32746) for join requests. Indicates the list of ActiveActors already contains an actor with the requested ActorNr or UserId.
+
+
+
+
+ (32745) for SetProperties and RaiseEvent (if flag HttpForward is true) requests. Indicates the maximum allowed http requests per minute was reached.
+
+
+
+
+ (32744) for WebRpc requests. Indicates the the call to the external service failed.
+
+
+
+
+ (32743) for operations with defined limits (as in calls per second, content count or size).
+
+
+
+
+ (32742) Server error during matchmaking with slot reservation. E.g. the reserved slots can not exceed MaxPlayers.
+
+
+
+
+ (32741) Server will react with this error if invalid encryption parameters provided by token
+
+
+
+
+ Class for constants. These (byte) values define "well known" properties for an Actor / Player.
+
+
+ These constants are used internally.
+ "Custom properties" have to use a string-type as key. They can be assigned at will.
+
+
+
+ (255) Name of a player/actor.
+
+
+ (254) Tells you if the player is currently in this game (getting events live).
+ A server-set value for async games, where players can leave the game and return later.
+
+
+ (253) UserId of the player. Sent when room gets created with RoomOptions.PublishUserId = true.
+
+
+
+ Class for constants. These (byte) values are for "well known" room/game properties used in Photon LoadBalancing.
+
+
+ These constants are used internally.
+ "Custom properties" have to use a string-type as key. They can be assigned at will.
+
+
+
+ (255) Max number of players that "fit" into this room. 0 is for "unlimited".
+
+
+ (254) Makes this room listed or not in the lobby on master.
+
+
+ (253) Allows more players to join a room (or not).
+
+
+ (252) Current count of players in the room. Used only in the lobby on master.
+
+
+ (251) True if the room is to be removed from room listing (used in update to room list in lobby on master)
+
+
+ (250) A list of the room properties to pass to the RoomInfo list in a lobby. This is used in CreateRoom, which defines this list once per room.
+
+
+ (249) Equivalent of Operation Join parameter CleanupCacheOnLeave.
+
+
+ (248) Code for MasterClientId, which is synced by server. When sent as op-parameter this is (byte)203. As room property this is (byte)248.
+ Tightly related to ParameterCode.MasterClientId.
+
+
+ (247) Code for ExpectedUsers in a room. Matchmaking keeps a slot open for the players with these userIDs.
+
+
+ (246) Player Time To Live. How long any player can be inactive (due to disconnect or leave) before the user gets removed from the playerlist (freeing a slot).
+
+
+ (245) Room Time To Live. How long a room stays available (and in server-memory), after the last player becomes inactive. After this time, the room gets persisted or destroyed.
+
+
+
+ Class for constants. These values are for events defined by Photon LoadBalancing.
+
+ They start at 255 and go DOWN. Your own in-game events can start at 0. These constants are used internally.
+
+
+ (230) Initial list of RoomInfos (in lobby on Master)
+
+
+ (229) Update of RoomInfos to be merged into "initial" list (in lobby on Master)
+
+
+ (228) Currently not used. State of queueing in case of server-full
+
+
+ (227) Currently not used. Event for matchmaking
+
+
+ (226) Event with stats about this application (players, rooms, etc)
+
+
+ (224) This event provides a list of lobbies with their player and game counts.
+
+
+ (210) Internally used in case of hosting by Azure
+
+
+ (255) Event Join: someone joined the game. The new actorNumber is provided as well as the properties of that actor (if set in OpJoin).
+
+
+ (254) Event Leave: The player who left the game can be identified by the actorNumber.
+
+
+ (253) When you call OpSetProperties with the broadcast option "on", this event is fired. It contains the properties being set.
+
+
+ (253) When you call OpSetProperties with the broadcast option "on", this event is fired. It contains the properties being set.
+
+
+ (252) When player left game unexpected and the room has a playerTtl != 0, this event is fired to let everyone know about the timeout.
+ Obsolete. Replaced by Leave. public const byte Disconnect = LiteEventCode.Disconnect;
+ (251) Sent by Photon Cloud when a plugin-call or webhook-call failed or events cache limit exceeded. Usually, the execution on the server continues, despite the issue. Contains: ParameterCode.Info.
+
+
+
+ (250) Sent by Photon whent he event cache slice was changed. Done by OpRaiseEvent.
+
+
+ (223) Sent by Photon to update a token before it times out.
+
+
+ Class for constants. Codes for parameters of Operations and Events.
+ These constants are used internally.
+
+
+ (237) A bool parameter for creating games. If set to true, no room events are sent to the clients on join and leave. Default: false (and not sent).
+
+
+ (236) Time To Live (TTL) for a room when the last player leaves. Keeps room in memory for case a player re-joins soon. In milliseconds.
+
+
+ (235) Time To Live (TTL) for an 'actor' in a room. If a client disconnects, this actor is inactive first and removed after this timeout. In milliseconds.
+
+
+ (234) Optional parameter of OpRaiseEvent and OpSetCustomProperties to forward the event/operation to a web-service.
+
+
+ (233) Optional parameter of OpLeave in async games. If false, the player does abandons the game (forever). By default players become inactive and can re-join.
+
+
+ (233) Used in EvLeave to describe if a user is inactive (and might come back) or not. In rooms with PlayerTTL, becoming inactive is the default case.
+
+
+ (232) Used when creating rooms to define if any userid can join the room only once.
+
+
+ (231) Code for "Check And Swap" (CAS) when changing properties.
+
+
+ (230) Address of a (game) server to use.
+
+
+ (229) Count of players in this application in a rooms (used in stats event)
+
+
+ (228) Count of games in this application (used in stats event)
+
+
+ (227) Count of players on the master server (in this app, looking for rooms)
+
+
+ (225) User's ID
+
+
+ (224) Your application's ID: a name on your own Photon or a GUID on the Photon Cloud
+
+
+ (223) Not used currently (as "Position"). If you get queued before connect, this is your position
+
+
+ (223) Modifies the matchmaking algorithm used for OpJoinRandom. Allowed parameter values are defined in enum MatchmakingMode.
+
+
+ (222) List of RoomInfos about open / listed rooms
+
+
+ (221) Internally used to establish encryption
+
+
+ (220) Version of your application
+
+
+ (210) Internally used in case of hosting by Azure
+
+
+ (209) Internally used in case of hosting by Azure
+
+
+ (208) Internally used in case of hosting by Azure
+
+
+ (255) Code for the gameId/roomName (a unique name per room). Used in OpJoin and similar.
+
+
+ (250) Code for broadcast parameter of OpSetProperties method.
+
+
+ (252) Code for list of players in a room.
+
+
+ (254) Code of the Actor of an operation. Used for property get and set.
+
+
+ (249) Code for property set (Hashtable).
+
+
+ (245) Code of data/custom content of an event. Used in OpRaiseEvent.
+
+
+ (245) Code of data of an event. Used in OpRaiseEvent.
+
+
+ (244) Code used when sending some code-related parameter, like OpRaiseEvent's event-code.
+ This is not the same as the Operation's code, which is no longer sent as part of the parameter Dictionary in Photon 3.
+
+
+ (248) Code for property set (Hashtable).
+
+
+
+ (251) Code for property-set (Hashtable). This key is used when sending only one set of properties.
+ If either ActorProperties or GameProperties are used (or both), check those keys.
+
+
+
+ (253) Code of the target Actor of an operation. Used for property set. Is 0 for game
+
+
+ (246) Code to select the receivers of events (used in Lite, Operation RaiseEvent).
+
+
+ (247) Code for caching events while raising them.
+
+
+ (241) Bool parameter of CreateGame Operation. If true, server cleans up roomcache of leaving players (their cached events get removed).
+
+
+ (240) Code for "group" operation-parameter (as used in Op RaiseEvent).
+
+
+ (239) The "Remove" operation-parameter can be used to remove something from a list. E.g. remove groups from player's interest groups.
+
+
+ (239) Used in Op Join to define if UserIds of the players are broadcast in the room. Useful for FindFriends and reserving slots for expected users.
+
+
+ (238) The "Add" operation-parameter can be used to add something to some list or set. E.g. add groups to player's interest groups.
+
+
+ (218) Content for EventCode.ErrorInfo and internal debug operations.
+
+
+ (217) This key's (byte) value defines the target custom authentication type/service the client connects with. Used in OpAuthenticate
+
+
+ (216) This key's (string) value provides parameters sent to the custom authentication type/service the client connects with. Used in OpAuthenticate
+
+
+ (215) The JoinMode enum defines which variant of joining a room will be executed: Join only if available, create if not exists or re-join.
+ Replaces CreateIfNotExists which was only a bool-value.
+
+
+ (214) This key's (string or byte[]) value provides parameters sent to the custom authentication service setup in Photon Dashboard. Used in OpAuthenticate
+
+
+ (203) Code for MasterClientId, which is synced by server. When sent as op-parameter this is code 203.
+ Tightly related to GamePropertyKey.MasterClientId.
+
+
+ (1) Used in Op FindFriends request. Value must be string[] of friends to look up.
+
+
+ (2) Used in Op FindFriends request. An integer containing option-flags to filter the results.
+
+
+ (1) Used in Op FindFriends response. Contains bool[] list of online states (false if not online).
+
+
+ (2) Used in Op FindFriends response. Contains string[] of room names ("" where not known or no room joined).
+
+
+ (213) Used in matchmaking-related methods and when creating a room to name a lobby (to join or to attach a room to).
+
+
+ (212) Used in matchmaking-related methods and when creating a room to define the type of a lobby. Combined with the lobby name this identifies the lobby.
+
+
+ (211) This (optional) parameter can be sent in Op Authenticate to turn on Lobby Stats (info about lobby names and their user- and game-counts).
+
+
+ (210) Used for region values in OpAuth and OpGetRegions.
+
+
+ (209) Path of the WebRPC that got called. Also known as "WebRpc Name". Type: string.
+
+
+ (208) Parameters for a WebRPC as: Dictionary<string, object>. This will get serialized to JSon.
+
+
+ (207) ReturnCode for the WebRPC, as sent by the web service (not by Photon, which uses ErrorCode). Type: byte.
+
+
+ (206) Message returned by WebRPC server. Analog to Photon's debug message. Type: string.
+
+
+ (205) Used to define a "slice" for cached events. Slices can easily be removed from cache. Type: int.
+
+
+ (204) Informs the server of the expected plugin setup.
+
+ The operation will fail in case of a plugin mismatch returning error code PluginMismatch 32751(0x7FFF - 16).
+ Setting string[]{} means the client expects no plugin to be setup.
+ Note: for backwards compatibility null omits any check.
+
+
+
+ (202) Used by the server in Operation Responses, when it sends the nickname of the client (the user's nickname).
+
+
+ (201) Informs user about name of plugin load to game
+
+
+ (200) Informs user about version of plugin load to game
+
+
+ (196) Cluster info provided in OpAuthenticate/OpAuthenticateOnce responses.
+
+
+ (195) Protocol which will be used by client to connect master/game servers. Used for nameserver.
+
+
+ (194) Set of custom parameters which are sent in auth request.
+
+
+ (193) How are we going to encrypt data.
+
+
+ (192) Parameter of Authentication, which contains encryption keys (depends on AuthMode and EncryptionMode).
+
+
+ (191) An int parameter summarizing several boolean room-options with bit-flags.
+
+
+
+ Class for constants. Contains operation codes.
+
+ These constants are used internally.
+
+
+ (255) Code for OpJoin, to get into a room.
+
+
+ (231) Authenticates this peer and connects to a virtual application
+
+
+ (230) Authenticates this peer and connects to a virtual application
+
+
+ (229) Joins lobby (on master)
+
+
+ (228) Leaves lobby (on master)
+
+
+ (227) Creates a game (or fails if name exists)
+
+
+ (226) Join game (by name)
+
+
+ (225) Joins random game (on master)
+
+
+ (254) Code for OpLeave, to get out of a room.
+
+
+ (253) Raise event (in a room, for other actors/players)
+
+
+ (252) Set Properties (of room or actor/player)
+
+
+ (251) Get Properties
+
+
+ (248) Operation code to change interest groups in Rooms (Lite application and extending ones).
+
+
+ (222) Request the rooms and online status for a list of friends (by name, which should be unique).
+
+
+ (221) Request statistics about a specific list of lobbies (their user and game count).
+
+
+ (220) Get list of regional servers from a NameServer.
+
+
+ (219) WebRpc Operation.
+
+
+ (218) Operation to set some server settings. Used with different parameters on various servers.
+
+
+ (217) Get the game list matching a supplied sql filter (SqlListLobby only)
+
+
+ Defines possible values for OpJoinRoom and OpJoinOrCreate. It tells the server if the room can be only be joined normally, created implicitly or found on a web-service for Turnbased games.
+ These values are not directly used by a game but implicitly set.
+
+
+ Regular join. The room must exist.
+
+
+ Join or create the room if it's not existing. Used for OpJoinOrCreate for example.
+
+
+ The room might be out of memory and should be loaded (if possible) from a Turnbased web-service.
+
+
+ Only re-join will be allowed. If the user is not yet in the room, this will fail.
+
+
+
+ Options for matchmaking rules for OpJoinRandom.
+
+
+
+ Fills up rooms (oldest first) to get players together as fast as possible. Default.
+ Makes most sense with MaxPlayers > 0 and games that can only start with more players.
+
+
+ Distributes players across available rooms sequentially but takes filter into account. Without filter, rooms get players evenly distributed.
+
+
+ Joins a (fully) random room. Expected properties must match but aside from this, any available room might be selected.
+
+
+
+ Lite - OpRaiseEvent lets you chose which actors in the room should receive events.
+ By default, events are sent to "Others" but you can overrule this.
+
+
+
+ Default value (not sent). Anyone else gets my event.
+
+
+ Everyone in the current room (including this peer) will get this event.
+
+
+ The server sends this event only to the actor with the lowest actorNumber.
+ The "master client" does not have special rights but is the one who is in this room the longest time.
+
+
+
+ Lite - OpRaiseEvent allows you to cache events and automatically send them to joining players in a room.
+ Events are cached per event code and player: Event 100 (example!) can be stored once per player.
+ Cached events can be modified, replaced and removed.
+
+
+ Caching works only combination with ReceiverGroup options Others and All.
+
+
+
+ Default value (not sent).
+
+
+ Will merge this event's keys with those already cached.
+
+
+ Replaces the event cache for this eventCode with this event's content.
+
+
+ Removes this event (by eventCode) from the cache.
+
+
+ Adds an event to the room's cache
+
+
+ Adds this event to the cache for actor 0 (becoming a "globally owned" event in the cache).
+
+
+ Remove fitting event from the room's cache.
+
+
+ Removes events of players who already left the room (cleaning up).
+
+
+ Increase the index of the sliced cache.
+
+
+ Set the index of the sliced cache. You must set RaiseEventOptions.CacheSliceIndex for this.
+
+
+ Purge cache slice with index. Exactly one slice is removed from cache. You must set RaiseEventOptions.CacheSliceIndex for this.
+
+
+ Purge cache slices with specified index and anything lower than that. You must set RaiseEventOptions.CacheSliceIndex for this.
+
+
+
+ Flags for "types of properties", being used as filter in OpGetProperties.
+
+
+
+ (0x00) Flag type for no property type.
+
+
+ (0x01) Flag type for game-attached properties.
+
+
+ (0x02) Flag type for actor related propeties.
+
+
+ (0x01) Flag type for game AND actor properties. Equal to 'Game'
+
+
+ Wraps up common room properties needed when you create rooms. Read the individual entries for more details.
+ This directly maps to the fields in the Room class.
+
+
+ Defines if this room is listed in the lobby. If not, it also is not joined randomly.
+
+ A room that is not visible will be excluded from the room lists that are sent to the clients in lobbies.
+ An invisible room can be joined by name but is excluded from random matchmaking.
+
+ Use this to "hide" a room and simulate "private rooms". Players can exchange a roomname and create it
+ invisble to avoid anyone else joining it.
+
+
+
+ Defines if this room can be joined at all.
+
+ If a room is closed, no player can join this. As example this makes sense when 3 of 4 possible players
+ start their gameplay early and don't want anyone to join during the game.
+ The room can still be listed in the lobby (set isVisible to control lobby-visibility).
+
+
+
+ Max number of players that can be in the room at any time. 0 means "no limit".
+
+
+ Time To Live (TTL) for an 'actor' in a room. If a client disconnects, this actor is inactive first and removed after this timeout. In milliseconds.
+
+
+ Time To Live (TTL) for a room when the last player leaves. Keeps room in memory for case a player re-joins soon. In milliseconds.
+
+
+ Removes a user's events and properties from the room when a user leaves.
+
+ This makes sense when in rooms where players can't place items in the room and just vanish entirely.
+ When you disable this, the event history can become too long to load if the room stays in use indefinitely.
+ Default: true. Cleans up the cache and props of leaving users.
+
+
+
+ The room's custom properties to set. Use string keys!
+
+ Custom room properties are any key-values you need to define the game's setup.
+ The shorter your keys are, the better.
+ Example: Map, Mode (could be "m" when used with "Map"), TileSet (could be "t").
+
+
+
+ Defines the custom room properties that get listed in the lobby.
+
+ Name the custom room properties that should be available to clients that are in a lobby.
+ Use with care. Unless a custom property is essential for matchmaking or user info, it should
+ not be sent to the lobby, which causes traffic and delays for clients in the lobby.
+
+ Default: No custom properties are sent to the lobby.
+
+
+
+ Informs the server of the expected plugin setup.
+
+ The operation will fail in case of a plugin missmatch returning error code PluginMismatch 32757(0x7FFF - 10).
+ Setting string[]{} means the client expects no plugin to be setup.
+ Note: for backwards compatibility null omits any check.
+
+
+
+
+ Tells the server to skip room events for joining and leaving players.
+
+
+ Using this makes the client unaware of the other players in a room.
+ That can save some traffic if you have some server logic that updates players
+ but it can also limit the client's usability.
+
+
+
+ Disables events join and leave from the server as well as property broadcasts in a room (to minimize traffic)
+
+
+
+ Defines if the UserIds of players get "published" in the room. Useful for FindFriends, if players want to play another game together.
+
+
+ When you set this to true, Photon will publish the UserIds of the players in that room.
+ In that case, you can use PhotonPlayer.userId, to access any player's userID.
+ This is useful for FindFriends and to set "expected users" to reserve slots in a room.
+
+
+
+ Optionally, properties get deleted, when null gets assigned as value. Defaults to off / false.
+
+ When Op SetProperties is setting a key's value to null, the server and clients should remove the key/value from the Custom Properties.
+ By default, the server keeps the keys (and null values) and sends them to joining players.
+
+ Important: Only when SetProperties does a "broadcast", the change (key, value = null) is sent to clients to update accordingly.
+ This applies to Custom Properties for rooms and actors/players.
+
+
+
+ By default, property changes are sent back to the client that's setting them to avoid de-sync when properties are set concurrently.
+
+ This option is enables by default to fix this scenario:
+
+ 1) On server, room property ABC is set to value FOO, which triggers notifications to all the clients telling them that the property changed.
+ 2) While that notification is in flight, a client sets the ABC property to value BAR.
+ 3) Client receives notification from the server and changes it�s local copy of ABC to FOO.
+ 4) Server receives the set operation and changes the official value of ABC to BAR, but never notifies the client that sent the set operation that the value is now BAR.
+
+ Without this option, the client that set the value to BAR never hears from the server that the official copy has been updated to BAR, and thus gets stuck with a value of FOO.
+
+
+
+ Aggregates several less-often used options for operation RaiseEvent. See field descriptions for usage details.
+
+
+ Default options: CachingOption: DoNotCache, InterestGroup: 0, targetActors: null, receivers: Others, sequenceChannel: 0.
+
+
+ Defines if the server should simply send the event, put it in the cache or remove events that are like this one.
+
+ When using option: SliceSetIndex, SlicePurgeIndex or SlicePurgeUpToIndex, set a CacheSliceIndex. All other options except SequenceChannel get ignored.
+
+
+
+ The number of the Interest Group to send this to. 0 goes to all users but to get 1 and up, clients must subscribe to the group first.
+
+
+ A list of Player.ActorNumbers to send this event to. You can implement events that just go to specific users this way.
+
+
+ Sends the event to All, MasterClient or Others (default). Be careful with MasterClient, as the client might disconnect before it got the event and it gets lost.
+
+
+ Events are ordered per "channel". If you have events that are independent of others, they can go into another sequence or channel.
+
+
+ Optional flags to be used in Photon client SDKs with Op RaiseEvent and Op SetProperties.
+ Introduced mainly for webhooks 1.2 to control behavior of forwarded HTTP requests.
+
+
+ Types of lobbies define their behaviour and capabilities. Check each value for details.
+ Values of this enum must be matched by the server.
+
+
+ Standard type and behaviour: While joined to this lobby clients get room-lists and JoinRandomRoom can use a simple filter to match properties (perfectly).
+
+
+ This lobby type lists rooms like Default but JoinRandom has a parameter for SQL-like "where" clauses for filtering. This allows bigger, less, or and and combinations.
+
+
+ This lobby does not send lists of games. It is only used for OpJoinRandomRoom. It keeps rooms available for a while when there are only inactive users left.
+
+
+ Refers to a specific lobby on the server.
+
+ Name and Type combined are the unique identifier for a lobby.
+ The server will create lobbies "on demand", so no registration or setup is required.
+ An empty or null Name always points to the "default lobby" as special case.
+
+
+
+
+ Name of the lobby. Default: null, pointing to the "default lobby".
+
+
+ If Name is null or empty, a TypedLobby will point to the "default lobby". This ignores the Type value and always acts as .
+
+
+
+
+ Type (and behaviour) of the lobby.
+
+
+ An empty or null Name always points to the "default lobby" as special case.
+
+
+
+
+ A reference to the default lobby which is the unique lobby that uses null as name and is of type .
+
+
+ There is only a single lobby with an empty name on the server. It is always of type .
+ On the other hand, this is a shortcut and reusable reference to the default lobby.
+ Do not change Name or Type.
+
+
+
+
+ Returns whether or not this instance points to the "default lobby" ().
+
+
+ This comes up to checking if the Name is null or empty.
+ is not the same thing as the "default lobby" ().
+
+
+
+
+ Creates a TypedLobby instance. Unless Name is changed, this points to the "default lobby" ().
+
+
+
+
+ Sets Name and Type of the new instance. Make sure name is not empty or null, as that always points to the "default lobby" ().
+
+ Some string to identify a lobby.
+ The type of a lobby defines it's capabilities and behaviour.
+
+
+
+ Info for a lobby on the server. Used when is true.
+
+
+
+ Count of players that currently joined this lobby.
+
+
+ Count of rooms currently associated with this lobby.
+
+
+
+ Options for authentication modes. From "classic" auth on each server to AuthOnce (on NameServer).
+
+
+
+
+ Options for optional "Custom Authentication" services used with Photon. Used by OpAuthenticate after connecting to Photon.
+
+
+
+ Use a custom authentication service. Currently the only implemented option.
+
+
+ Authenticates users by their Steam Account. Set Steam's ticket as "ticket" via AddAuthParameter().
+
+
+ Authenticates users by their Facebook Account. Set Facebooks's tocken as "token" via AddAuthParameter().
+
+
+ Authenticates users by their Oculus Account and token. Set Oculus' userid as "userid" and nonce as "nonce" via AddAuthParameter().
+
+
+ Authenticates users by their PSN Account and token on PS4. Set token as "token", env as "env" and userName as "userName" via AddAuthParameter().
+
+
+ Authenticates users by their Xbox Account. Pass the XSTS token via SetAuthPostData().
+
+
+ Authenticates users by their HTC Viveport Account. Set userToken as "userToken" via AddAuthParameter().
+
+
+ Authenticates users by their NSA ID. Set token as "token" and appversion as "appversion" via AddAuthParameter(). The appversion is optional.
+
+
+ Authenticates users by their PSN Account and token on PS5. Set token as "token", env as "env" and userName as "userName" via AddAuthParameter().
+
+
+ Authenticates users with Epic Online Services (EOS). Set token as "token" and ownershipToken as "ownershipToken" via AddAuthParameter(). The ownershipToken is optional.
+
+
+ Authenticates users with Facebook Gaming api. Set token as "token" via AddAuthParameter().
+
+
+ Disables custom authentication. Same as not providing any AuthenticationValues for connect (more precisely for: OpAuthenticate).
+
+
+
+ Container for user authentication in Photon. Set AuthValues before you connect - all else is handled.
+
+
+ On Photon, user authentication is optional but can be useful in many cases.
+ If you want to FindFriends, a unique ID per user is very practical.
+
+ There are basically three options for user authentication: None at all, the client sets some UserId
+ or you can use some account web-service to authenticate a user (and set the UserId server-side).
+
+ Custom Authentication lets you verify end-users by some kind of login or token. It sends those
+ values to Photon which will verify them before granting access or disconnecting the client.
+
+ The AuthValues are sent in OpAuthenticate when you connect, so they must be set before you connect.
+ If the AuthValues.UserId is null or empty when it's sent to the server, then the Photon Server assigns a UserId!
+
+ The Photon Cloud Dashboard will let you enable this feature and set important server values for it.
+ https://dashboard.photonengine.com
+
+
+
+ See AuthType.
+
+
+ The type of authentication provider that should be used. Defaults to None (no auth whatsoever).
+ Several auth providers are available and CustomAuthenticationType.Custom can be used if you build your own service.
+
+
+ This string must contain any (http get) parameters expected by the used authentication service. By default, username and token.
+
+ Maps to operation parameter 216.
+ Standard http get parameters are used here and passed on to the service that's defined in the server (Photon Cloud Dashboard).
+
+
+
+ Data to be passed-on to the auth service via POST. Default: null (not sent). Either string or byte[] (see setters).
+ Maps to operation parameter 214.
+
+
+ Internal Photon token. After initial authentication, Photon provides a token for this client, subsequently used as (cached) validation.
+ Any token for custom authentication should be set via SetAuthPostData or AddAuthParameter.
+
+
+ The UserId should be a unique identifier per user. This is for finding friends, etc..
+ See remarks of AuthValues for info about how this is set and used.
+
+
+ Creates empty auth values without any info.
+
+
+ Creates minimal info about the user. If this is authenticated or not, depends on the set AuthType.
+ Some UserId to set in Photon.
+
+
+ Sets the data to be passed-on to the auth service via POST.
+ AuthPostData is just one value. Each SetAuthPostData replaces any previous value. It can be either a string, a byte[] or a dictionary.
+ String data to be used in the body of the POST request. Null or empty string will set AuthPostData to null.
+
+
+ Sets the data to be passed-on to the auth service via POST.
+ AuthPostData is just one value. Each SetAuthPostData replaces any previous value. It can be either a string, a byte[] or a dictionary.
+ Binary token / auth-data to pass on.
+
+
+ Sets data to be passed-on to the auth service as Json (Content-Type: "application/json") via Post.
+ AuthPostData is just one value. Each SetAuthPostData replaces any previous value. It can be either a string, a byte[] or a dictionary.
+ A authentication-data dictionary will be converted to Json and passed to the Auth webservice via HTTP Post.
+
+
+ Adds a key-value pair to the get-parameters used for Custom Auth (AuthGetParameters).
+ This method does uri-encoding for you.
+ Key for the value to set.
+ Some value relevant for Custom Authentication.
+
+
+
+ Transform this object into string.
+
+ String info about this object's values.
+
+
+
+ Make a copy of the current object.
+
+ The object to be copied into.
+ The copied object.
+
+
+
+ Abstract implementation of PhotonPing, ase for pinging servers to find the "Best Region".
+
+
+
+ Uses C# Socket class from System.Net.Sockets (as Unity usually does).
+ Incompatible with Windows 8 Store/Phone API.
+
+
+
+ Sends a "Photon Ping" to a server.
+
+ Address in IPv4 or IPv6 format. An address containing a '.' will be interpreted as IPv4.
+ True if the Photon Ping could be sent.
+
+
+
+ Summarizes a "player" within a room, identified (in that room) by ID (or "actorNumber").
+
+
+ Each player has a actorNumber, valid for that room. It's -1 until assigned by server (and client logic).
+
+
+
+
+ Used internally to identify the masterclient of a room.
+
+
+
+ Backing field for property.
+
+
+ Identifier of this player in current room. Also known as: actorNumber or actorNumber. It's -1 outside of rooms.
+ The ID is assigned per room and only valid in that context. It will change even on leave and re-join. IDs are never re-used per room.
+
+
+ Only one player is controlled by each client. Others are not local.
+
+
+ Background field for nickName.
+
+
+ Non-unique nickname of this player. Synced automatically in a room.
+
+ A player might change his own playername in a room (it's only a property).
+ Setting this value updates the server and other players (using an operation).
+
+
+
+ UserId of the player, available when the room got created with RoomOptions.PublishUserId = true.
+ Useful for and blocking slots in a room for expected players (e.g. in ).
+
+
+
+ True if this player is the Master Client of the current room.
+
+
+
+ If this player is active in the room (and getting events which are currently being sent).
+
+ Inactive players keep their spot in a room but otherwise behave as if offline (no matter what their actual connection status is).
+ The room needs a PlayerTTL != 0. If a player is inactive for longer than PlayerTTL, the server will remove this player from the room.
+ For a client "rejoining" a room, is the same as joining it: It gets properties, cached events and then the live events.
+
+
+
+ Read-only cache for custom properties of player. Set via Player.SetCustomProperties.
+
+ Don't modify the content of this Hashtable. Use SetCustomProperties and the
+ properties of this class to modify values. When you use those, the client will
+ sync values with the server.
+
+
+
+
+ Can be used to store a reference that's useful to know "by player".
+ Example: Set a player's character as Tag by assigning the GameObject on Instantiate.
+
+
+
+ Creates a player instance.
+ To extend and replace this Player, override LoadBalancingPeer.CreatePlayer().
+
+ NickName of the player (a "well known property").
+ ID or ActorNumber of this player in the current room (a shortcut to identify each player in room)
+ If this is the local peer's player (or a remote one).
+
+
+
+ Creates a player instance.
+ To extend and replace this Player, override LoadBalancingPeer.CreatePlayer().
+
+ NickName of the player (a "well known property").
+ ID or ActorNumber of this player in the current room (a shortcut to identify each player in room)
+ If this is the local peer's player (or a remote one).
+ A Hashtable of custom properties to be synced. Must use String-typed keys and serializable datatypes as values.
+
+
+
+ Get a Player by ActorNumber (Player.ID).
+
+ ActorNumber of the a player in this room.
+ Player or null.
+
+
+ Gets this Player's next Player, as sorted by ActorNumber (Player.ID). Wraps around.
+ Player or null.
+
+
+ Gets a Player's next Player, as sorted by ActorNumber (Player.ID). Wraps around.
+ Useful when you pass something to the next player. For example: passing the turn to the next player.
+ The Player for which the next is being needed.
+ Player or null.
+
+
+ Gets a Player's next Player, as sorted by ActorNumber (Player.ID). Wraps around.
+ Useful when you pass something to the next player. For example: passing the turn to the next player.
+ The ActorNumber (Player.ID) for which the next is being needed.
+ Player or null.
+
+
+ Caches properties for new Players or when updates of remote players are received. Use SetCustomProperties() for a synced update.
+
+ This only updates the CustomProperties and doesn't send them to the server.
+ Mostly used when creating new remote players, where the server sends their properties.
+
+
+
+
+ Brief summary string of the Player: ActorNumber and NickName
+
+
+
+
+ String summary of the Player: player.ID, name and all custom properties of this user.
+
+
+ Use with care and not every frame!
+ Converts the customProperties to a String on every single call.
+
+
+
+
+ If players are equal (by GetHasCode, which returns this.ID).
+
+
+
+
+ Accompanies Equals, using the ID (actorNumber) as HashCode to return.
+
+
+
+
+ Used internally, to update this client's playerID when assigned (doesn't change after assignment).
+
+
+
+
+ Updates and synchronizes this Player's Custom Properties. Optionally, expectedProperties can be provided as condition.
+
+
+ Custom Properties are a set of string keys and arbitrary values which is synchronized
+ for the players in a Room. They are available when the client enters the room, as
+ they are in the response of OpJoin and OpCreate.
+
+ Custom Properties either relate to the (current) Room or a Player (in that Room).
+
+ Both classes locally cache the current key/values and make them available as
+ property: CustomProperties. This is provided only to read them.
+ You must use the method SetCustomProperties to set/modify them.
+
+ Any client can set any Custom Properties anytime (when in a room).
+ It's up to the game logic to organize how they are best used.
+
+ You should call SetCustomProperties only with key/values that are new or changed. This reduces
+ traffic and performance.
+
+ Unless you define some expectedProperties, setting key/values is always permitted.
+ In this case, the property-setting client will not receive the new values from the server but
+ instead update its local cache in SetCustomProperties.
+
+ If you define expectedProperties, the server will skip updates if the server property-cache
+ does not contain all expectedProperties with the same values.
+ In this case, the property-setting client will get an update from the server and update it's
+ cached key/values at about the same time as everyone else.
+
+ The benefit of using expectedProperties can be only one client successfully sets a key from
+ one known value to another.
+ As example: Store who owns an item in a Custom Property "ownedBy". It's 0 initally.
+ When multiple players reach the item, they all attempt to change "ownedBy" from 0 to their
+ actorNumber. If you use expectedProperties {"ownedBy", 0} as condition, the first player to
+ take the item will have it (and the others fail to set the ownership).
+
+ Properties get saved with the game state for Turnbased games (which use IsPersistent = true).
+
+ Hashtable of Custom Properties to be set.
+ If non-null, these are the property-values the server will check as condition for this update.
+ Defines if this SetCustomProperties-operation gets forwarded to your WebHooks. Client must be in room.
+
+ False if propertiesToSet is null or empty or have zero string keys.
+ True in offline mode even if expectedProperties or webFlags are used.
+ If not in a room, returns true if local player and expectedValues and webFlags are null.
+ (Use this to cache properties to be sent when joining a room).
+ Otherwise, returns if this operation could be sent to the server.
+
+
+
+ Uses OpSetPropertiesOfActor to sync this player's NickName (server is being updated with this.NickName).
+
+
+ Unlike the CloudRegionCode, this may contain cluster information.
+
+
+
+ Provides methods to work with Photon's regions (Photon Cloud) and can be use to find the one with best ping.
+
+
+ When a client uses a Name Server to fetch the list of available regions, the LoadBalancingClient will create a RegionHandler
+ and provide it via the OnRegionListReceived callback, as soon as the list is available. No pings were sent for Best Region selection yet.
+
+ Your logic can decide to either connect to one of those regional servers, or it may use PingMinimumOfRegions to test
+ which region provides the best ping. Alternatively the client may be set to connect to the Best Region (lowest ping), one or
+ more regions get pinged.
+ Not all regions will be pinged. As soon as the results are final, the client will connect to the best region,
+ so you can check the ping results when connected to the Master Server.
+
+ It makes sense to make clients "sticky" to a region when one gets selected.
+ This can be achieved by storing the SummaryToCache value, once pinging was done.
+ When the client connects again, the previous SummaryToCache helps limiting the number of regions to ping.
+ In best case, only the previously selected region gets re-pinged and if the current ping is not much worse, this one region is used again.
+
+
+
+ The implementation of PhotonPing to use for region pinging (Best Region detection).
+ Defaults to null, which means the Type is set automatically.
+
+
+ A list of region names for the Photon Cloud. Set by the result of OpGetRegions().
+
+ Implement ILoadBalancingCallbacks and register for the callbacks to get OnRegionListReceived(RegionHandler regionHandler).
+ You can also put a "case OperationCode.GetRegions:" into your OnOperationResponse method to notice when the result is available.
+
+
+
+
+ When PingMinimumOfRegions was called and completed, the BestRegion is identified by best ping.
+
+
+
+
+ This value summarizes the results of pinging currently available regions (after PingMinimumOfRegions finished).
+
+
+ This value should be stored in the client by the game logic.
+ When connecting again, use it as previous summary to speed up pinging regions and to make the best region sticky for the client.
+
+
+
+ Selects the best fitting ping implementation or uses the one set in RegionHandler.PingImplementation.
+ PhotonPing instance to use.
+
+
+
+ Starts the ping routine for the assigned region.
+
+
+ Pinging runs in a ThreadPool worker item or (if needed) in a Thread.
+ WebGL runs pinging on the Main Thread as coroutine.
+
+ Always true.
+
+
+
+ Affected by frame-rate of app, as this Coroutine checks the socket for a result once per frame.
+
+
+
+
+ Attempts to resolve a hostname into an IP string or returns empty string if that fails.
+
+
+ To be compatible with most platforms, the address family is checked like this:
+ if (ipAddress.AddressFamily.ToString().Contains("6")) // ipv6...
+
+ Hostname to resolve.
+ IP string or empty string if resolution fails
+
+
+
+ This class represents a room a client joins/joined.
+
+
+ Contains a list of current players, their properties and those of this room, too.
+ A room instance has a number of "well known" properties like IsOpen, MaxPlayers which can be changed.
+ Your own, custom properties can be set via SetCustomProperties() while being in the room.
+
+ Typically, this class should be extended by a game-specific implementation with logic and extra features.
+
+
+
+
+ A reference to the LoadBalancingClient which is currently keeping the connection and state.
+
+
+
+ The name of a room. Unique identifier (per region and virtual appid) for a room/match.
+ The name can't be changed once it's set by the server.
+
+
+
+ Defines if the room can be joined.
+
+
+ This does not affect listing in a lobby but joining the room will fail if not open.
+ If not open, the room is excluded from random matchmaking.
+ Due to racing conditions, found matches might become closed while users are trying to join.
+ Simply re-connect to master and find another.
+ Use property "IsVisible" to not list the room.
+
+ As part of RoomInfo this can't be set.
+ As part of a Room (which the player joined), the setter will update the server and all clients.
+
+
+
+
+ Defines if the room is listed in its lobby.
+
+
+ Rooms can be created invisible, or changed to invisible.
+ To change if a room can be joined, use property: open.
+
+ As part of RoomInfo this can't be set.
+ As part of a Room (which the player joined), the setter will update the server and all clients.
+
+
+
+
+ Sets a limit of players to this room. This property is synced and shown in lobby, too.
+ If the room is full (players count == maxplayers), joining this room will fail.
+
+
+ As part of RoomInfo this can't be set.
+ As part of a Room (which the player joined), the setter will update the server and all clients.
+
+
+
+ The count of players in this Room (using this.Players.Count).
+
+
+ While inside a Room, this is the list of players who are also in that room.
+
+
+ While inside a Room, this is the list of players who are also in that room.
+
+
+
+ List of users who are expected to join this room. In matchmaking, Photon blocks a slot for each of these UserIDs out of the MaxPlayers.
+
+
+ The corresponding feature in Photon is called "Slot Reservation" and can be found in the doc pages.
+ Define expected players in the methods: , and .
+
+
+
+ Player Time To Live. How long any player can be inactive (due to disconnect or leave) before the user gets removed from the playerlist (freeing a slot).
+
+
+ Room Time To Live. How long a room stays available (and in server-memory), after the last player becomes inactive. After this time, the room gets persisted or destroyed.
+
+
+
+ The ID (actorNumber, actorNumber) of the player who's the master of this Room.
+ Note: This changes when the current master leaves the room.
+
+
+
+
+ Gets a list of custom properties that are in the RoomInfo of the Lobby.
+ This list is defined when creating the room and can't be changed afterwards. Compare: LoadBalancingClient.OpCreateRoom()
+
+ You could name properties that are not set from the beginning. Those will be synced with the lobby when added later on.
+
+
+
+ Gets if this room cleans up the event cache when a player (actor) leaves.
+
+
+ This affects which events joining players get.
+
+ Set in room creation via RoomOptions.CleanupCacheOnLeave.
+
+ Within PUN, auto cleanup of events means that cached RPCs and instantiated networked objects are deleted from the room.
+
+
+
+ Define if the client who calls SetProperties should receive the properties update event or not.
+
+
+ Define if Join and Leave events should not be sent to clients in the room.
+
+
+ Extends SuppressRoomEvents: Define if Join and Leave events but also the actors' list and their respective properties should not be sent to clients.
+
+
+ Define if UserIds of the players are broadcast in the room. Useful for FindFriends and reserving slots for expected users.
+
+
+ Define if actor or room properties with null values are removed on the server or kept.
+
+
+ Creates a Room (representation) with given name and properties and the "listing options" as provided by parameters.
+ Name of the room (can be null until it's actually created on server).
+ Room options.
+
+
+ Read (received) room option flags into related bool parameters.
+ This is for internal use. The operation response for join and create room operations is read this way.
+
+
+
+
+ Updates and synchronizes this Room's Custom Properties. Optionally, expectedProperties can be provided as condition.
+
+
+ Custom Properties are a set of string keys and arbitrary values which is synchronized
+ for the players in a Room. They are available when the client enters the room, as
+ they are in the response of OpJoin and OpCreate.
+
+ Custom Properties either relate to the (current) Room or a Player (in that Room).
+
+ Both classes locally cache the current key/values and make them available as
+ property: CustomProperties. This is provided only to read them.
+ You must use the method SetCustomProperties to set/modify them.
+
+ Any client can set any Custom Properties anytime (when in a room).
+ It's up to the game logic to organize how they are best used.
+
+ You should call SetCustomProperties only with key/values that are new or changed. This reduces
+ traffic and performance.
+
+ Unless you define some expectedProperties, setting key/values is always permitted.
+ In this case, the property-setting client will not receive the new values from the server but
+ instead update its local cache in SetCustomProperties.
+
+ If you define expectedProperties, the server will skip updates if the server property-cache
+ does not contain all expectedProperties with the same values.
+ In this case, the property-setting client will get an update from the server and update it's
+ cached key/values at about the same time as everyone else.
+
+ The benefit of using expectedProperties can be only one client successfully sets a key from
+ one known value to another.
+ As example: Store who owns an item in a Custom Property "ownedBy". It's 0 initally.
+ When multiple players reach the item, they all attempt to change "ownedBy" from 0 to their
+ actorNumber. If you use expectedProperties {"ownedBy", 0} as condition, the first player to
+ take the item will have it (and the others fail to set the ownership).
+
+ Properties get saved with the game state for Turnbased games (which use IsPersistent = true).
+
+ Hashtable of Custom Properties that changes.
+ Provide some keys/values to use as condition for setting the new values. Client must be in room.
+ Defines if this SetCustomProperties-operation gets forwarded to your WebHooks. Client must be in room.
+
+ False if propertiesToSet is null or empty or have zero string keys.
+ True in offline mode even if expectedProperties or webFlags are used.
+ Otherwise, returns if this operation could be sent to the server.
+
+
+
+
+ Enables you to define the properties available in the lobby if not all properties are needed to pick a room.
+
+
+ Limit the amount of properties sent to users in the lobby to improve speed and stability.
+
+ An array of custom room property names to forward to the lobby.
+ If the operation could be sent to the server.
+
+
+
+ Removes a player from this room's Players Dictionary.
+ This is internally used by the LoadBalancing API. There is usually no need to remove players yourself.
+ This is not a way to "kick" players.
+
+
+
+
+ Removes a player from this room's Players Dictionary.
+
+
+
+
+ Asks the server to assign another player as Master Client of your current room.
+
+
+ RaiseEvent has the option to send messages only to the Master Client of a room.
+ SetMasterClient affects which client gets those messages.
+
+ This method calls an operation on the server to set a new Master Client, which takes a roundtrip.
+ In case of success, this client and the others get the new Master Client from the server.
+
+ SetMasterClient tells the server which current Master Client should be replaced with the new one.
+ It will fail, if anything switches the Master Client moments earlier. There is no callback for this
+ error. All clients should get the new Master Client assigned by the server anyways.
+
+ See also: MasterClientId
+
+ The player to become the next Master Client.
+ False when this operation couldn't be done currently. Requires a v4 Photon Server.
+
+
+
+ Checks if the player is in the room's list already and calls StorePlayer() if not.
+
+ The new player - identified by ID.
+ False if the player could not be added (cause it was in the list already).
+
+
+
+ Updates a player reference in the Players dictionary (no matter if it existed before or not).
+
+ The Player instance to insert into the room.
+
+
+
+ Tries to find the player with given actorNumber (a.k.a. ID).
+ Only useful when in a Room, as IDs are only valid per Room.
+
+ ID to look for.
+ If true, the Master Client is returned for ID == 0.
+ The player with the ID or null.
+
+
+
+ Attempts to remove all current expected users from the server's Slot Reservation list.
+
+
+ Note that this operation can conflict with new/other users joining. They might be
+ adding users to the list of expected users before or after this client called ClearExpectedUsers.
+
+ This room's expectedUsers value will update, when the server sends a successful update.
+
+ Internals: This methods wraps up setting the ExpectedUsers property of a room.
+
+ If the operation could be sent to the server.
+
+
+
+ Attempts to update the expected users from the server's Slot Reservation list.
+
+
+ Note that this operation can conflict with new/other users joining. They might be
+ adding users to the list of expected users before or after this client called SetExpectedUsers.
+
+ This room's expectedUsers value will update, when the server sends a successful update.
+
+ Internals: This methods wraps up setting the ExpectedUsers property of a room.
+
+ The new array of UserIDs to be reserved in the room.
+ If the operation could be sent to the server.
+
+
+ Returns a summary of this Room instance as string.
+ Summary of this Room instance.
+
+
+ Returns a summary of this Room instance as longer string, including Custom Properties.
+ Summary of this Room instance.
+
+
+
+ A simplified room with just the info required to list and join, used for the room listing in the lobby.
+ The properties are not settable (IsOpen, MaxPlayers, etc).
+
+
+ This class resembles info about available rooms, as sent by the Master server's lobby.
+ Consider all values as readonly. None are synced (only updated by events by server).
+
+
+
+ Used in lobby, to mark rooms that are no longer listed (for being full, closed or hidden).
+
+
+ Backing field for property.
+
+
+ Backing field for property.
+
+
+ Backing field for property.
+
+
+ Backing field for property.
+
+
+ Backing field for property.
+
+
+ Backing field for property.
+
+
+ Backing field for property.
+
+
+ Backing field for property. False unless the GameProperty is set to true (else it's not sent).
+
+
+ Backing field for property.
+
+
+ Backing field for master client id (actorNumber). defined by server in room props and ev leave.
+
+
+ Backing field for property.
+
+
+ Read-only "cache" of custom properties of a room. Set via Room.SetCustomProperties (not available for RoomInfo class!).
+ All keys are string-typed and the values depend on the game/application.
+
+
+
+ The name of a room. Unique identifier for a room/match (per AppId + game-Version).
+
+
+
+ Count of players currently in room. This property is overwritten by the Room class (used when you're in a Room).
+
+
+
+
+ The limit of players for this room. This property is shown in lobby, too.
+ If the room is full (players count == maxplayers), joining this room will fail.
+
+
+ As part of RoomInfo this can't be set.
+ As part of a Room (which the player joined), the setter will update the server and all clients.
+
+
+
+
+ Defines if the room can be joined.
+ This does not affect listing in a lobby but joining the room will fail if not open.
+ If not open, the room is excluded from random matchmaking.
+ Due to racing conditions, found matches might become closed even while you join them.
+ Simply re-connect to master and find another.
+ Use property "IsVisible" to not list the room.
+
+
+ As part of RoomInfo this can't be set.
+ As part of a Room (which the player joined), the setter will update the server and all clients.
+
+
+
+
+ Defines if the room is listed in its lobby.
+ Rooms can be created invisible, or changed to invisible.
+ To change if a room can be joined, use property: open.
+
+
+ As part of RoomInfo this can't be set.
+ As part of a Room (which the player joined), the setter will update the server and all clients.
+
+
+
+
+ Constructs a RoomInfo to be used in room listings in lobby.
+
+ Name of the room and unique ID at the same time.
+ Properties for this room.
+
+
+
+ Makes RoomInfo comparable (by name).
+
+
+
+
+ Accompanies Equals, using the name's HashCode as return.
+
+
+
+
+ Returns most interesting room values as string.
+ Summary of this RoomInfo instance.
+
+
+ Returns most interesting room values as string, including custom properties.
+ Summary of this RoomInfo instance.
+
+
+ Copies "well known" properties to fields (IsVisible, etc) and caches the custom properties (string-keys only) in a local hashtable.
+ New or updated properties to store in this RoomInfo.
+
+
+
+ Helper class to debug log basic information about Photon client and vital traffic statistics.
+
+
+ Set SupportLogger.Client for this to work.
+
+
+
+
+ Toggle to enable or disable traffic statistics logging.
+
+
+
+ helps skip the initial OnApplicationPause call, which is not really of interest on start
+
+
+
+ Photon client to log information and statistics from.
+
+
+
+
+ Debug logs vital traffic statistics about the attached Photon Client.
+
+
+
+
+ Debug logs basic information (AppId, AppVersion, PeerID, Server address, Region) about the attached Photon Client.
+
+
+
+ Reads an operation response of a WebRpc and provides convenient access to most common values.
+
+ See LoadBalancingClient.OpWebRpc.
+ Create a WebRpcResponse to access common result values.
+ The operationResponse.OperationCode should be: OperationCode.WebRpc.
+
+
+
+ Name of the WebRpc that was called.
+
+
+ ResultCode of the WebService that answered the WebRpc.
+
+ 0 is: "OK" for WebRPCs.
+ -1 is: No ResultCode by WebRpc service (check ).
+ Other ResultCode are defined by the individual WebRpc and service.
+
+
+
+ Might be empty or null.
+
+
+ Other key/values returned by the webservice that answered the WebRpc.
+
+
+ An OperationResponse for a WebRpc is needed to read it's values.
+
+
+ Turns the response into an easier to read string.
+ String resembling the result.
+
+
+
+ Optional flags to be used in Photon client SDKs with Op RaiseEvent and Op SetProperties.
+ Introduced mainly for webhooks 1.2 to control behavior of forwarded HTTP requests.
+
+
+
+
+ Indicates whether to forward HTTP request to web service or not.
+
+
+
+
+ Indicates whether to send AuthCookie of actor in the HTTP request to web service or not.
+
+
+
+
+ Indicates whether to send HTTP request synchronously or asynchronously to web service.
+
+
+
+
+ Indicates whether to send serialized game state in HTTP request to web service or not.
+
+
+
+
+ Collection of connection-relevant settings, used internally by PhotonNetwork.ConnectUsingSettings.
+
+
+ Includes the AppSettings class from the Realtime APIs plus some other, PUN-relevant, settings.
+
+
+
+ The photon settings class, which is wrapped by this ScriptableObject.
+
+
+
+ Serialized server settings, written by the Setup Wizard for use in ConnectUsingSettings.
+
+
+
+ Holds a Custom Session Property value
+
+
+
+
+ Internal stored value
+
+
+
+
+ Get the Type of the internal stored value
+
+
+
+
+ Signal if this Session Property is a int value
+
+
+
+
+ Signal if this Session Property is a string value
+
+
+
+
+ Convert a into int
+
+
+
+
+ Convert a int into a
+
+
+
+
+ Convert a into string
+
+
+
+
+ Convert a string into a
+
+
+
+
+ Signal if a particular object is supported as a
+
+ Object ref to check
+ True if obj is of a supported type, false otherwise
+
+
+
+ Convert a particular object into a .
+ If the object type is not supported, null will be returned.
+
+ Object reference to be converted
+ Instance of a if type is supported, null otherwise
+
+
+
diff --git a/Assets/Photon/Fusion/Assemblies/Fusion.Realtime.xml.meta b/Assets/Photon/Fusion/Assemblies/Fusion.Realtime.xml.meta
new file mode 100644
index 0000000..f713fad
--- /dev/null
+++ b/Assets/Photon/Fusion/Assemblies/Fusion.Realtime.xml.meta
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: 346cdb2392b5bce4b8b2756ef4e32cdb
+TextScriptImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Photon/Fusion/Assemblies/Fusion.Runtime.dll b/Assets/Photon/Fusion/Assemblies/Fusion.Runtime.dll
new file mode 100644
index 0000000..5497588
Binary files /dev/null and b/Assets/Photon/Fusion/Assemblies/Fusion.Runtime.dll differ
diff --git a/Assets/Photon/Fusion/Assemblies/Fusion.Runtime.dll.debug b/Assets/Photon/Fusion/Assemblies/Fusion.Runtime.dll.debug
new file mode 100644
index 0000000..80fe19c
Binary files /dev/null and b/Assets/Photon/Fusion/Assemblies/Fusion.Runtime.dll.debug differ
diff --git a/Assets/Photon/Fusion/Assemblies/Fusion.Runtime.dll.debug.meta b/Assets/Photon/Fusion/Assemblies/Fusion.Runtime.dll.debug.meta
new file mode 100644
index 0000000..a813ca5
--- /dev/null
+++ b/Assets/Photon/Fusion/Assemblies/Fusion.Runtime.dll.debug.meta
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: fb8184b1b08ca0f408b87eb72e85e2bd
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Photon/Fusion/Assemblies/Fusion.Runtime.dll.meta b/Assets/Photon/Fusion/Assemblies/Fusion.Runtime.dll.meta
new file mode 100644
index 0000000..998983a
--- /dev/null
+++ b/Assets/Photon/Fusion/Assemblies/Fusion.Runtime.dll.meta
@@ -0,0 +1,34 @@
+fileFormatVersion: 2
+guid: e725a070cec140c4caffb81624c8c787
+PluginImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ iconMap: {}
+ executionOrder:
+ Fusion.NetworkObject: 500
+ defineConstraints: []
+ isPreloaded: 0
+ isOverridable: 0
+ isExplicitlyReferenced: 0
+ validateReferences: 1
+ platformData:
+ - first:
+ Any:
+ second:
+ enabled: 1
+ settings: {}
+ - first:
+ Editor: Editor
+ second:
+ enabled: 0
+ settings:
+ DefaultValueInitialized: true
+ - first:
+ Windows Store Apps: WindowsStoreApps
+ second:
+ enabled: 0
+ settings:
+ CPU: AnyCPU
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Photon/Fusion/Assemblies/Fusion.Runtime.pdb.debug b/Assets/Photon/Fusion/Assemblies/Fusion.Runtime.pdb.debug
new file mode 100644
index 0000000..c0deb8c
Binary files /dev/null and b/Assets/Photon/Fusion/Assemblies/Fusion.Runtime.pdb.debug differ
diff --git a/Assets/Photon/Fusion/Assemblies/Fusion.Runtime.pdb.debug.meta b/Assets/Photon/Fusion/Assemblies/Fusion.Runtime.pdb.debug.meta
new file mode 100644
index 0000000..bdb869d
--- /dev/null
+++ b/Assets/Photon/Fusion/Assemblies/Fusion.Runtime.pdb.debug.meta
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: 7135dc2f84a2d814eb8ed3c3e41b0772
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Photon/Fusion/Assemblies/Fusion.Runtime.xml b/Assets/Photon/Fusion/Assemblies/Fusion.Runtime.xml
new file mode 100644
index 0000000..94b42bf
--- /dev/null
+++ b/Assets/Photon/Fusion/Assemblies/Fusion.Runtime.xml
@@ -0,0 +1,8335 @@
+
+
+
+ Fusion.Runtime
+
+
+
+
+ Page Bit Shift Lookup Table
+
+
+
+
+ Additional companion attribute to NetworkedAttribute, which indicates how floats should be compressed.
+
+
+
+
+ Constructor new accuracy.
+
+
+
+
+ Constructor new accuracy.
+
+
+
+
+ Constructor that takes a named constant.
+ Accuracy for this property will be acquired from the settings.
+
+
+
+
+
+ Allows for a specific slider range on Accuracy types to be displayed. Without this Accuracy values use a default slider range.
+
+
+
+
+ Allows for a specific slider range on Accuracy types to be displayed. Without this Accuracy values use a default slider range.
+
+
+
+
+
+ Attribute for use on Fusion.Behaviour classes.
+ Automatically runs this method when the inspector refreshes. GUILayout calls be in the method and will render into the inspector.
+ Allows for editor code to be added to a component, without requiring a custom Editor script.
+
+
+
+
+ Conditions flags for when this action should run.
+
+
+
+
+ Run this action when playing.
+
+
+
+
+ Run this action when not playing.
+
+
+
+
+ Always run this action, regardless of play mode.
+
+
+
+
+ Tells the editor to dirty the class instance after executing a button action.
+
+
+
+
+ Specific flags for when this element should be displayed.
+
+
+
+
+ Define a BehaviourAction.
+
+ The name of the method to execute. If excluded, this will be the method this attribute is on.
+ The name of the member (in the same class) to evaluate, to determine if the action should be performed.
+ Typically null, as the action method can have its own logic.
+ Specific conditions for when the action should occur.
+
+
+
+ Define a BehaviourAction, with the action being the method this attribute is attached to.
+
+ The name of the member (in the same class) to evaluate, to determine if the action should be performed.
+ Typically null, as the action method can have its own logic.
+ Specific conditions for when the action should occur.
+
+
+
+ Attribute for use on Fusion.Behaviour classes.
+ Automatically creates a button in the inspector of derived classes.
+ Can be used on Fields or Method member types.
+ For fields, the name of the method the button will execute must be supplied.
+ When used on methods, that method will be called.
+
+
+
+
+ Define a ButtonBehaviourAction.
+
+ The name that will be displayed on the button.
+ The name of the method to execute. If excluded, this will be the method this attribute is on.
+ The name of the member (in the same class) to evaluate, to determine if the action should be performed.
+ Typically null, as the action method can have its own logic.
+
+
+
+ Define a ButtonBehaviourAction.
+
+ The name that will be displayed on the button.
+ Indicates if this button should appear while playing.
+ Indicates if this button should appear while not playing.
+ The name of the method to execute. If excluded, this will be the method this attribute is on.
+ The name of the member (in the same class) to evaluate, to determine if the action should be performed.
+ Typically null, as the action method can have its own logic.
+
+
+
+ Define a ButtonBehaviourAction.
+
+ The name that will be displayed on the button.
+ Indicates if this button should appear while playing.
+ Indicates if this button should appear while not playing.
+ The name of the member (in the same class) to evaluate, to determine if the action should be performed.
+ Typically null, as the action method can have its own logic. This member can be a property, field or method.
+ The return value of any of these is converted into a double. True = 1, False = 0. Null = 0.
+
+
+
+ Attribute for use on Fusion.Behaviour classes.
+ Automatically draws a warning box in the inspector if the conditions are met.
+
+
+
+
+ Define a ButtonBehaviourAction.
+
+ The text that will be shown in the warning box.
+ The name of the member (in the same class) to evaluate, to determine if the action should be performed.
+ Typically null, as the action method can have its own logic. This member can be a property, field or method.
+ The return value of any of these is converted into a double. True = 1, False = 0. Null = 0.
+
+
+
+ Casts an enum or int value in the inspector to specific enum type for rendering of its popup list.
+ Supplying a method name rather than a type allows a property with the type Type to be used to dynamically get the enum type.
+
+
+
+
+ Options for hiding a field.
+
+
+
+
+ Field will be disabled, but still visible.
+
+
+
+
+ Field will be hidden.
+
+
+
+
+ Fusion editor attribute for selectively drawing/hiding fields. Condition member can be a property, field or method (with a return value).
+ Value of condition method is converted to a long. Null = 0, False = 0, True = 1, Unity Object = InstanceId
+
+
+
+
+ Constructor.
+
+ Condition member can be a property, field or method (with a return value).
+ Value of condition method is converted to a long. Null = 0, False = 0, True = 1, Unity Object = InstanceId
+ The value to compare the member value against.
+ How the field should be hidden (disabled or removed)
+ How the condition member value and compareToValye will be evaluated.
+
+
+
+ Constructor.
+
+ Condition member can be a property, field or method (with a return value).
+ Value of condition method is converted to a long. Null = 0, False = 0, True = 1, Unity Object = InstanceId
+ The value to compare the member value against.
+ How the field should be hidden (disabled or removed)
+ How the condition member value and compareToValye will be evaluated.
+
+
+
+ Constructor.
+
+ Condition member can be a property, field or method (with a return value).
+ Value of condition method is converted to a long. Null = 0, False = 0, True = 1, Unity Object = InstanceId
+ The value to compare the member value against.
+ How the condition member value and compareToValye will be evaluated.
+
+
+
+ Constructor.
+
+ Condition member can be a property, field or method (with a return value).
+ Value of condition method is converted to a long. Null = 0, False = 0, True = 1, Unity Object = InstanceId
+ The value to compare the member value against.
+ How the condition member value and compareToValye will be evaluated.
+
+
+
+ Constructor.
+
+ Condition member can be a property, field or method (with a return value).
+ Value of condition method is converted to a long. Null = 0, False = 0, True = 1, Unity Object = InstanceId
+ How the field should be hidden (disabled or removed)
+ How the condition member value and compareToValye will be evaluated.
+
+
+
+ Fusion editor attribute for disabling fields.
+
+
+
+
+ Constructor.
+
+ If using the release version of the fusion.runtime.dll, field will be hidden, rather than just disabled.
+
+
+
+ Attribute that indicates an enum should render as multi-select mask drop list in the inspector
+
+
+
+
+ Defines the target authority mask for OnChanged callbacks
+
+
+
+
+ Receive callback if you have state authority over the object
+
+
+
+
+ Receive callback if you have input authority over the object
+
+
+
+
+ Receive callback if you have neither input or state authority over the object
+
+
+
+
+ Shorthand for StateAuthority|InputAuthority|Proxies
+
+
+
+
+
+ Flags a property of for network state synchronization.
+ The property should have empty get and set defines, which will automatically be replaced with networking code via IL Weaving.
+ OnChanged can be assigned with the name of a method in the same NetworkBehaviour.
+ The named method will get called whenever this property value has been changed by the State Authority.
+
+ | [Networked(OnChanged = nameof(MyCallbackMethod)]
+ | public int MyProperty { get; set; }
+ |
+ | protected static void MyCallbackMethod(Changed<ChangedCallbackParent> changed) {
+ | changed.LoadNew();
+ | var newval = changed.Behaviour.MyProperty;
+ | changed.LoadOld();
+ | var oldval = changed.Behaviour.MyProperty;
+ | Debug.Log($"Changed from {oldval} to {newval}");
+ | }
+
+
+
+ Inside of INetworkStruct, do not use AutoProperties (get; set;), as these will introduce managed types into the struct, which are not allowed. Instead use '=> default'.
+
+ | [Networked]
+ | public string StringProp { get => default; set { } }
+
+
+
+
+
+
+ Signature for the callback is:
+ static void OnChanged(Changed<MyClass> changed){}
+
+
+
+
+ Which targets should receive the OnChanged callback.
+
+
+
+
+ Name of the field that holds the default value for this networked property.
+
+
+
+
+ Interest group for this property
+
+
+
+
+ Default constructor for NetworkedAttribute
+
+
+
+
+ Group constructor
+
+ The interest group this property belongs to
+
+
+
+ If set, this changes expected Wrap method signature to int Name(NetworkRunner, T, byte*) and Unwrap to int Name(NetworkRunner, byte*, ref T).
+ In both cases, the result is the number of bytes written/read and can not be greater than what's declared here.
+
+
+
+
+ Describes the total number of WORDs a uses.
+
+
+
+
+ Enables a special inspector drawer for Unity Rect type, specially designed for editing RectTransforms using normalized values.
+
+
+
+
+ Constructor for . InvertY inverts Y handling, for RectTransforms which treat lowerRight as origin, rather than upper left.
+
+
+ Expressed as Width/Height, this defines the ratio of the box shown in the inspector. Value of 0 indicates game window resolution will be used.
+
+
+
+ Attribute used to mark a field that needs to change based on an exponent
+ via a UI slider
+
+
+
+
+ Determines if a slider power of 0 results in an actual value of one, or zero.
+
+
+
+
+
+
+
+
+
+ Color of the inspector header for this component type. None indicates no header graphic should be used.
+
+
+
+
+ Icon used for the inspector header for this component type. None indicates no header graphic should be used.
+
+
+
+
+ Unit Type for a certain field.
+ This helps to identify the unit that a certain value represents, like Seconds or Percentage
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Unit Attribute class.
+ Used to mark a field with the respective
+
+
+
+
+ The rounding used by the value slider.
+
+
+
+
+ The rounding used by the inverse slider (if is enabled).
+
+
+
+
+ Specify the field type, without Min and Max values
+
+ Unit type
+
+
+
+ Specify the field type, and its Min and Max values.
+
+ Unit type
+ Min value for this field
+ Max value for this field
+ If values outside of the min/max range will get clamped, or be allowed.
+
+
+
+ Specify the field type, and its Min and Max values.
+
+ Unit type
+ Min value for this field
+ Max value for this field
+ If values outside of the min/max range will get clamped, or be allowed.
+
+
+
+ Comparison method for evaluating condition member value against compareToValues.
+
+
+
+
+ True if condition member value equals compareToValue.
+
+
+
+
+ True if condition member value is not equal to compareToValue.
+
+
+
+
+ True if condition member value is less than compareToValue.
+
+
+
+
+ True if condition member value is less than or equal to compareToValue.
+
+
+
+
+ True if condition member value is greater than or equal to compareToValue.
+
+
+
+
+ True if condition member value is greater than compareToValue.
+
+
+
+
+ Fusion editor attribute for selective editor rendering. Condition member can be a property, field or method (with a return value).
+ Value of condition method is converted to a long. Null = 0, False = 0, True = 1, Unity Object = InstanceId
+
+
+
+
+ Base Constructor.
+
+
+
+
+
+
+
+ Base Constructor.
+
+
+
+
+
+
+
+ Base Constructor.
+
+
+
+
+
+
+ Fusion editor attribute for selective editor rendering of warnings/info boxes in the inspector.
+ Condition member can be a property, field or method (with a return value).
+ Value of condition method is converted to a long. Null = 0, False = 0, True = 1, Unity Object = InstanceId
+
+
+
+
+ Constructor.
+
+ Condition member can be a property, field or method (with a return value).
+ Value of condition method is converted to a long. Null = 0, False = 0, True = 1, Unity Object = InstanceId
+ The value to compare the member value against.
+ The text of the info box.
+ The icon of the message box. Use (int)UnityEditor.MessageType
+ How the condition member value and compareToValye will be evaluated.
+
+
+
+ Constructor.
+
+ Condition member can be a property, field or method (with a return value).
+ Value of condition method is converted to a long. Null = 0, False = 0, True = 1, Unity Object = InstanceId
+ The value to compare the member value against.
+ The text of the info box.
+ The icon of the message box. Use (int)UnityEditor.MessageType
+ How the condition member value and compareToValye will be evaluated.
+
+
+
+ Constructor.
+
+ Condition member can be a property, field or method (with a return value).
+ Value of condition method is converted to a long. Null = 0, False = 0, True = 1, Unity Object = InstanceId
+ The text of the info box.
+ The icon of the message box. Use (int)UnityEditor.MessageType
+ How the condition member value and compareToValye will be evaluated.
+
+
+
+ Wrapper around the Fusion LBC Implementation
+
+ It will control and manage the communication between Fusion and the Photon Cloud
+
+
+
+
+ Fusion LBC Client Reference
+
+
+
+
+ ID of this Communicator. This reflects the Actor Number of the Peer inside the Room
+
+
+
+
+ Flag to signal if this Communicator was extracted and will be reused
+
+
+
+
+ Responsible to deal with LoadBalancingClient Events
+
+
+ Responsible for dealing and managing the API used to communicate with the Photon Cloud.
+ This also includes:
+ - Send/Reply to Protocol Messages
+ - Query for Reflexive Information
+ - Perform NAT Punchthrough
+ - Manage the Realtime client
+ - Respond to/deal with Photon Cloud events
+
+
+
+
+ Signal if the local peer is connected to the Photon Cloud and can perform extra actions, like creating/joining a Room.
+
+
+
+
+ Photon Client UserID
+
+
+
+
+ Signal if the local peer is already inside a Room
+
+
+
+
+ Signal if the local peer is also the Master Client of the Current Room
+
+
+
+
+ Get the internal used by the Client to perform the authentication
+
+
+
+
+ Reference to the current active communicator
+
+
+
+
+ Signal if the local peer will try or accept connections using NAT Punch
+
+
+
+
+ Custom STUN Server
+
+
+
+
+ Exposes the current NAT Type from the local Peer
+
+
+
+
+ Builds a new CloudService reference
+
+ Reference to the current active Runner
+ Opitional external Communicator
+
+
+
+ Extract the internal Communicator for later re-use
+
+ Current used by this instance with all resetted settings
+
+
+
+ Update and perform all pending actions related to the Photon Cloud communication
+
+
+
+
+ Connect the local peer to Photon Cloud using an async process.
+
+ Custom Authentication Values used to Auth the local peer
+ Custom Photon App Settings
+ Async Task of the connect to Photon Cloud process. Can be used to wait for the process to be finished
+
+
+
+ Join the Peer to a specific Lobby, either a prebuild or a custom one
+
+ Lobby Type to Join
+ Lobby ID
+ True if the operation could be completed.
+
+
+
+ Make the local Peer Create/Join a Room based on Start Game Arguments
+
+ --------------------->Yes--->CreateOrJoin
+ SharedMode--->| Valid Room Name |
+ --------------------->No---->[RandomRoomName]-->JoinRandomOrCreate
+
+ --------------------->Yes--->CreateOrJoin
+ ClientMode--->| Valid Room Name |
+ --------------------->No---->[RandomRoomName]-->JoinRandom
+
+ ServerMode-- --------------------->Yes----------------------------|
+ |->| Valid Room Name | v
+ HostMode---- --------------------->No---->[RandomRoomName]-->CreateOrJoin
+
+
+ Start Game Args ref
+ Task of the Join Room process
+
+
+
+ Disconnect the Local Peer from the Photon Cloud.
+
+ Async Task of the disconnect from Photon Cloud process. Can be used to wait for the process to be finished
+
+
+
+ Get the UserID of another Player Actor in the Room
+
+ ActorID of a Player inside the Room
+ Player UserID
+
+
+
+ Callback fire on every connection attempt with a remote Server.
+
+ It is used while trying to hole-punch the remote server and enables the manager to swap the target endpoint in between attempts.
+ This is necessary to maintain a flow of attempts even if we exchange the local/public/relay endpoints
+
+ Current attempt number
+ Max number of attempts
+ Flag if target EndPoint should change
+ New target EndPoint
+
+
+
+ Start the connection process with a Remote Server
+
+ Starting NAT Punch state, see for more info
+ Remote Server EndPoint to connect to
+
+
+
+ Disposes the current
+
+
+
+
+ Update the data based on the current LBC Information after the peer enters a Room
+
+
+
+
+ Callback invoked when any Room Property has changed
+
+
+
+
+ Callback invoked when the Room list is updated with data from the Cloud
+
+ New List of
+
+
+
+ Send a Protocol Message to Fusion Plugin
+
+
+
+
+ Send a Protocol Message to the Fusion Plugin
+
+ Reference to the Project Config to be sent
+
+
+
+ Send a Protocol Message to the Fusion Plugin
+
+ Reference to StunResult used to build the Protocol Message
+
+
+
+ Build and send the latest Server Snapshot to the Fusion Plugin
+
+
+
+
+ Handles a Confirmation Protocol Message sent by the Fusion Plugin
+
+ Sender Actor Number
+ Join Protocol Message
+
+
+
+ Handles a Protocol Message sent by the Fusion Plugin
+
+ Sender Actor Number
+ Start Protocol Message
+
+
+
+ Handles a Protocol Message sent by the Fusion Plugin
+
+ Sender Actor Number
+ Disconnect Protocol Message
+
+
+
+ Handles a Protocol Message sent by the Fusion Plugin
+
+ Sender Actor Number
+ NetworkConfigSync Protocol Message
+
+
+
+ Handles a Protocol Message sent by the Fusion Plugin
+
+ Sender Actor Number
+ ReflexiveInfo Protocol Message
+
+
+
+ Check for scheduled requests
+
+
+
+
+ Confirms or waits for confirmation from the Plugin of the Join Message
+
+ True if the Join Confirmation was received, false otherwise
+
+
+
+ Run the STUN Service to retrieve the current Reflexive Addresses of the local peer
+
+ Running Task of the STUN Query Procedure
+
+
+
+ Update the internal used to start the Fusion Runner
+
+ New arguments
+
+
+
+ Reverse ping will send Empty UDP Packets to the RemoteAddr in order to setup the Routing Table
+ on the current NAT of the Server, forcing it to allow packages from the remote client to be received
+
+ Remove EndPoint to ping
+ CancellationToken
+
+
+
+ Send a "ping" to an EndPoint
+
+ EndPoint to send the ping
+ True if the Ping was sent, false otherwise
+
+
+
+ Try to send Server Snapshot to Plugin
+
+
+
+
+ Check if Remote Private EndPoint appears to be in the same Subnet
+
+ True if in same Subnet
+
+
+
+ Initilize the Log system from the Realtime SDK to use the Fusion Log System
+
+
+
+
+ Converts a to a
+
+
+ ref
+ ref
+
+
+
+ Holds information about the local peer used to Join/Start/Connect to a remote Peer
+ using the Photon Cloud as backend
+
+
+
+
+ Timeout between sending a Request and receive a Join Confirmation
+
+
+
+
+ Client Server Lobby
+
+
+
+
+ Shared Lobby
+
+
+
+
+ Reference to the initialization arguments set by the user.
+ They are used to start the Fusion Runner
+
+
+
+
+ Connection Stage related to the current EndPoint Type used by the client to connect a remote server
+
+
+
+
+ Describes the current state of the Join process
+
+
+
+
+ Describe the current protocol version we are using to communicate with the Plugin
+
+
+
+
+ Remote Server Reflexive Info. Stores private and public EndPoint of the remote server.
+
+
+
+
+ Local Reflexive Info. Stores private and public EndPoint of the local peer.
+
+
+
+
+ Stores requests sent by the plugin
+
+
+
+
+ Last Disconnect Msg Received from the Plugin
+
+
+
+
+ Define a list of Requests that may be asked by the Plugin Server
+
+
+
+
+ No Request
+
+
+
+
+ Request for the Local Reflexive Info
+
+
+
+
+ Describes the current Target Address Type used in the NAT Punch procedure
+
+
+
+
+ No connection procedure is running
+
+
+
+
+ Trying to Connect to LAN EndPoint
+
+
+
+
+ Trying to Connect to WAN EndPoint
+
+
+
+
+ Trying to Connect to Relay EndPoint
+
+
+
+
+ Stage of the Join Process.
+
+ When starting the peer, the first thing we need to make sure is to have Joined the Room
+ with a confirmation from the Plugin, this will signal the current stage of this
+
+
+
+
+ Join Request not sent yet
+
+
+
+
+ Join Request Sent, waiting for confirmation
+
+
+
+
+ Join Confirmation Received, all good
+
+
+
+
+ Failed to receive Join Confirmation after a timeout ()
+
+
+
+
+ Stores the data of a "Request to Ping" used by the Server in Client-Server Mode
+ to send arbitrary "pings" to a connecting Client.
+
+ This allows the local NAT Table to be updated with the right mapping information
+ from the remote client, increasing the chance of the local Server to receive any
+ connect request from the remote peer.
+
+
+
+
+ Delay between pings
+
+
+
+
+ Total number of pings to send
+
+
+
+
+ Countdown for the next ping
+
+
+
+
+ Remote Client Reflexive Info, used to getter the Public EndPoint to send the ping
+
+
+
+
+ Extension methods to
+
+
+
+
+ Interface for callback.
+ Called after the resimulation loop (when applicable), and also after the forward simulation loop.
+ Implement this interface on and classes.
+
+
+
+
+ Called after the resimulation loop (when applicable), and also after the forward simulation loop.
+ Only called on Updates where resimulation or forward ticks are processed.
+
+ True if this is being called during the resimulation loop. False if during the forward simulation loop.
+ How many resimulation or forward ticks are going to be processed.
+
+
+
+ Callback interface for .
+ Called at the very start of the resimulation loop (on clients with prediction enabled),
+ immediately after state is set to the latest server snapshot.
+ Implement this interface on and classes.
+
+
+
+
+ Called at the very start of the resimulation loop (on clients with prediction enabled),
+ immediately after state is set to the latest server snapshot.
+
+
+
+
+ Interface for callback. Called immediately after Physics.Simulate().
+ Implement this interface on and classes.
+
+
+
+
+ Called immediately after Physics.Simulate().
+
+
+
+
+ Interface for callback.
+ Called after each tick simulation completes.
+ Implement this interface on and classes.
+
+
+
+
+ Called after each tick simulation completes.
+
+
+
+
+ Interface for the callback, which is called at the end of each Fusion Update segment.
+ Implement this interface on and classes.
+
+
+
+
+ Called at the end of the Fusion Update loop, before all Unity MonoBehaviour.Update() callbacks.
+
+
+
+
+ Interface for callback.
+ Called before the resimulation loop (when applicable), and also before the forward simulation loop.
+ Implement this interface on and classes.
+
+
+
+
+ Called before the resimulation loop (when applicable), and also before the forward simulation loop.
+ Only called on Updates where resimulation or forward ticks are processed.
+
+ True if this is being called during the resimulation loop. False if during the forward simulation loop.
+ How many resimulation or forward ticks are going to be processed.
+
+
+
+ Callback interface for .
+ Called at the very start of the resimulation loop (on clients with prediction enabled),
+ before state is set to the latest server snapshot.
+ Implement this interface on and classes.
+
+
+
+
+ Called at the very start of the resimulation loop (on clients with prediction enabled),
+ before state is set to the latest server snapshot.
+
+
+
+
+ Interface for callback. Called immediately before Physics.Simulate().
+ Implement this interface on and classes.
+
+
+
+
+ Called immediately before Physics.Simulate().
+
+
+
+
+ Interface for callback.
+ Called before each tick is simulated.
+ Implement this interface on and classes.
+
+
+
+
+ Called before each tick is simulated.
+
+
+
+
+ Interface for the callback, which is called at the beginning of each Fusion Update segment.
+ Implement this interface on and classes.
+
+
+
+
+ Called at the start of the Fusion Update loop, before the Fusion simulation loop.
+
+
+
+
+ Interface for predicted spawn callbacks.
+ Implement this interface on and classes.
+
+
+
+
+ Called in place of Spawned(), when the predicted object is initially created locally on the client.
+
+
+
+
+ Called every tick in place of FixedUpdateNetwork(), until or occur.
+
+
+
+
+ Called every tick in place of Render(), until or occur.
+
+
+
+
+ Called when Server does not produce the spawn that has been predicted.
+ The spawn did not actually happen, and this callback may be used to clean up after the missed prediction.
+
+
+
+
+ Called when Server spawn was has been confirmed, and the predicted spawn object has been added to the simulation.
+
+
+
+
+ Interface for callback.
+ Called when the joins AreaOfInterest.
+ Implement this interface on and classes.
+ Only applicable to .
+
+
+
+
+ Called when the joins AreaOfInterest.
+ Object is now receiving snapshot updates.
+ Object will execute FixedUpdateNetwork() and Render() methods until the object leaves simulation.
+
+
+
+
+ Interface for the callback.
+ Called when the leaves AreaOfInterest.
+ Implement this interface on and classes.
+ Only applicable to .
+
+
+
+
+ Called when the leaves AreaOfInterest.
+ Object is no longer receiving snapshot updates.
+ Object will stop executing FixedUpdateNetwork() and Render() methods until the object rejoins simulation.
+
+
+
+
+ Float compression value, used when writing to the fusion allocator.
+
+
+
+
+ Float decompression value, used when reading from the fusion allocator.
+
+
+
+
+ Indicates the rounding factor of compressed values.
+ All values will be truncated to the nearest multiple of this.
+ For example; A value of 0.012345f compressed with an Accuracy of 0.001, becomes 0.012f
+ An Accuracy setting of 0 is uncompressed.
+
+
+
+
+ The accuracy value that is used as a rounding factor for Fusion's compression. All values will be truncated to the nearest multiple of this.
+
+
+
+
+ The inverse of the Accuracy value, used in decompression.
+
+
+
+
+ Sets the Accuracy value.Inverse is determined and set as well.
+
+
+
+
+ Sets the accuracy to a global accuracy, which are defined in Fusion's .
+
+ The name of the Accuracy Default (can be found in 's settings.
+
+
+
+ Gets the value used for float compression.
+
+ Reference to the project Config file, which is needed to look up the global values.
+ Typically this is Runner.Config is used for this value.
+
+
+
+
+ Gets the value used for float decompression.
+
+ Reference to the project file, which is needed to look up the global values.
+
+
+
+ Accuracy constructor. The provided float value is used to determine the rounding.
+ For example, an accuracy of .01f would result in the value .02345 being rounded to .02f.
+
+
+
+
+
+ Accuracy constructor that binds this accuracy to a named setting.
+ This can be a built-in constant, like AccuracyDefaults.POSITION -
+ or your own custom name (provided you have defined it in .
+
+ The string name of the tag. Can be an constant, or your own defined default.
+ The value that will be used if the AccuracyDefaults toggle is deselected in the inspector.
+
+
+
+ Implicit operator to convert floats into accuracy.
+
+
+
+
+
+ Summary text for this accuracy.
+
+
+
+
+
+ Base class for network behaviours which provide a position offset for area of interest.
+ A is required on this GameObject or a parent of this GameObject.
+
+
+
+
+ The int* offset for the Ptr, for the memory location of the position data.
+
+
+
+
+ Base class for Fusion network components, which are associated with a .
+ Derived from , components derived from this class are associated with a and .
+ Components derived from this class are associated with a parent .
+ and can use the on properties to automate state synchronization,
+ and can use the on methods, to automate messaging.
+
+
+
+
+ Options for which time frame this object will render in.
+
+
+
+
+ Selects the most likely suitable time frame.
+
+
+
+
+ Renders the object in the remote time frame, using the most recently consumed remote state tick.
+
+
+
+
+ Render the object in the local players time frame, interpolating between the most recent tick simulation result and the previous.
+
+
+
+
+ Interpolation will not be calculated nor applied.
+
+
+
+
+ Pointer to the allocated memory associated with this Object.
+
+
+
+
+ The index of this , in the array.
+
+
+
+
+ Indicates whether the state authority snapshot tick data, or prediction tick data (if available in the current mode for the current peer) should be used for interpolation.
+
+
+
+
+ Gives access to the offset (in 32 bit words) and count (in 32 bit words) of this behaviour backing data
+
+
+
+
+ Get/Set the time frame this object is rendered in.
+
+
+
+
+ The unique identifier for this network behaviour.
+
+
+
+
+ Override this value for custom memory allocations.
+ This is for advanced use cases only, and cannot be used if is used in the derived class.
+
+
+
+
+ Copies entire state of passed in source
+
+ Source to copy data from
+
+
+
+ Override this property to change whether initial non-zero values assigned
+ to [Networked] properties invoke OnChanged callbacks. For clients
+ the initial value comes from the simulation snapshot, not from what has
+ been set locally in the inspector.
+
+ Returns "true" by default.
+
+
+
+
+ Post spawn callback.
+
+
+
+
+ Called before the network object is despawned
+
+ If the state of the behaviour is still accessible
+
+
+
+ Get 'To' and 'From' states, and the Alpha (t) values needed for lerping.
+
+ The returned values.
+ Force interpolation to the current s time frame
+ True valid state data was returned.
+
+
+
+ Get 'To' and 'From' states, and the Alpha (t) values needed for interpolation.
+
+ The returned values.
+
+ If the interpolation data is in the predicted time frame (true) or between snapshots (false),
+ according to the .
+
+ True valid state data was returned.
+
+
+
+ If the behaviour data should be interpolated between latest predicted states or between snapshots.
+
+
+
+
+
+ Clear all dynamic OnChange callbacks from this behaviour
+
+
+
+
+ Removes a specific OnChange callback from this behaviour
+
+ The reference returned by OnChangeAdd
+ Removal succeeded
+
+
+
+ Adds a OnChange callback to this behaviour which is bound to a specific word offset and word count
+
+ Word offset to monitor for changes
+ How many words to monitor for changes, from offset and up
+ Callback to invoke
+ Type of the behaviour
+ Reference struct that can be used to remove this callback later
+
+
+
+ Adds a OnChange callback to this behaviour which is bound to a specific weaved property
+
+ Name of the property to monitor for changes
+ Callback to invoke
+ Type of the behaviour
+ Reference struct that can be used to remove this callback later
+
+
+
+
+
+
+
+
+
+ Returns true if it a valid can be found for the current simulation tick (Typically this is used in ).
+ The returned input struct originates from the ,
+ and if valid contains the inputs supplied by that for the current simulation tick.
+
+
+
+
+ RawInterpolator provides a set of methods to get the "from" and "to" ticks of the associated [Networked] property,
+ as well as the current interpolation value for the two.
+ All methods return raw memory pointers and expects the caller to be able to convert the data to the proper types.
+
+
+
+
+
+ Interpolator provides a set of methods to get the "from" and "to" ticks of the associated [Networked] property,
+ as well as the current interpolation value for the two, but it also provides a Value property as a shortcut to
+ get the actual interpolated value for those parameters.
+
+
+
+
+
+ Get the current interpolation value for this Interpolator. This method will silently ignore missing interpolation data and just return the default value for `T`
+
+
+
+
+ Get the current interpolation value for this Interpolator. Similar to the `Value` property, but will return null if interpolation data is not available.
+
+
+
+
+ Try and get 'To' and 'From' states, and the Alpha (t) values needed for interpolation.
+
+ Value on the state the interpolation is going from.
+ Value on the state the interpolation is going to.
+ Interpolant factor between the two states.
+
+ Force interpolation to the current s time frame (as opposed to between snapshots).
+ If no value is forced, interpolation data will be retrieved according to the .
+
+ True if the interpolation data is available, false otherwise.
+
+
+
+ Get 'To' and 'From' states, and the Alpha (t) values needed for interpolation.
+
+
+ Force interpolation to the current s time frame (as opposed to between snapshots).
+ If no value is forced, interpolation data will be retrieved according to the .
+
+ A tuple containing the values. Null if interpolation data is not available.
+
+
+
+ Get a raw interpolator for a networked property.
+ The returned `RawInterpolator` provides a way to calculate the "between-ticks" value of the named [Networked] property.
+
+ Name of the [Networked] property
+ `RawInterpolator` for the networked property
+
+
+
+ Get an interpolator for a networked property.
+ The returned `Interpolator` provides a way to calculate the "between-ticks" value of the named [Networked] property with the specified type `T`.
+ The value is a linear interpolation between the "from" and the "to" ticks and is available via the `Value` property on the `Interpolator`.
+
+ Name of the [Networked] property
+ Type of the [Networked] property
+ `Interpolator` for the networked property
+
+
+
+ This is a special method that is meant to be used only for [Networked] properties inline initialization.
+
+
+
+
+ This is a special method that is meant to be used only for [Networked] properties inline initialization.
+
+
+
+
+ Converts NetworkBehaviour to NetworkBehaviourId
+
+
+
+
+
+
+ This method needs to be invoked in user overrides of:
+
+
+
+
+
+
+ Reference to an OnChange callback added to a NetworkBehaviour
+
+
+
+
+ If this callback reference is valid or not
+
+
+
+
+ A component for synchronizing the Animator controller state from the State Authority to network proxies.
+ Requires a Unity Animator component, and a component.
+ NOTE: Animator Root Motion is not compatible with re-simulation and prediction.
+
+
+
+
+ The Animator being synced.
+
+
+
+
+ Flags controlling which Mecanim data will be synced.
+
+
+
+
+ Accuracy used for parameter float values.
+
+
+
+
+ Accuracy used for animator state normalized time values.
+
+
+
+
+ Accuracy used for layer weight values.
+
+
+
+
+ Queues a trigger with this animator. Call this instead of Animator.SetTrigger for the State Authority.
+ Triggers are prone to getting lost by animation syncs, as they may get reset before the value is synced. Setting triggers with this method ensures they get captured.
+
+
+
+
+
+ Queues a trigger with this animator. Call this instead of Animator.SetTrigger for the State Authority.
+ Triggers are prone to getting lost by animation syncs, as they may get reset before the value is synced. Setting triggers with this method ensures they get captured.
+
+
+
+
+
+ Fusion component for handling Physics2D.SyncTransforms() and Physics2D.Simulate().
+ Only used when == true.
+
+
+
+
+ Fusion component for handling Physics.SyncTransforms() and Physics.Simulate().
+ Only used when == true.
+
+
+
+
+ Replicates a Unity Transform's position and rotation states from the to all other peers.
+ Add this component to a GameObject to sync the position and rotation.
+ A is required on this GameObject or a parent of this GameObject.
+
+ This component does not interpolate visuals. In order to do that, use a .
+
+
+
+
+
+ Cached GameObject.transform reference.
+
+
+
+
+ Implements Unity's Awake event function.
+ If overriding this method in an inheritor, the base method should be called.
+
+
+
+
+ Implements Unity's OnEnable event function.
+ If overriding this method in an inheritor, the base method should be called.
+
+
+
+
+ Overrides .
+ If overriding this method in an inheritor, the base method should be called.
+
+
+
+
+ Implements .
+ If overriding this method in an inheritor, the base method should be called.
+
+
+
+
+ Implements .
+ If overriding this method in an inheritor, the base method should be called.
+ To extend the functionality of copying data from the networked buffer to the engine,
+ override and extend instead.
+
+
+
+
+ Implements .
+ If overriding this method in an inheritor, the base method should be called.
+ To extend the functionality of copying data from the engine to the networked buffer,
+ override and extend instead.
+
+
+
+
+ Implements .
+ If overriding this method in an inheritor, the base method should be called.
+
+
+
+
+ Implements .
+ If overriding this method in an inheritor, the base method should be called.
+
+
+
+
+ Implements .
+ If overriding this method in an inheritor, the base method should be called.
+
+
+
+
+ Sets the values retrieved from the networked data to the respective engine (Unity) fields.
+ If overriding this method in an inheritor, the base method should be called.
+
+
+
+
+ Sets the values retrieved from the engine (Unity) to the respective networked fields.
+ If overriding this method in an inheritor, the base method should be called.
+
+
+
+
+ Gets the position value from the engine. By default, the world position is set to be the output.
+
+
+
+
+ Gets the rotation value from the engine. By default, the world rotation is set to be the output.
+
+
+
+
+ Sets a position value to the engine. By default, the value is set to the transform's world position field.
+
+
+
+
+ Sets a rotation value to the engine. By default, the value is set to the transform's world rotation field.
+
+
+
+
+ Number of words used by a instance on its networked data,
+ including all inherited fields.
+
+
+
+
+ Number of words used by this class on the networked data buffer, including all inherited fields,
+ to serve for reference to inheritors.
+
+
+
+
+ Implements by defining the word offset from the base pointer to the field that carries the position data used for Area of Interest management.
+
+
+
+
+ Reads from the position field on this object's networked data
+ with the default Runner position read accuracy.
+
+
+
+
+ Reads from a position field on the networked data pointed by
+ with the default Runner position read accuracy.
+
+
+
+
+ Reads from a position field on the networked data pointed by
+ with the defined .
+
+
+
+
+ Reads from the rotation field on this object's networked data
+ with the default Runner position read accuracy.
+
+
+
+
+ Reads from a rotation field on the networked data pointed by
+ with the default Runner position read accuracy.
+
+
+
+
+ Reads from a rotation field on the networked data pointed by
+ with the defined .
+
+
+
+
+ Writes to a position field on this object's networked data
+ with the default Runner position write accuracy.
+
+
+
+
+ Writes to a position field on the networked data pointed by
+ with the default Runner position write accuracy.
+
+
+
+
+ Writes to a position field on the networked data pointed by
+ with the defined .
+
+
+
+
+ Writes to a rotation field on this object's networked data
+ with the default Runner position write accuracy.
+
+
+
+
+ Writes to a rotation field on the networked data pointed by
+ with the default Runner position write accuracy.
+
+
+
+
+ Writes to a rotation field on the networked data pointed by
+ with the defined .
+
+
+
+
+ Replicates a Unity Rigidbody state from the to all other peers.
+ Add this component to a GameObject with a Rigidbody component.
+ A is required on this GameObject or a parent of this GameObject.
+
+
+
+
+ Cached reference of this object's component.
+
+
+
+
+ Sets the field to .
+
+
+
+
+ Sets the default teleport interpolation velocity to be the rigidbody velocity.
+ For more details on how this field is used, see .
+
+
+
+
+ Sets the default teleport interpolation angular velocity to be the rigidbody angular velocity.
+ For more details on how this field is used, see .
+
+
+
+
+ Implements Unity's Awake event function.
+ If overriding this method in an inheritor, the base method should be called.
+
+
+
+
+ Implements .
+ If overriding this method in an inheritor, the base method should be called.
+
+
+
+
+
+
+
+
+
+
+ Number of words used by a instance on its networked data,
+ including all inherited fields.
+
+
+
+
+
+
+
+ Reads from the field reserved to store the rigidbody position on this object's
+ networked data using the default Runner position read accuracy.
+
+
+
+
+ Reads from the field reserved to store the rigidbody position on the networked data pointed
+ by using the default Runner position read accuracy.
+
+
+
+
+ Reads from the field reserved to store the rigidbody position on the networked data pointed
+ by using the defined .
+
+
+
+
+ Reads from the field reserved to store the rigidbody rotation on this object's
+ networked data using the default Runner rotation read accuracy.
+
+
+
+
+ Reads from the field reserved to store the rigidbody rotation on the networked data pointed
+ by using the default Runner rotation read accuracy.
+
+
+
+
+ Reads from the field reserved to store the rigidbody rotation on the networked data pointed
+ by using the defined .
+
+
+
+
+ Reads from the field reserved to store the rigidbody velocity on this object's
+ networked data using the default Runner position read accuracy.
+
+
+
+
+ Reads from the field reserved to store the rigidbody velocity on the networked data pointed
+ by using the default Runner position read accuracy.
+
+
+
+
+ Reads from the field reserved to store the rigidbody velocity on the networked data pointed
+ by using the defined .
+
+
+
+
+ Reads from the field reserved to store the rigidbody angular velocity on this object's
+ networked data using the default Runner position read accuracy.
+
+
+
+
+ Reads from the field reserved to store the rigidbody angular velocity on the networked data pointed
+ by using the default Runner position read accuracy.
+
+
+
+
+ Reads from the field reserved to store the rigidbody angular velocity on the networked data pointed
+ by using the defined .
+
+
+
+
+ Reads from a field reserved to store the rigidbody flags and constraints
+ on this object's networked data.
+
+
+
+
+ Reads from a field reserved to store the rigidbody flags and constraints
+ on the networked data pointed by .
+
+
+
+
+ Writes to the field reserved to store the rigidbody position on this object's
+ networked data using the default Runner position write accuracy.
+
+
+
+
+ Writes to the field reserved to store the rigidbody position on the networked data pointed
+ by using the default Runner position write accuracy.
+
+
+
+
+ Writes to the field reserved to store the rigidbody position on the networked data pointed
+ by using the defined .
+
+
+
+
+ Writes to the field reserved to store the rigidbody rotation on this object's
+ networked data using the default Runner rotation write accuracy.
+
+
+
+
+ Writes to the field reserved to store the rigidbody rotation on the networked data pointed
+ by using the default Runner rotation write accuracy.
+
+
+
+
+ Writes to the field reserved to store the rigidbody rotation on the networked data pointed
+ by using the defined .
+
+
+
+
+ Writes to the field reserved to store the rigidbody velocity on this object's
+ networked data using the default Runner position write accuracy.
+
+
+
+
+ Writes to the field reserved to store the rigidbody velocity on the networked data pointed
+ by using the default Runner position write accuracy.
+
+
+
+
+ Writes to the field reserved to store the rigidbody velocity on the networked data pointed
+ by using the defined .
+
+
+
+
+ Writes to the field reserved to store the rigidbody angular velocity on this object's
+ networked data using the default Runner position write accuracy.
+
+
+
+
+ Writes to the field reserved to store the rigidbody angular velocity on the networked data pointed
+ by using the default Runner position write accuracy.
+
+
+
+
+ Writes to the field reserved to store the rigidbody angular velocity on the networked data pointed
+ by using the defined .
+
+
+
+
+ Writes to a field reserved to store the rigidbody flags and constraints on this object's networked data.
+
+
+
+
+ Writes a field reserved to store the rigidbody flags and constraints on the networked data pointed by .
+
+
+
+
+ Replicates a Unity Rigidbody state from the to all other peers.
+ Add this component to a GameObject with a Rigidbody component.
+ A is required on this GameObject or a parent of this GameObject.
+
+
+
+
+ Cached reference of this object's component.
+
+
+
+
+ Sets the field to .
+
+
+
+
+ Sets the default teleport interpolation velocity to be the rigidbody velocity.
+ For more details on how this field is used, see .
+
+
+
+
+ Sets the default teleport interpolation angular velocity to be the rigidbody angular velocity, around the Z axis.
+ For more details on how this field is used, see .
+
+
+
+
+ Implements Unity's Awake event function.
+ If overriding this method in an inheritor, the base method should be called.
+
+
+
+
+ Implements .
+ If overriding this method in an inheritor, the base method should be called.
+
+
+
+
+
+
+
+
+
+
+ Number of words used by a instance on its networked data,
+ including all inherited fields.
+
+
+
+
+
+
+
+ Reads from the field reserved to store the rigidbody position on this object's
+ networked data using the default Runner position read accuracy.
+
+
+
+
+ Reads from the field reserved to store the rigidbody position on the networked data pointed
+ by using the default Runner position read accuracy.
+
+
+
+
+ Reads from the field reserved to store the rigidbody position on the networked data pointed
+ by using the defined .
+
+
+
+
+ Reads from the field reserved to store the rigidbody rotation on this object's
+ networked data using the default Runner rotation read accuracy.
+
+
+
+
+ Reads from the field reserved to store the rigidbody rotation on the networked data pointed
+ by using the default Runner rotation read accuracy.
+
+
+
+
+ Reads from the field reserved to store the rigidbody rotation on the networked data pointed
+ by using the defined .
+
+
+
+
+ Reads from the field reserved to store the rigidbody velocity on this object's
+ networked data using the default Runner position read accuracy.
+
+
+
+
+ Reads from the field reserved to store the rigidbody velocity on the networked data pointed
+ by using the default Runner position read accuracy.
+
+
+
+
+ Reads from the field reserved to store the rigidbody velocity on the networked data pointed
+ by using the defined .
+
+
+
+
+ Reads from the field reserved to store the rigidbody angular velocity on this object's
+ networked data using the default Runner position read accuracy.
+
+
+
+
+ Reads from the field reserved to store the rigidbody angular velocity on the networked data pointed
+ by using the default Runner position read accuracy.
+
+
+
+
+ Reads from the field reserved to store the rigidbody angular velocity on the networked data pointed
+ by using the defined .
+
+
+
+
+ Reads from the field reserved to store the rigidbody gravity scale on this object's
+ networked data using the default Runner position read accuracy.
+
+
+
+
+ Reads from the field reserved to store the rigidbody gravity scale on the networked data pointed
+ by using the default Runner position read accuracy.
+
+
+
+
+ Reads from the field reserved to store the rigidbody gravity scale on the networked data pointed
+ by using the defined .
+
+
+
+
+ Reads from a field reserved to store the rigidbody flags and constraints
+ on this object's networked data.
+
+
+
+
+ Reads from a field reserved to store the rigidbody flags and constraints
+ on the networked data pointed by .
+
+
+
+
+ Writes to the field reserved to store the rigidbody position on this object's
+ networked data using the default Runner position write accuracy.
+
+
+
+
+ Writes to the field reserved to store the rigidbody position on the networked data pointed
+ by using the default Runner position write accuracy.
+
+
+
+
+ Writes to the field reserved to store the rigidbody position on the networked data pointed
+ by using the defined .
+
+
+
+
+ Writes to the field reserved to store the rigidbody rotation on this object's
+ networked data using the default Runner rotation write accuracy.
+
+
+
+
+ Writes to the field reserved to store the rigidbody rotation on the networked data pointed
+ by using the default Runner rotation write accuracy.
+
+
+
+
+ Writes to the field reserved to store the rigidbody rotation on the networked data pointed
+ by using the defined .
+
+
+
+
+ Writes to the field reserved to store the rigidbody velocity on this object's
+ networked data using the default Runner position write accuracy.
+
+
+
+
+ Writes to the field reserved to store the rigidbody velocity on the networked data pointed
+ by using the default Runner position write accuracy.
+
+
+
+
+ Writes to the field reserved to store the rigidbody velocity on the networked data pointed
+ by using the defined .
+
+
+
+
+ Writes to the field reserved to store the rigidbody angular velocity on this object's
+ networked data using the default Runner position write accuracy.
+
+
+
+
+ Writes to the field reserved to store the rigidbody angular velocity on the networked data pointed
+ by using the default Runner position write accuracy.
+
+
+
+
+ Writes to the field reserved to store the rigidbody angular velocity on the networked data pointed
+ by using the defined .
+
+
+
+
+ Writes to the field reserved to store the rigidbody gravity scale on this object's
+ networked data using the default Runner position write accuracy.
+
+
+
+
+ Writes to the field reserved to store the rigidbody gravity scale on the networked data pointed
+ by using the default Runner position write accuracy.
+
+
+
+
+ Writes to the field reserved to store the rigidbody gravity scale on the networked data pointed
+ by using the defined .
+
+
+
+
+ Writes to a field reserved to store the rigidbody flags and constraints on this object's networked data.
+
+
+
+
+ Writes a field reserved to store the rigidbody flags and constraints on the networked data pointed by .
+
+
+
+
+ Base class for 2D and 3D networked rigid body behaviours:
+ see and , respectively.
+ This class handles some of the data and logic shared between the two versions.
+
+
+
+
+ Sets a 2D or 3D rigid body kinematic field to ,
+ according to the explicit implementation.
+
+
+
+
+ If the rigid body state is not predicted, but just interpolated between snapshots.
+
+
+
+
+ If was called at least once on this instance.
+
+
+
+
+ Implements .
+ If overriding this method in an inheritor, the base method should be called.
+
+
+
+
+ Implements .
+ If overriding this method in an inheritor, the base method should be called.
+
+
+
+
+ Implements .
+ If overriding this method in an inheritor, the base method should be called.
+ To extend the functionality of copying data from the networked buffer to the engine,
+ override and extend instead.
+
+
+
+
+ Implements .
+ If overriding this method in an inheritor, the base method should be called.
+ To extend the functionality of copying data from the engine to the networked buffer,
+ override and extend instead.
+
+
+
+
+ Implements .
+ If overriding this method in an inheritor, the base method should be called.
+
+
+
+
+
+
+
+ Networked flags representing a 2D or 3D rigid body state and characteristics.
+
+
+
+
+ Networked kinematic state.
+ See also or .
+
+
+
+
+ Networked state. Not used with 2D rigid bodies.
+
+
+
+
+ Networked sleeping state.
+ See also or .
+
+
+
+
+ Number of words used by a instance on its networked data,
+ including all inherited fields.
+
+
+
+
+
+
+
+ Reads from the field reserved to store the rigidbody drag on this object's networked data
+ using the default Runner position read accuracy.
+
+
+
+
+ Reads from the field reserved to store the rigidbody drag on the networked data pointed
+ by using the default Runner position read accuracy.
+
+
+
+
+ Reads from the field reserved to store the rigidbody drag on the networked data pointed
+ by using the defined .
+
+
+
+
+ Reads from the field reserved to store the rigidbody angular drag on this object's networked data
+ using the default Runner position read accuracy.
+
+
+
+
+ Reads from the field reserved to store the rigidbody angular drag on the networked data pointed
+ by using the default Runner position read accuracy.
+
+
+
+
+ Reads from the field reserved to store the rigidbody angular drag on the networked data pointed
+ by using the defined .
+
+
+
+
+ Reads from the field reserved to store the rigidbody mass on this object's networked data
+ using the default Runner position read accuracy.
+
+
+
+
+ Reads from the field reserved to store the rigidbody mass on the networked data pointed
+ by using the default Runner position read accuracy.
+
+
+
+
+ Reads from the field reserved to store the rigidbody mass on the networked data pointed
+ by using the defined .
+
+
+
+
+ Reads from the field reserved to store the rigidbody flags on this object's networked data.
+
+
+
+
+ Reads from the field reserved to store the rigidbody flags on the networked data pointed by .
+
+
+
+
+ Reads from the field reserved to store the rigid body flags on this object's networked data
+ and returns the raw word value that might also carry flags specific to 2D or 3D rigid bodies.
+ See also
+ NetworkRigidbody.ReadNetworkRigidbodyFlags or
+ NetworkRigidbody2D.ReadNetworkRigidbodyFlags.
+
+
+
+
+ Reads from a field reserved to store the rigid body flags on the networked data pointed by
+ and returns the raw word value that might also carry flags specific to 2D or 3D rigid bodies.
+ See also
+ NetworkRigidbody.ReadNetworkRigidbodyFlags or
+ NetworkRigidbody2D.ReadNetworkRigidbodyFlags.
+
+
+
+
+ Reads the values of a rigidbody drag, angular drag and mass field on this object's networked data
+ using the default Runner position read accuracy.
+ The values are returned as the x, y and z values of a Vector3, respectively.
+
+
+
+
+ Reads the values of a rigidbody drag, angular drag and mass field on the networked data pointed
+ by using the default Runner position read accuracy.
+ The values are returned as the x, y and z values of a Vector3, respectively.
+
+
+
+
+ Reads the values of a rigidbody drag, angular drag and mass field on the networked data pointed
+ by using the defined .
+ The values are returned as the x, y and z values of a Vector3, respectively.
+
+
+
+
+ Writes the field reserved to store the rigidbody drag on this object's networked data
+ using the default Runner position write accuracy.
+
+
+
+
+ Writes to the field reserved to store the rigidbody drag on the networked data pointed
+ by using the default Runner position write accuracy.
+
+
+
+
+ Writes to the field reserved to store the rigidbody drag on the networked data pointed
+ by using the defined .
+
+
+
+
+ Writes the field reserved to store the rigidbody angular drag on this object's networked data
+ using the default Runner position write accuracy.
+
+
+
+
+ Writes to the field reserved to store the rigidbody angular drag on the networked data pointed
+ by using the default Runner position write accuracy.
+
+
+
+
+ Writes to the field reserved to store the rigidbody angular drag on the networked data pointed
+ by using the defined .
+
+
+
+
+ Writes the field reserved to store the rigidbody mass on this object's networked data
+ using the default Runner position write accuracy.
+
+
+
+
+ Writes to the field reserved to store the rigidbody mass on the networked data pointed
+ by using the default Runner position write accuracy.
+
+
+
+
+ Writes to the field reserved to store the rigidbody mass on the networked data pointed
+ by using the defined .
+
+
+
+
+ Writes to the field reserved to store the rigidbody flags on this object's networked data.
+
+
+
+
+ Reads from the field reserved to store the rigidbody flags on the networked data pointed by .
+
+
+
+
+ Writes to the field reserved to store the on this object's networked data.
+ See also
+ NetworkRigidbody.ReadNetworkRigidbodyFlags or
+ NetworkRigidbody2D.ReadNetworkRigidbodyFlags.
+
+
+
+
+ Writes to the field reserved to store the on this object's networked data.
+ See also
+ NetworkRigidbody.ReadNetworkRigidbodyFlags or
+ NetworkRigidbody2D.ReadNetworkRigidbodyFlags.
+
+
+
+
+ Writes the values of a rigidbody drag, angular drag and mass field on this object's networked data
+ using the default Runner position read accuracy.
+ The values must be provided as the x, y and z values of a Vector3, respectively.
+
+
+
+
+ Reads the values of a rigidbody drag, angular drag and mass field on the networked data pointed
+ by using the default Runner position read accuracy.
+ The values must be provided as the x, y and z values of a Vector3, respectively.
+
+
+
+
+ Reads the values of a rigidbody drag, angular drag and mass field on the networked data pointed
+ by using the defined .
+ The values must be provided as the x, y and z values of a Vector3, respectively.
+
+
+
+
+ Replicates a Unity Transform's position and rotation states from the to all other peers.
+ Add this component to a GameObject to sync the position and rotation data.
+ A is required on this GameObject or a parent of this GameObject.
+
+ Besides handling smooth interpolation of a target view transform, this behaviour also provides
+ interpolated prediction error correction and special handling logic for teleports with controlled interpolation.
+
+
+
+
+
+ The interpolation velocity used when calling and not specifying a value.
+ By default, this value is .
+ Some behaviours like and override
+ this property to provide better default values, like the latest known velocity of the rigid body.
+
+
+
+
+ The interpolation angular velocity used when calling and not specifying a value.
+ By default, this value is .
+ Some behaviours like and override
+ this property to provide better default values, like the latest known angular velocity of the rigid body.
+
+
+
+
+ Teleports the object to the provided position while making the networked state aware
+ that the object was teleported and the view interpolation needs special handling.
+ The is immediately set to the transform's position field
+ and additional data is stored in order to interpolate the view object between the ticks.
+ While interpolating the visual representation of the networked object TO a tick where a teleport happened,
+ the object's latest state (tick when the teleport is performed) will not be used, as doing so would cause
+ the interpolation target to visually interpolate along the teleported distance. Instead, the view will be
+ interpolated between the FROM state (tick before the teleport) and an artificial position
+ computed based on this FROM state and an interpolation velocity (see ),
+ in order to emulate how the object would behave if the teleport had not been performed.
+
+ The position which the object is being teleported to.
+
+ The emulated velocity of the interpolation target while interpolating to a tick where a teleport happened.
+ If null, the will be used.
+
+
+ If the artificial position for teleport interpolation should be computed backwards (artificial From, based on the
+ To state - the interpolation velocity) or forward (artificial To, based on the From state + interpolation velocity).
+
+
+
+
+ Teleports the object to the provided rotation while making the networked state aware
+ that the object was teleported and the view interpolation needs special handling.
+ The is immediately set to the transform's rotation field
+ and additional data is stored in order to interpolate the view object between the ticks.
+ While interpolating the visual representation of the networked object TO a tick where a teleport happened,
+ the object's latest state (tick when the teleport is performed) will not be used, as doing so would cause
+ the interpolation target to visually interpolate along the teleported rotation. Instead, the view will be
+ interpolated between the FROM state (tick before the teleport) and an artificial rotation
+ computed based on this FROM state and an interpolation angular velocity (see ),
+ in order to emulate how the object would behave if the teleport had not been performed.
+
+ The rotation which the object is being teleported to.
+
+ The emulated angular velocity of the interpolation target while interpolating to a tick where a teleport happened.
+ If null, the will be used.
+
+
+ If the artificial position for teleport interpolation should be computed backwards (artificial From, based on the
+ To state - the interpolation velocity) or forward (artificial To, based on the From state + interpolation velocity).
+
+
+
+
+ Teleports the object to the provided position and rotation while making the networked state aware
+ that the object was teleported and the view interpolation needs special handling.
+ The is immediately set to the transform's rotation field
+ and additional data is stored in order to interpolate the view object between the ticks.
+ See and for more details about why and how
+ the special interpolation handling is performed.
+
+ The position which the object is being teleported to.
+ The rotation which the object is being teleported to.
+
+ The emulated velocity of the interpolation target while interpolating to a tick where a teleport happened.
+ If null, the will be used.
+
+
+ The emulated angular velocity of the interpolation target while interpolating to a tick where a teleport happened.
+ If null, the will be used.
+
+
+ If the artificial position for teleport interpolation should be computed backwards (artificial From, based on the
+ To state - the interpolation velocity) or forward (artificial To, based on the From state + interpolation velocity).
+
+
+
+
+ Implements .
+ If overriding this method in an inheritor, the base method should be called.
+
+
+
+
+ Implements and, by default, calls
+ .
+ Behaviours that change the Transform state of this predict-spawned object should either be ordered
+ before NetworkTransform or call after doing so.
+ If overriding this method in an inheritor, the base method should be called.
+
+
+
+
+ Implements .
+ If overriding this method in an inheritor, the base method should be called.
+
+
+
+
+ Implements and, by default, calls Destroy on this GameObject.
+
+
+
+
+ Implements and does nothing by default.
+
+
+
+
+ If this object is a predicted spawn, caches the current transform
+ state for interpolated rendering and prediction error correction.
+
+
+
+
+ Number of words used by a instance on its networked data,
+ including all inherited fields.
+
+
+
+
+
+
+
+ Reads from this object's networked data field holding the interpolation velocity
+ (used on position teleports) using the default Runner position read accuracy.
+ See for more information on how this value is used.
+
+
+
+
+ Reads from a field holding the interpolation velocity (used on position teleports)
+ from the networked data pointed by using the default Runner position read accuracy.
+ See for more information on how this value is used.
+
+
+
+
+ Reads from a field holding the interpolation velocity (used on position teleports)
+ from the networked data pointed by with the defined .
+ See for more information on how this value is used.
+
+
+
+
+ Reads from this object's networked data field holding the interpolation angular velocity
+ (used on position teleports) using the default Runner position read accuracy.
+ See for more information on how this value is used.
+
+
+
+
+ Reads from a field holding the interpolation angular velocity (used on position teleports)
+ from the networked data pointed by using the default Runner position read accuracy.
+ See for more information on how this value is used.
+
+
+
+
+ Reads from a field holding the interpolation angular velocity (used on position teleports)
+ on the networked data pointed by with the defined .
+ See for more information on how this value is used.
+
+
+
+
+ Reads from this object's field holding the tick number where was last called.
+
+
+
+
+ Reads from the networked data pointer by
+ a field holding the tick number where was last called.
+
+
+
+
+ Reads from this object's field holding the tick number where was last called.
+
+
+
+
+ Reads from the networked data pointer by
+ a field holding the tick number where was last called.
+
+
+
+
+ Reads from this object's field holding information about the last call
+ and if should be interpolated forward (emulated To based on From state + interpolation) or backwards
+ (Emulated From based on To state - interpolation).
+
+
+
+
+ Reads from the networked data pointer by a field holding information about the last
+ call and if should be interpolated forward (emulated To based on From state + interpolation)
+ or backwards (Emulated From based on To state - interpolation).
+
+
+
+
+ Reads from this object's field holding information about the last call
+ and if should be interpolated forward (emulated To based on From state + interpolation) or backwards
+ (Emulated From based on To state - interpolation).
+
+
+
+
+ Reads from the networked data pointer by a field holding information about the last
+ call and if should be interpolated forward (emulated To based on From state + interpolation)
+ or backwards (Emulated From based on To state - interpolation).
+
+
+
+
+ Writes to this object's networked data field holding the interpolation velocity
+ (used on position teleports) using the default Runner position write accuracy.
+ See for more information on how this value is used.
+
+
+
+
+ Writes to a field holding the interpolation velocity (used on position teleports)
+ on the networked data pointed by using the default Runner position write accuracy.
+ See for more information on how this value is used.
+
+
+
+
+ Writes to a field holding the interpolation velocity (used on position teleports)
+ from the networked data pointed by with the defined .
+ See for more information on how this value is used.
+
+
+
+
+ Writes to this object's networked data field holding the interpolation angular velocity
+ (used on position teleports) using the default Runner position write accuracy.
+ See for more information on how this value is used.
+
+
+
+
+ Writes to a field holding the interpolation angular velocity (used on position teleports)
+ on the networked data pointed by using the default Runner position write accuracy.
+ See for more information on how this value is used.
+
+
+
+
+ Writes to a field holding the interpolation angular velocity (used on position teleports)
+ from the networked data pointed by with the defined .
+ See for more information on how this value is used.
+
+
+
+
+ Writes this object's field holding the tick number where was last called.
+
+
+
+
+ Writes to the networked data pointer by
+ a field holding the tick number where was last called.
+
+
+
+
+ Writes this object's field holding the tick number where was last called.
+
+
+
+
+ Writes to the networked data pointer by
+ a field holding the tick number where was last called.
+
+
+
+
+ Writes to this object's field holding information about the last call
+ and if should be interpolated forward (emulated To based on From state + interpolation) or backwards
+ (Emulated From based on To state - interpolation).
+
+
+
+
+ Writes the networked data pointer by , on a field holding information about the last
+ call and if should be interpolated forward (emulated To based on From state + interpolation)
+ or backwards (Emulated From based on To state - interpolation).
+
+
+
+
+ Writes to this object's field holding information about the last call
+ and if should be interpolated forward (emulated To based on From state + interpolation) or backwards
+ (Emulated From based on To state - interpolation).
+
+
+
+
+ Writes to this object's field holding information about the last call
+ and if should be interpolated forward (emulated To based on From state + interpolation) or backwards
+ (Emulated From based on To state - interpolation).
+
+
+
+
+ Struct that provides relevant parameters when interpolating a
+ view representation with position and rotation data between two
+ known states, referred as 'From' and 'To'.
+
+
+
+
+ Normalized factor that represents the exact point between From and To states
+ at which the view should be displayed.
+
+
+
+
+ Position value at the From state.
+
+
+
+
+ Position value at the To state.
+
+
+
+
+ Position value interpolated between From ()
+ and To () with factor .
+
+
+
+
+ Computed value for smooth correction of prediction error.
+ In order to apply it, add its value to the
+ before setting the result to the view transform.
+ The value will be if there is no prediction error
+ or is disabled.
+
+
+
+
+ Rotation value at the From state.
+
+
+
+
+ Rotation value at the To state.
+
+
+
+
+ Rotation value interpolated between From ()
+ and To () with factor .
+
+
+
+
+ Computed value for smooth correction of prediction error.
+ In order to apply it, multiply its value by the
+ before setting the result to the view transform.
+ The value will be if there is no prediction error
+ or is disabled.
+
+
+
+
+ If the Interpolation Target should be interpolated in world space or in the local space of a networked parent.
+ Interpolating in local space requires more computations, but gives more accurate visuals if/when a parent rotates.
+
+
+
+
+ The Transform object used for smooth view interpolation.
+ Should be a non-physics GameObject, typically a child of this GameObject or a separate object without colliders.
+
+
+
+
+ Overrides .
+ If overriding this method in an inheritor, the base method should be called.
+
+
+
+
+ Overrides .
+ If overriding this method in an inheritor, the base method should be called.
+
+
+
+
+ Overrides , computing the interpolated position and rotation values
+ according to the , updating the prediction error correction
+ and calling to apply the results to the .
+
+
+
+
+ Applies the interpolated position and rotation values and prediction error corrections
+ computed on to the .
+
+
+
+
+ Retrieves the world position values from the From and To states made
+ available in the interpolation , setting them
+ to and , respectively.
+
+
+
+
+ Retrieves the world rotation values from the From and To states made
+ available in the interpolation , setting them
+ to and , respectively.
+
+
+
+
+ Computes the interpolated transform parameters based on the interpolation data provided.
+
+
+
+
+ If the computed prediction error should be smoothly corrected on
+ the InterpolationTarget according to
+ the InterpolatedErrorCorrectionSettings.
+
+
+
+
+ A set of parameters to tune the interpolated correction of prediction
+ error to be applied on the InterpolationTarget.
+
+
+
+
+ Implements .
+ If overriding this method in an inheritor, the base method should be called.
+
+
+
+
+ Provides custom API and state replication for collider-based character controller movement (not related to Unity's CharacterController type).
+ Replicates both the internal state (Velocity, MaxSpeed, etc) and the Unity Transform data from the to all other peers.
+ Add this component to a GameObject to control movement and sync the position and/or rotation accurately, including client-side prediction.
+ Usage - For basic prototyping call the following methods:
+ NetworkCharacterController.Move()
+ NetworkCharacterController.Jump()
+ For more advanced uses, call only the movement query to get full surface movement data (),
+ and implement bespoke Move/Steering:
+ NetworkCharacterController.Jump()
+ A is required.
+ Not to be combined with either nor . These are mutually-exclusive options.
+
+
+
+
+ Collision and trigger callback interface that can optionally be passed to the movement query.
+ Common uses: bypass a contact, apply a contact force to the target (can also be achieved just by adding a kinematic Rigidbody to the Character Controller.
+
+
+
+
+ Called for all contacts with a non-trigger collider that penetrates more than .
+ data about the collision
+
+
+
+
+ Called for all contacts with a trigger collider. Not affected by .
+ data about the trigger collision
+
+
+
+
+ Hit data passed as parameters to methods.
+
+
+
+
+ The other game object collider in touch with the Character Controller.
+
+
+
+
+ The normal direction of the collision.
+
+
+
+
+ The penetration magnitude.
+
+
+
+
+ True in case this collision is considered a bump ().
+
+
+
+
+ What to do with collisions that are considered a bump.
+
+
+
+
+ Collision always affects this Character Controller, no matter the movement situation.
+
+
+
+
+ Automatically ignore collisions when character is standing.
+ (the Other NetworkCharacterController will still be affected and not allowed penetrate)
+
+
+
+
+ (Not implemented yet!)
+ Automatically ignore collisions when collision is from sides or back.
+ (the Other NetworkCharacterController will still be affected and not allowed penetrate)
+
+
+
+
+ Movement type computed by the movement query based on collisions and surface tangents.
+
+
+
+
+ No desired movement, and standing on a ground.
+
+
+
+
+ No ground or slope collisions (there may be a collision on the upper part).
+
+
+
+
+ No collision qualifies as grounded (angle between up and normal is smaller or equals to max slope).
+ At least one collision that qualifies as slope (angle between up and surface normal is larger than max slope).
+
+
+
+
+ There's a desired movement direction.
+ At least one collision qualifies as grounded (angle between up and normal is smaller or equals to max slope).
+
+
+
+
+ Configuration data used both by ComputeRawMovement and the prototype-grade Move and ComputeRawSteering methods.
+
+
+
+
+ Helps stabilize grounded state when walking over slightly bumpy geometry. Influences collision and trigger callbacks.
+
+
+
+
+ How much penetration to correct each frame (used only by Move and ComputeRawSteering)
+
+
+
+
+ for collisions with this Character Controller.
+
+
+
+
+ Only colliders in this layermask will be considered by the movement query.
+
+
+
+
+ Whereas to also compute triggers or not.
+
+
+
+
+ Should player keep control when in FreeFall (used only by Move and ComputeRawSteering).
+
+
+
+
+ When moving, velocity is incremented by this factor over time (used only by Move and ComputeRawSteering).
+
+
+
+
+ When stopped moving, velocity is decremented by this factor over time (used only by Move and ComputeRawSteering).
+
+
+
+
+ Vertical impulse applied when Jump() is called without an overhauling impulse passed (used only by Jump()).
+
+
+
+
+ Horizontal velocity is clamped by this magnitude (used only by Move and ComputeRawSteering).
+ This will only be used to initialize the corresponding MaxSpeed networked property, which can be changed in runtime.
+
+
+
+
+ Horizontal velocity is clamped by this magnitude (used only by Move and ComputeRawSteering).
+
+
+
+
+ Slope-fall velocity is clamped by this magnitude (used only by Move and ComputeRawSteering).
+
+
+
+
+ Non-networked gravity (used only by Move and ComputeRawSteering).
+ In case variable gravity is required, the recommendation is to implement custom Move and RawSteering methods.
+
+
+
+
+ Non-networked gravity (used only by Move and ComputeRawSteering).
+ In case variable gravity is required, the recommendation is to implement custom Move and RawSteering methods.
+
+
+
+
+ Result of a movement query.
+
+
+
+
+ Recommended type of movement based on found collisions.
+
+
+
+
+ Surface normal of the nearest collision.
+
+
+
+
+ Average normal of all collisions.
+
+
+
+
+ Surface normal of the closest collision that qualifies as ground, if any.
+
+
+
+
+ Surface tangent (recommended movement direction) in case there's a desired direction passed.
+
+
+
+
+ Surface tangent (recommended movement direction) in case of a slope (based on gravity).
+
+
+
+
+ Full correction vector to move out of collisions.
+
+
+
+
+ Magnitude of the penetration over the nearest normal.
+
+
+
+
+ True if at least one collision (not necessarily closest) qualifies as ground.
+
+
+
+
+ Total number of collisions found in this execution of the movement query.
+
+
+
+
+ The Collider object used for the movement query (to grab surface normals, penetration correction, etc).
+ Recommended to be a child of this Character Controller.
+
+
+
+
+ Internal use for automatic Area-of-Interest management.
+
+
+
+
+ Networked current grounded state (used only by Move and COmputeRawSteering)
+
+
+
+
+ Networked current jumped state (used only by Move and ComputeRawSteering to avoid clamping a jump speed when on the first subsequent query the collider still touches the ground)
+
+
+
+
+ Networked current max speed (used only by Move and ComputeRawSteering to clamp horizontal components of Velocity)
+
+
+
+
+ Networked current velocity (used only by Move and ComputeRawSteering to move the Character Controller)
+
+
+
+
+ .
+
+
+
+
+ Basic implementation of a jump impulse (immediately integrates a vertical component to Velocity).
+ Jump even if not in a grounded state.
+ Optional, if null Config.BaseImpulse will be used.
+
+
+
+
+ Basic implementation of a full Move.
+ Performs a movement query, uses its result to compute new Velocity, then applies penetration corrections + velocity integration into the transform position.
+ Does not change Rotation.
+ Intended movement direction, subject to movement query + acceleration.
+ Optional custom callbacks object.
+ Optional layermask. If not passed, the default one from Config will be used
+
+
+
+
+ Static query for surface movement data.
+ Does not modify any data on state (neither transform, nor self).
+ Intended movement direction. WIll be used to compute surface tangents.
+ Optional custom callbacks object.
+ Optional layermask. If not passed, the default one from Config will be used
+ The results
+
+
+
+
+ Enables syncing of Drag, AngularDrag and Mass values.
+
+
+
+
+ Replicates a Unity Rigidbody state from the to all other peers.
+ Add this component to a GameObject with a Rigidbody component.
+ A is required on this GameObject or a parent of this GameObject.
+
+
+
+
+ Reference of the Rigidbody associated with this .
+
+
+
+
+ Reads the TRS values from state buffer for this tick, and converts them to world space if using .
+
+
+
+
+ Replicates a Unity Rigidbody state from the to all other peers.
+ Add this component to a GameObject with a Rigidbody component.
+ A is required on this GameObject or a parent of this GameObject.
+
+
+
+
+ Reference of the Rigidbody associated with this .
+
+
+
+
+ Reads the TRS values from state buffer for this tick, and converts them to world space if using .
+
+
+
+
+ Replicates Unity parenting. To network parent changes, the new parent must either be null or have a or class derived from that on the GameObject,
+ and the GameObject being re-parented also requires a based Component.
+ A is required on this GameObject or a parent of this GameObject.
+
+
+
+
+ The Ptr offset for the memory position of the Parent info. The parenting info is 2 words (8 bytes).
+
+
+
+
+ The Ptr offset for the secondary teleport parent information. This parent is used by the lerp TO target leading up to the teleport.
+
+
+
+
+ Technically, an Anchor does NOT hold position data.
+ However, NetworkAreaOfInterestBehaviour used to inherit from this class and this was problematic.
+ Now, instead, it inherits from NetworkAreaOfInterestBehaviour, so we need to have a PositionWordOffset
+ and leave space for a position field, even though it does not use it.
+ It is possible for inheritors of this class (like NetworkTransform) to have a "negative" initial offset
+ and overlap with this position field.
+ This whole thing was necessary to not break backwards compatibility while the transform-related behaviors are refactored.
+
+
+
+
+ Gets the Ptr offset of the Position values in allocated memory.
+
+
+
+
+ The total number of words used by . Derived classes using allocated memory should start their Ptr offsets using this value.
+
+
+
+
+ The Transform object used for interpolation.
+ Should be a non-physics GameObject. Typically a child of this Rigidbody, or a separate object without colliders.
+ The runner/simulation with State Authority will not interpolate if target is null or the same GameObject as the Rigidbody,
+ as this will conflict with the PhysX simulation.
+
+
+
+
+
+ Used by the inspector gui to determine if the supplied transform is acceptable. If false will show a warning box.
+
+
+
+
+ The Transform object used for interpolation.
+ Should be a non-physics GameObject. Typically a child of this GameObject without colliders, or a separate GameObject without colliders.
+
+
+
+
+ EXPERIMENTAL: To improve interpolation of scaling, the interpolation target is detached from its .
+ Only check this if you are syncing scaling.
+ When re-parenting, this component's will re-parent to the parent's .
+
+
+
+
+ Indicates if Transform.parent will be synced. Parent syncing requires the parent of this object either be null or have a component.
+
+
+
+
+ Cached GameObject.transform reference.
+
+
+
+
+
+
+ Returns true if the parent has changed.
+
+
+
+ If using local space, tries to get the To and From parents.
+ If valid parents are found, they are forced to run Render() - as parents should always interpolate before children.
+
+ If a parent value has been serialized. Invalid means unknown parent.
+ If a parent value has been serialized. Invalid means unknown parent.
+ (From Parent, To Parent)
+
+
+
+ Replicates a Unity Transform state from the to all other peers.
+ Add this component to a GameObject to sync the position and/or rotation.
+ A is required on this GameObject or a parent of this GameObject.
+
+
+
+
+ The Ptr offset location of the position values in allocated memory.
+
+
+
+
+ The Ptr offset location of the rotation values in allocated memory.
+
+
+
+
+ The Ptr offset location of the local scale values in allocated memory.
+
+
+
+
+ The Ptr offset for the secondary teleport position information. This position is used as the lerp TO target leading up to the teleport.
+
+
+
+
+ The Ptr offset for the secondary teleport rotation information. This rotation is used as the lerp TO target leading up to the teleport.
+
+
+
+
+ The Ptr offset for the secondary teleport scale information. This scale is used as the lerp TO target leading up to the teleport.
+
+
+
+
+ The Ptr offset of the teleport increment value. Increases by one every tick a teleport occurs.
+
+
+
+
+ The total number of words used by . Derived classes using allocated memory should start their Ptr offsets using this value.
+
+
+
+
+ Gets the Ptr offset of the Position values in allocated memory.
+
+
+
+
+ Indicates if Scale should be included in Transform sync and interpolation (when enabled).
+
+
+
+
+ Select if the synced state uses World or Local position and rotation values.
+
+
+
+
+ The frame of the next Teleport action.
+
+
+
+
+ Stores the last UnityEngine.Time.time when interpolation was run for this component. Used to ensure interpolation is only run once per screen refresh.
+
+
+
+
+ Emulates the accuracy loss when writing and reading a Vector3 to/from a buffer, according to the given accuracies.
+
+
+
+
+ Emulates the accuracy loss when writing and reading a Quaternion to/from a buffer, according to the given accuracies.
+
+
+
+
+ Most recent unconsumed Teleport() command.
+
+
+
+
+ Teleport indicates that objects should not interpolate from the previous state to this new state.
+
+ Sets the position or rigidbody.position to this value prior to state sync.
+ If not null, Sets the position or rigidbody.rotation to this value prior to state sync.
+ If not null, Sets the localScale to this value prior to state sync.
+ Accepts a Quaternion, Euler (Vector3), or 2d Z value (float)
+ Resets velocity, angular velocity, and controller states to default if applicable.
+ Typically set to true if teleport is used for a respawn.
+ Sets the velocity after teleport. Ignored if this is not a Rigidbody or CharacterController. Overrides reset.
+ Sets the angular velocity after teleport. Ignored if this is not a Rigidbody. Overrides reset.
+
+
+
+ Captures the current state as the interpolation lerp TO target leading up to a teleport, and flags the next tick as a teleport.
+ Call this BEFORE making any TRS changes to the synced transform which represent the teleport.
+ For continuously moving rigidbodies, it is preferable to call the explicit Teleport() method.
+
+
+
+
+ Applies the latest unconsumed Teleport() call after the Forward simulation is complete, and before the TRS state is captured.
+
+
+
+
+ Base class for OrderBefore and OrderAfter attributes.
+
+
+
+
+ Fusion attribute used to indicate relative execution order of and derived scripts.
+ Any number of scripts can be specified.
+ Usage:
+ [OrderAfter(typeof(MySimulationBehaviour), typeof(MyNetworkBehaviour), etc)]
+
+
+
+
+
+ The array of scripts the attributed script should run before.
+
+
+
+
+ Fusion attribute that defines execution order of this script relative to specified other scripts.
+
+ The and scripts this attributed script should execute AFTER.
+
+
+
+ Fusion attribute used to indicate relative execution order of and derived scripts.
+ Any number of scripts can be specified.
+ Usage:
+ [OrderBefore(typeof(MySimulationBehaviour), typeof(MyNetworkBehaviour), etc)]
+
+
+
+
+
+ The array of scripts the attributed script should run before.
+
+
+
+
+ Fusion attribute that defines execution order of this script relative to specified other scripts.
+
+ The and scripts this attributed script should execute BEFORE.
+
+
+
+ This sorting class is meant to be released and garbage collected after use.
+
+
+
+
+ Returns sorted list of Types.
+
+
+
+
+
+ Locate all SimulationBehaviours, and add them to this system.
+
+
+
+
+ Alphabetize the initial list to create determinism in all following steps.
+
+
+
+
+ Create the node without searching for attributes yet.
+
+
+
+
+ Merge Before and Afters based on the logic: If A is Before B, and B is Before C, then A is Before C... etc
+ This allows obvious conflicts to be quickly spotted.
+
+
+
+
+
+ Converts linked OrderNode list to Type[]
+
+
+
+
+
+ Flags a Unity component class as a RunnerVisibilityNodes recognized type.
+ Will be included in handling, and will be found by component finds.
+
+
+
+
+ Flag component which indicates a NetworkObject has already been factored into a Runner's VisibilityNode list.
+
+
+
+
+ Identifies visible/audible components (such as renderers, canvases, lights) that should be enabled/disabled by .
+ Automatically added to scene objects and spawned objects during play if running in .
+ Additionally this component can be added manually at development time to identify specific Behaviours or Renderers you would like to restrict to one enabled copy at a time.
+
+
+
+
+ Types that fusion.runtime isn't aware of, which need to be found using names instead.
+
+
+
+
+ The peer runner that will be used if more than one runner is visible, and this node was manually added by developer (indicating only one instance should be visible at a time).
+
+
+
+
+ The peer/runner with input authority will be used if visible.
+
+
+
+
+ The server peer/runner will be used if visible.
+
+
+
+
+ The first client peer/runner will be used if visible.
+
+
+
+
+ If more than one runner instance is visible, this indicates which peer's clone of this entity should be visible.
+
+
+
+
+ The associated component with this node. This Behaviour or Renderer will be enabled/disabled when its parent is changed.
+
+
+
+
+ Guid is used for common objects (user flagged nodes that should only run in one instance), to identify matching clones.
+
+
+
+
+ Set to false to indicate that this object should remain disabled even when is set to true.
+
+
+
+
+ Sets the visibility state of this node.
+
+
+
+
+
+ Dictionary lookup for manually added visibility nodes (which indicates only one instance should be visible at a time),
+ which returns a list of nodes for a given LocalIdentifierInFile.
+
+
+
+
+ Find all component types that contribute to a scene rendering, and associate them with a component,
+ and add them to the runner's list of visibility nodes.
+
+
+
+
+
+
+ Force a complete visibility refresh on all runners. Typically used if a runner is destroyed/shutdown.
+
+
+
+
+ Reapplies a runner's IsVisibile setting to all of its registered visibility nodes.
+
+
+
+
+
+
+ Automatically adds a for each indicated component.
+ These indicated components will be limited to no more than one enabled instance when running in Multi-Peer mode.
+
+
+
+
+ If more than one runner instance is visible, this indicates which peer's clone of this entity should be visible.
+
+
+
+
+ Collection of components that will be marked for Multi-Peer mode as objects that should only have one enabled instance.
+
+
+
+
+ Prefix for the GUIDs of components which are added at runtime.
+
+
+
+
+ At runtime startup, this adds a for each component reference to this GameObject.
+
+
+
+
+ Finds visual/audio components on this GameObject, and adds them to the Components collection.
+
+
+
+
+ Finds visual/audio nested components on this GameObject and its children, and adds them to the Components collection.
+
+
+
+
+ Base class for a Fusion aware Behaviour (derived from UnityEngine.MonoBehavour).
+ Objects derived from this object can be associated with a and .
+ If a parent is found, this component will also be associated with that network entity.
+
+
+
+
+ The this component is associated with.
+
+
+
+
+ The this component is associated with. May be null if this GameObject does not have a .
+
+
+
+
+ Fusion FixedUpdate timing callback.
+
+
+
+
+ Post simulation frame rendering callback. Runs after all simulations have finished. Use in place of Unity's Update when Fusion is handling Physics.
+
+
+
+
+ Attribute for specifying which and this will execute in.
+ Can be used to limit execution to only Host, Server or Client peers, or to only execute on Resimulation or Forward ticks.
+ Usage:
+
+ [SimulationBehaviour(Stages = SimulationStages.Forward, Modes = SimulationModes.Server | SimulationModes.Host)]
+
+
+
+
+
+ Flag for which stages of the simulation loop this component will execute this script.
+
+
+
+
+ Flag for which indicated peers in will execute this script.
+
+
+
+
+ The default behaviour interfaces
+
+
+
+
+ Tools to replace GetComponent variants that respects nested objects.
+ These are used to find components of a NetworkedObjects without also finding components that belong to parent or child NetworkedObjects.
+
+
+
+
+ Find T on supplied transform or any parent. Unlike GetComponentInParent, GameObjects do not need to be active to be found.
+
+
+
+
+ Returns all T found between the child transform and its root. Order in List from child to parent, with the root/parent most being last.
+
+
+
+
+ Same as GetComponentInParent, but will always include inactive objects in search.
+ Will also stop recursing up the hierarchy when the StopOnT is found.
+
+
+
+
+ UNTESTED
+
+
+
+
+ Finds components of type T on supplied transform, and every parent above that node, inclusively stopping on node StopT component.
+
+
+
+
+ Same as GetComponentsInChildren, but will not recurse into children with component of the StopT type.
+
+
+
+
+ Same as GetComponentsInChildren, but will not recurse into children with any component of the types in the stopOn array.
+
+
+
+
+ Same as GetComponentsInChildren, but will not recurse into children with component of the StopT type.
+
+ Cast found components to this type. Typically Component, but any other class/interface will work as long as they are assignable from SearchT.
+ Find components of this class or interface type.
+ When this component is found, no further recursing will be performed on that node.
+
+
+
+ Find All instances of Component type in a scene. Attempts to respect the hierarchy of the scene objects to produce a more deterministic order.
+ This is a slower operation, and does produce garbage collection.
+
+
+
+
+ Find All instances of Component type in a scene. Attempts to respect the hierarchy of the scene objects to produce a more deterministic order.
+ This is a slower operation which should not be run every update.
+
+
+
+ Supplied list that will be populated by this find.
+ Whether results should include inactive components.
+
+
+
+ Find All instances of Component type in a scene. Attempts to respect the hierarchy of the scene objects to produce a more deterministic order.
+ This is a slow operation, and does produce garbage collection.
+
+ The type being searched for.
+ Casts all found objects to this type, and returns collection of this type. Objects that fail cast are excluded.
+
+ Whether results should include inactive components.
+
+
+
+ Find All instances of Component type in a scene. Attempts to respect the hierarchy of the scene objects to produce a more deterministic order.
+ This is a slower operation and should not be run every update.
+
+
+
+
+ Supplied list that will be filled with found objects.
+ Whether results should include inactive components.
+
+
+
+ Flag interface for custom NetworkInput structs.
+
+
+
+
+ Translates structs and represents them in Fusions's unsafe allocated memory.
+
+
+
+
+ Returns pointer to the struct data in memory.
+
+
+
+
+ Tries to export data as the indicated T struct.
+
+
+
+
+ Tries to import data from a struct.
+
+
+
+
+ Call this to batch-optimize any object-changes notified through
+ ssBVHNode.refit_ObjectChanged(..). For example, in a game-loop,
+ call this once per frame.
+
+
+
+
+ Call this when you wish to update an object. This does not update straight away, but marks it for update when Optimize() is called
+
+
+
+
+
+ initializes a BVH with a given nodeAdaptor, and object list.
+
+
+
+
+ tryRotate looks at all candidate rotations, and executes the rotation with the best resulting SAH (if any)
+
+
+
+
+
+ Represents a single lag-compensated collider.
+ Multiple component instances can be added anywhere in the hierarchy of a which includes a .
+
+
+
+
+ The collision geometry type for this .
+
+
+
+
+ When is set to , this defines the local-space geometry for narrow-phase checks.
+
+
+
+
+ When is set to , this defines the local-space geometry for narrow-phase checks.
+
+
+
+
+ This 's local-space offset from its GameObject position.
+
+
+
+
+ Reference to the top-level component for this .
+
+
+
+
+ The index of this hitbox in the array on .
+ The value is set by the root when initializing the nested hitboxes with .
+
+
+
+
+ Mask to access the state of this hitbox on the root.
+
+
+
+
+ Get or set the state of this Hitbox.
+ If a hitbox or its HitboxRoot are not active, it will not be hit by lag-compensated queries.
+
+
+
+
+ World-space position (includes Offset) of this .
+
+
+
+
+ Draws this hitbox gizmo on Unity editor.
+
+
+
+
+ Per-query options for lag compensation (both raycast and overlap).
+
+
+
+
+ Default, no extra options.
+
+
+
+
+ Add this to include checks against PhysX colliders.
+
+
+
+
+ Subtick accuracy query (exactly like seen by player).
+
+
+
+
+ Compute surface normal and distance of raycast hit.
+
+
+
+
+ Settings for lag compensation history.
+
+
+
+
+ Hitbox snapshot history size in ticks.
+
+
+
+
+ Broadphase BVH node expansion factor (default 20%) for leaf nodes, so updates are not too frequent.
+
+
+
+
+ Optional: tries to optimize broadphase BVH every update. May be removed in the future.
+
+
+
+
+ Enable gizmos for current BVH nodes.
+
+
+
+
+ Enable gizmos for hitbox history.
+
+
+
+
+ Server editor gizmo color for BVH nodes.
+
+
+
+
+ Client editor gizmo color for BVH nodes.
+
+
+
+
+ Editor gizmo color for history representations.
+
+
+
+
+ Entry point for lag compensated queries, which
+ maintains a history buffer, and provides lag compensated raycast and overlap methods.
+ Singleton instance is accessible through the property Runner.LagCompensation.
+ Usage - Call any of the following methods:
+ HitboxManager.Raycast()
+ HitboxManager.RaycastAll()
+ HitboxManager.PositionRotation()
+ HitboxManager.OverlapSphere()
+ These methods use the history buffer to perform a query against a state consistent with how the indicated perceived them locally.
+
+
+
+
+ Debug data from Broadphase BVH (tree depth).
+
+
+
+
+ Debug data from Broadphase BVH (total nodes count).
+
+
+
+
+ Debug data from lag compensation history (registered count).
+
+
+
+
+ Performs a lag-compensated raycast query against all registered hitboxes.
+ If the flag is indicated, query will also include PhysX colliders,
+ PhysX colliders are recommended for static geometry, rather than Hitboxes.
+
+ Raycast origin, in world-space
+ Raycast direction, in world-space
+ Raycast length
+ Player who "owns" this raycast. Used by the server to find the exact hitbox snapshots to check against.
+ Raycast results will be filled in here.
+ Only objects with matching layers will be checked against.
+ Opt-in flags to compute with sub-tick accuracy () and/or to include PhysX ().
+ Trigger interaction behavior when also querying PhysX.
+ true is something is hit
+
+
+
+ Performs a lag-compensated raycast query against all registered hitboxes.
+ If the flag is indicated, query will also include PhysX colliders,
+ PhysX colliders are recommended for static geometry, rather than Hitboxes.
+
+ Raycast origin, in world-space
+ Raycast direction, in world-space
+ Raycast length
+ Simulation tick number to use as the time reference for the lag compensation (use this for server AI, and similar).
+
+ Simulation tick number to use as the time reference for the lag compensation.
+ If provided, must be combined with the parameter for interpolation between and .
+ If is included on , this query will be resolved against hitbox colliders interpolated between the specified ticks.
+ Otherwise, only one of the two ticks will be considered, according to the rounded value of .
+
+
+ Interpolation value when querying between and .
+ If is included on , this query will be resolved against hitbox colliders interpolated between the specified ticks.
+ Otherwise, only one of the two ticks will be considered, according to the rounded alpha value.
+
+ Raycast results will be filled in here.
+ Only objects with matching layers will be checked against.
+ Opt-in flags to compute with sub-tick accuracy () and/or to include PhysX ().
+ Trigger interaction behavior when also querying PhysX.
+ true is something is hit
+
+
+
+ Performs a lag-compensated raycast query against all registered hitboxes.
+ If the flag is indicated, query will also include PhysX colliders,
+ PhysX colliders are recommended for static geometry, rather than Hitboxes.
+ Important: results are NOT sorted by distance.
+
+ Raycast origin, in world-space
+ Raycast direction, in world-space
+ Raycast length
+ Player who "owns" this raycast. Used by the server to find the exact hitbox snapshots to check against.
+ List to be filled with hits (both hitboxes and/or PhysX colliders, if included).
+ Only objects with matching layers will be checked against.
+ Opt-in flags to compute with sub-tick accuracy () and/or to include PhysX ().
+ Clear list of hits before filling with new ones (defaults to true).
+ Trigger interaction behavior when also querying PhysX.
+ total number of hits
+
+
+
+ Performs a lag-compensated raycast query against all registered hitboxes.
+ If the flag is indicated, query will also include PhysX colliders,
+ PhysX colliders are recommended for static geometry, rather than Hitboxes.
+ Important: results are NOT sorted by distance.
+
+ Raycast origin, in world-space
+ Raycast direction, in world-space
+ Raycast length
+ Simulation tick number to use as the time reference for the lag compensation (use this for server AI, and similar).
+
+ Simulation tick number to use as the time reference for the lag compensation.
+ If provided, must be combined with the parameter for interpolation between and .
+ If is included on , this query will be resolved against hitbox colliders interpolated between the specified ticks.
+ Otherwise, only one of the two ticks will be considered, according to the rounded value of .
+
+
+ Interpolation value when querying between and .
+ If is included on , this query will be resolved against hitbox colliders interpolated between the specified ticks.
+ Otherwise, only one of the two ticks will be considered, according to the rounded alpha value.
+
+ List to be filled with hits (both hitboxes and/or PhysX colliders, if included).
+ Only objects with matching layers will be checked against.
+ Opt-in flags to compute with sub-tick accuracy () and/or to include PhysX ().
+ Clear list of hits before filling with new ones (defaults to true).
+ Trigger interaction behavior when also querying PhysX.
+ total number of hits
+
+
+
+ Performs a lag-compensated overlap sphere query against all registered hitboxes.
+ If the flag is indicated, query will also include PhysX colliders,
+ PhysX colliders are recommended for static geometry, rather than Hitboxes.
+
+ Sphere center, in world-space
+ Sphere radius
+ Player who "owns" this overlap. Used by the server to find the exact hitbox snapshots to check against.
+ List to be filled with hits (both hitboxes and/or PhysX colliders, if included).
+ Only objects with matching layers will be checked against.
+ Opt-in flags to compute with sub-tick accuracy () and/or to include PhysX ().
+ Clear list of hits before filling with new ones (defaults to true).
+ Trigger interaction behavior when also querying PhysX.
+ total number of hits
+
+
+
+ Performs a lag-compensated overlap sphere query against all registered hitboxes.
+ If the flag is indicated, query will also include PhysX colliders,
+ PhysX colliders are recommended for static geometry, rather than Hitboxes.
+
+ Sphere center, in world-space
+ Sphere radius
+ The tick to be queried
+
+ Simulation tick number to use as the time reference for the lag compensation.
+ If provided, must be combined with the parameter for interpolation between and .
+ If is included on , this query will be resolved against hitbox colliders interpolated between the specified ticks.
+ Otherwise, only one of the two ticks will be considered, according to the rounded value of .
+
+
+ Interpolation value when querying between and .
+ If is included on , this query will be resolved against hitbox colliders interpolated between the specified ticks.
+ Otherwise, only one of the two ticks will be considered, according to the rounded alpha value.
+
+ List to be filled with hits (both hitboxes and/or PhysX colliders, if included).
+ Only objects with matching layers will be checked against.
+ Opt-in flags to compute with sub-tick accuracy () and/or to include PhysX ().
+ Clear list of hits before filling with new ones (defaults to true).
+ Trigger interaction behavior when also querying PhysX.
+ total number of hits
+
+
+
+ Performs a lag-compensated box overlap query against all registered hitboxes.
+ If the flag is indicated, query will also include PhysX colliders,
+ PhysX colliders are recommended for static geometry, rather than Hitboxes.
+
+ Center of the box in world space.
+ Half of the size of the box in each dimension.
+ Rotation of the box.
+ Player who "owns" this overlap. Used by the server to find the exact hitbox snapshots to check against.
+ List to be filled with hits (both hitboxes and/or PhysX colliders, if included).
+ Only objects with matching layers will be checked against.
+ Opt-in flags to compute with sub-tick accuracy () and/or to include PhysX ().
+ Clear list of hits before filling with new ones (defaults to true).
+ Trigger interaction behavior when also querying PhysX.
+ The total number of hits found.
+
+
+
+ Performs a lag-compensated box overlap query against all registered hitboxes.
+ If the flag is indicated, query will also include PhysX colliders,
+ PhysX colliders are recommended for static geometry, rather than Hitboxes.
+
+ Center of the box in world space.
+ Half of the size of the box in each dimension.
+ Rotation of the box.
+ The exact tick to be queried
+
+ Simulation tick number to use as the time reference for the lag compensation.
+ If provided, must be combined with the parameter for interpolation between and .
+ If is included on , this query will be resolved against hitbox colliders interpolated between the specified ticks.
+ Otherwise, only one of the two ticks will be considered, according to the rounded value of .
+
+
+ Interpolation value when querying between and .
+ If is included on , this query will be resolved against hitbox colliders interpolated between the specified ticks.
+ Otherwise, only one of the two ticks will be considered, according to the rounded alpha value.
+
+ List to be filled with hits (both hitboxes and/or PhysX colliders, if included).
+ Only objects with matching layers will be checked against.
+ Opt-in flags to compute with sub-tick accuracy () and/or to include PhysX ().
+ Clear list of hits before filling with new ones (defaults to true).
+ Trigger interaction behavior when also querying PhysX.
+ The total number of hits found.
+
+
+
+ Performs a lag-compensated query for a specific Hitbox position and rotation.
+
+ The target hitbox to be queried in the past
+ The tick to be queried
+
+ Simulation tick number to use as the time reference for the lag compensation.
+ If provided, must be combined with the parameter for interpolation between and .
+ If is requested, the query will return the hitbox state interpolated between the specified ticks.
+ Otherwise, only one of the two ticks will be considered, according to the rounded value of .
+
+
+ Interpolation value when querying between and .
+ If is requested, the query will return the hitbox state interpolated between the specified ticks.
+ Otherwise, only one of the two ticks will be considered, according to the rounded alpha value.
+
+ Will be filled with the hitbox position at the time of the tick
+ Will be filled with the hitbox rotation at the time of the tick
+ If the query should interpolate between ticks to reflect exactly what was seen on the client.
+
+
+
+ Performs a lag-compensated query for a specific Hitbox position and rotation.
+
+ The target hitbox to be queried in the past
+ Player who "owns" this overlap. Used by the server to find the exact hitbox snapshots to check against.
+ Will be filled with the hitbox position at the time of the tick
+ Will be filled with the hitbox rotation at the time of the tick
+ If the query should interpolate between ticks to reflect exactly what was seen on the client.
+
+
+
+ Internal use. Inserts (new ones) and updates all registered hitboxes into lag compensation history.
+
+
+
+
+ Unity Gizmos.
+
+
+
+
+ Root group container. Manages registering/unregistering hitboxes with the group, and defines the broadphase geometry for the group.
+ Broadphase is the initial rough query used by raycasts/overlaps/etc to find potential hit candidates,
+ which are then used in the final narrowphase query.
+
+
+
+
+ Get or set the state of this HitboxRoot.
+ For a hitbox to be hit by lag-compensated queries, both it and its HitboxRoot must be active.
+
+
+
+
+ The max number of hitboxes allowed under the same root.
+
+
+
+
+ The radius of the broadphase bounding sphere for this group.
+ Used by to insert/update lag compensated NetworkObjects into its BVH (bounding volume hierarchy) data structure.
+ Be sure this radius encompasses all children components (including their full ranges of animation motion).
+ We plan to offer an option to dynamically compute the bounding volume, but the performance trade of will still favor a hand-crafted radius.
+ Broadphase is the initial rough query used by raycasts/overlaps/etc to find potential hit candidates,
+ which are then used in the final narrowphase query.
+
+
+
+
+ Local-space offset of the broadphase bounding sphere from its transform position.
+ Adjust the and until the sphere gizmo (shown in the Unity Scene window)
+ encompasses all children components (including their full ranges of animation motion).
+ Broadphase is the initial rough query used by raycasts/overlaps/etc to find potential hit candidates,
+ which are then used in the final narrowphase query.
+
+
+
+
+ All Hitbox instances in hierarchy. Auto-filled at Spawned.
+
+
+
+
+ Reference to associated hitbox manager (from which lag compensated queries can be performed).
+
+
+
+
+ Finds child components, and adds them to the collection.
+
+
+
+
+ Sets to a rough value which encompasses all in their current positions.
+
+
+
+
+ Sets the state of a Hitbox instance under this root.
+ Both the hitbox and its root must be active in order for it to be hit by lag-compensated queries.
+
+ A hitbox instance under the hierarchy of this root.
+ If the hitbox should be activated or deactivated.
+ If the of the is outside the valid range.
+ In Debug configuration, if the is not part of this root.
+
+
+
+ Checks the state of a Hitbox instance under this root.
+ Both the hitbox and its root must be active in order for it to be hit by lag-compensated queries.
+
+ A hitbox instance under the hierarchy of this root.
+ True if the is part of this root and is active.
+ If the of the is outside the valid range.
+ In Debug configuration, if the is not part of this root.
+
+
+
+ Queries can hit either fusion's custom or Unity's standard Physx colliders.
+
+
+
+
+ Used when a raycast does not hit anything. Not used on overlaps.
+
+
+
+
+ is a Fusion .
+
+
+
+
+ is a Unity PhysX Collider.
+
+
+
+
+ Defines the collision geometry type of a .
+
+
+
+
+ [Future Use] to represent a disabled .
+
+
+
+
+ Geometry is a box, fill in Extents and (optional) Offset.
+
+
+
+
+ Geometry is a sphere, fill in Radius and (optional) Offset.
+
+
+
+
+ Defines a lag compensated query hit result.
+
+
+
+
+ Hit object source (PhysX or Fusion Hitboxes).
+
+
+
+
+ The Unity Game Object that was hit. Its data is not lag compensated.
+ This is either the 's or the 's gameObject,
+ depending on the object hit being a lag-compensated Hitbox or a regular Unity collider, respectively.
+
+
+
+
+ Surface normal (if requested) of the hit, at the lag compensated time.
+
+
+
+
+ Point of impact of the hit, at the lag compensated time.
+
+
+
+
+ Distance (if requested) to hit, at the lag compensated time.
+
+
+
+
+ Fusion's . Null in case the hit was on PhysX.
+
+
+
+
+ PhysX collider hit. Null in case hit is a Fusion .
+
+
+
+
+ HitboxBuffer will store all snapshots of the colliders into a circular buffer
+
+
+
+
+ HitboxContainer represents 1 snapshot of all containers in a given Tick
+
+
+
+
+ A Networked fusion type for degrees. This can be used with the , in RPCs, or in structs.
+
+
+
+
+ Clamps the current value to the supplied min-max range.
+
+
+
+
+ Returns the smaller of two supplied angles.
+
+
+
+
+ Returns the larger of two supplied angles.
+
+
+
+
+ Lerps between two angle values.
+
+
+
+
+ Returns a the value, clamped to the min-max range.
+
+
+
+
+ Alternative base class to Unity's MonoBehaviour.
+ This allows for components that work both in Unity, as well as the Photon relays.
+
+
+
+
+ Wrapper for Unity's GameObject.AddComponent()
+
+
+
+
+ Wrapper for Unity's GameObject.TryGetComponent()
+
+
+
+
+ Wrapper for Unity's GameObject.GetComponentInChildren()
+
+
+
+
+ Wrapper for Unity's GameObject.Destroy()
+
+
+
+
+ Delegate definition for changed callbacks.
+
+
+
+
+ Wrapping struct around changed behaviours which allows you to load old and new values.
+
+
+
+
+ The wrapped changed behaviour instance. The behaviour will have the new networked values.
+ Previous values can be obtained by calling changed.Behaviour.LoadOld(), then accessing the networked properties of changed.behaviour.
+
+
+
+
+ Tells the OnChanged callback system that this object needs to be re-scanned for changes after the current change scan is completed.
+ Call this is you are changing data inside an OnChange callback and can't wait for the next tick to execute until the callback is triggered.
+
+
+
+
+ Sets the changed behaviour to represent the previous state before the triggering change occurred.
+ To get previous values, call this before getting networked properties of .
+
+
+
+
+ Sets the to represent the changed state after the triggering change occurred.
+ This is the already default state of the behaviour when an OnChanged callback occurs,
+ and only needs to be called to undo a previous call in your callback handler.
+
+
+
+
+ Icon to be rendered on the component graphic header in the Unity inspector.
+
+
+
+
+ Color of the component graphic header in the Unity inspector. None indicates no header graphic should be used.
+
+
+
+
+ This may only be deterministic on 64 bit systems.
+
+
+
+
+
+
+ A set of parameters that tune the interpolated correction of prediction error on transform data.
+
+
+
+
+
+ A factor with dimension of 1/s (Hz) that works as a lower limit for how much
+ of the accumulated prediction error is corrected every frame.
+ This factor affects both the position and the rotation correction.
+ Suggested values are greater than zero and smaller than MaxRate.
+
+
+ E.g.: MinRate = 3, rendering delta time = (1/60)s: at least 5% (3 * 1/60) of the accumulated error
+ will be corrected on this rendered frame.
+
+
+ This threshold might not be respected if the resultant correction magnitude is
+ below the PosMinCorrection
+ or above the PosTeleportDistance, for the position error,
+ or above the RotTeleportRadians, for the rotation error.
+
+
+
+
+
+
+ A factor with dimension of 1/s (Hz) that works as a upper limit for how much
+ of the accumulated prediction error is corrected every frame.
+ This factor affects both the position and the rotation correction.
+ Suggested values are greater than MinRate
+ and smaller than half of a target rendering rate.
+
+
+ E.g.: MaxRate = 15, rendering delta time = (1/60)s: at maximum 25% (15 * 1/60) of the accumulated error
+ will be corrected on this rendered frame.
+
+
+ This threshold might not be respected if the resultant correction magnitude is
+ below the PosMinCorrection or
+ above the PosTeleportDistance, for the position error,
+ or above the RotTeleportRadians, for the rotation error.
+
+
+
+
+
+
+ The reference for the magnitude of the accumulated position error, in meters,
+ at which the position error will be corrected at the MinRate.
+ Suggested values are greater than PosMinCorrection
+ and smaller than PosBlendEnd.
+
+
+ In other words, if the magnitude of the accumulated error is equal to or smaller than this threshold,
+ it will be corrected at the MinRate.
+ If, instead, the magnitude is between this threshold and PosBlendEnd,
+ the error is corrected at a rate between MinRate
+ and MaxRate, proportionally.
+ If it is equal to or greater than PosBlendEnd,
+ it will be corrected at the MaxRate.
+
+
+ Note: as the factor is expressed in distance units (meters), it might need to be scaled
+ proportionally to the overall scale of objects in the scene and speeds at which they move,
+ which are factors that affect the expected magnitude of prediction errors.
+
+
+
+
+
+
+ The reference for the magnitude of the accumulated position error, in meters,
+ at which the position error will be corrected at the MaxRate.
+ Suggested values are greater than PosBlendStart
+ and smaller than PosTeleportDistance.
+
+
+ In other words, if the magnitude of the accumulated error is equal to or greater than this threshold,
+ it will be corrected at the MaxRate.
+ If, instead, the magnitude is between PosBlendStart and this threshold,
+ the error is corrected at a rate between MinRate
+ and MaxRate, proportionally.
+ If it is equal to or smaller than PosBlendStart,
+ it will be corrected at the MinRate.
+
+
+ Note: as the factor is expressed in distance units (meters), it might need to be scaled
+ proportionally to the overall scale of objects in the scene and speeds at which they move,
+ which are factors that affect the expected magnitude of prediction errors.
+
+
+
+
+
+
+ The value, in meters, that represents the minimum magnitude of the accumulated position error
+ that will be corrected in a single frame, until it is fully corrected.
+
+
+ This setting has priority over the resultant correction rate, i.e. the restriction
+ will be respected even if it makes the effective correction rate be different than
+ the one computed according to the min/max rates and start/end blend values.
+ Suggested values are greater than zero and smaller than PosBlendStart.
+
+
+ Note: as the factor is expressed in distance units (meters), it might need to be scaled
+ proportionally to the overall scale of objects in the scene and speeds at which they move,
+ which are factors that affect the expected magnitude of prediction errors.
+
+
+
+
+
+
+ The value, in meters, that represents the magnitude of the accumulated
+ position error above which the error will be instantaneously corrected,
+ effectively teleporting the rendered object to its correct position.
+ Suggested values are greater than PosBlendEnd.
+
+
+ This setting has priority over the resultant correction rate, i.e. the restriction
+ will be respected even if it makes the effective correction rate be different than
+ the one computed according to the min/max rates and start/end blend values.
+
+
+ Note: as the factor is expressed in distance units (meters), it might need to be scaled
+ proportionally to the overall scale of objects in the scene and speeds at which they move,
+ which are factors that affect the expected magnitude of prediction errors.
+
+
+
+
+
+
+ The reference for the magnitude of the accumulated rotation error, in radians,
+ at which the rotation error will be corrected at the MinRate.
+ Suggested values are smaller than RotBlendEnd.
+
+
+ In other words, if the magnitude of the accumulated error is equal to or smaller than this threshold,
+ it will be corrected at the MinRate.
+ If, instead, the magnitude is between this threshold and RotBlendEnd,
+ the error is corrected at a rate between MinRate
+ and MaxRate, proportionally.
+ If it is equal to or greater than RotBlendEnd,
+ it will be corrected at the MaxRate.
+
+
+
+
+
+
+ The reference for the magnitude of the accumulated rotation error, in radians,
+ at which the rotation error will be corrected at the MaxRate.
+ Suggested values are greater than RotBlendStart
+ and smaller than RotTeleportRadians.
+
+
+ In other words, if the magnitude of the accumulated error is equal to or greater than this threshold,
+ it will be corrected at the MaxRate.
+ If, instead, the magnitude is between RotBlendStart and this threshold,
+ the error is corrected at a rate between MinRate
+ and MaxRate, proportionally.
+ If it is equal to or smaller than RotBlendStart,
+ it will be corrected at the MinRate.
+
+
+
+
+
+
+ The value, in radians, that represents the magnitude of the accumulated
+ rotation error above which the error will be instantaneously corrected,
+ effectively teleporting the rendered object to its correct orientation.
+ Suggested values are greater than RotBlendEnd.
+
+
+ This setting has priority over the resultant correction rate, i.e. the restriction
+ will be respected even if it makes the effective correction rate be different than
+ the one computed according to the min/max rates and start/end blend values.
+
+
+
+
+
+ Fusion type for networking arrays. Capacity is fixed, and needs to be set the maximum possible number of entries.
+ Typical Usage:
+
+ [Networked, Capacity(4)]
+ NetworkArray<float> syncedArray => default;
+
+ Optional usage (for NetworkBehaviours ONLY - this is not legal in INetworkStructs):
+
+ [Networked, Capacity(4)]
+ NetworkArray<int> syncedArray { get; } = MakeInitializer(new int[] { 1, 2, 3, 4 });
+
+ Usage for modifying data:
+
+ var array = syncedArray;
+ array.Set(123);
+ array[0] = 456;
+
+
+ T can be a primitive, or an INetworkStruct.
+
+
+
+ The fixed size of the array.
+
+
+
+
+ Indexer of array elements.
+
+
+
+
+ NetworkArray constructor.
+
+
+
+
+ Returns the array value at supplied index.
+
+
+
+
+ Sets the array value at the supplied index.
+
+
+
+
+ Allocates a new array and copies values from this array. For a non-alloc alternative use .
+
+
+
+
+ Adds each value to the supplied List. This does not clear the list, so values will be appended to the existing list.
+
+
+
+
+ Copies values to the supplied array.
+
+
+ If true, this method will throw an error if the supplied array is smaller than this . If false, will only copy as many elements as the target array can hold.
+
+
+
+ Copies a range of values in from a supplied source array.
+
+ Starting index of elements in source.
+ Number of sequential source elements to copy in.
+
+
+
+ Copies a range of values in from a supplied source list.
+
+ Starting index of elements in source.
+ Number of sequential source elements to copy in.
+
+
+
+ Returns the elements of this array as a string, with value separated by \n characters. Specifically for use in the Unity inspector.
+ This is private and only is found by NetworkBehaviourEditor using reflection, so do not rename this method.
+
+
+
+
+ Fusion type for networking Dictionaries. Capacity is fixed, and needs to be set the maximum possible number of entries.
+ Typical Usage:
+
+ [Networked, Capacity(10)]
+ NetworkDictionary<int, float> syncedDict => default;
+
+ Usage for modifying data:
+
+ var dict = syncedDict;
+ dict.Add(5, 123);
+ dict[5] = 456;
+ dict.Remove(5);
+
+
+ Key can be a primitive, or an INetworkStruct.
+ Value can be a primitive, or an INetworkStruct.
+
+
+
+ Current number of key/value entries in the Dictionary.
+
+
+
+
+ The maximum number of entries this dictionary may contain.
+
+
+
+
+ Key indexer. Gets/Sets value for specified key.
+
+
+
+
+ Remove all entries from the Dictionary, and clear backing memory.
+
+
+
+
+ Returns true if the Dictionary contains an entry for the given key.
+
+
+
+
+ Returns true if the Dictionary contains an entry value which compares as equal to given value.
+
+ The value to compare against.
+ Specify custom IEqualityComparer to be used for compare.
+
+
+
+ Returns the value for the given key. Will throw an error if the key is not found.
+
+
+
+
+ Sets the value for the given key. Will add a new key if the key does not already exist.
+
+
+
+
+ Adds a new key value pair to the Dictionary. If the key already exists, will return false.
+
+
+
+
+ Attempts to get the value for a given key. If found, returns true.
+
+ The key to remove.
+ Returns value of removed item. Returns default value if key did not exist.
+ Returns true if key was found.
+
+
+
+ Remove entry from Dictionary.
+
+
+ Returns true if key was found.
+
+
+
+ Removes entry from Dictionary. If successful (key existed), returns true and the value of removed item.
+
+ The key to remove.
+ Returns value of removed item. Returns default value if key did not exist.
+ Returns true if key was found.
+
+
+
+ Fusion type for networking LinkedLists. Capacity is fixed, and needs to be set the maximum possible number of entries.
+ Typical Usage:
+
+ [Networked, Capacity(10)]
+ NetworkLinkedList<int> syncedLinkedList => default;
+
+ Optional usage (for NetworkBehaviours ONLY - this is not legal in INetworkStructs):
+
+ [Networked, Capacity(4)]
+ NetworkLinkedList<int> syncedLinkedList { get; } = MakeInitializer(new int[] { 1, 2, 3, 4 });
+
+ Usage for modifying data:
+
+ var list = syncedLinkedList;
+ list.Add(123);
+ list[0] = 456;
+ list.Remove(0);
+
+
+ T can be a primitive, or an INetworkStruct.
+
+
+
+ Returns the current element count.
+
+
+
+
+ Returns the max element count.
+
+
+
+
+ Element indexer.
+
+
+
+
+ Removes and clears all list elements.
+
+
+
+
+ Returns true if the value already exists in the list.
+
+
+
+
+ Returns true if the value already exists in the list.
+
+
+
+
+ Sets the value at supplied index.
+
+
+
+
+ Returns the value at supplied index.
+
+
+
+
+ Returns the index with this value. Returns -1 if not found.
+
+
+
+
+ Returns the index with this value. Returns -1 if not found.
+
+ Specify custom IEqualityComparer to be used for compare.
+
+
+
+ Removes the first found element with indicated value.
+
+
+
+
+ Removes the first found element with indicated value.
+
+
+
+
+ Adds a value to the end of the list.
+
+
+
+
+
+ PCG32 random generator, 16 bytes in size.
+ http://www.pcg-random.org
+
+
+
+
+ 0x1.00000001p-32 aka 0x3df0000000100000
+
+
+
+
+ 0x1p-32 aka 0x3df0000000000000
+
+
+
+
+ 0x1.000002p-24 aka 0x33800001
+
+
+
+
+ 0x1p-24 aka 0x33800000
+
+
+
+
+ Returns a random Double within [0, 1] (range is inclusive).
+
+
+
+
+
+ Returns a random Double within [0, 1) (range is exclusive).
+
+
+
+
+
+ Returns a random Single within [0, 1] (range is inclusive).
+
+
+
+
+
+ [0, 1)
+ Returns a random Single within [0, 1) (range is exclusive).
+
+
+
+
+
+ [int.MinValue, int.MaxValue]
+
+
+
+
+
+ [0, uint.MaxValue]
+
+
+
+
+
+ Returns a random Double within [minInclusive, maxInclusive] (range is inclusive).
+ If minInclusive is greater than maxInclusive, then the numbers are automatically swapped.
+
+
+
+
+ Returns a random Single within [minInclusive, maxInclusive] (range is inclusive).
+ If minInclusive is greater than maxInclusive, then the numbers are automatically swapped.
+
+
+
+
+ Returns a random Int32 within [minInclusive, maxExclusive) (range is exclusive).
+ If minInclusive and maxExclusive are equal, then the "exclusive rule" is ignored and minInclusive will be returned.
+ If minInclusive is greater than maxExclusive, then the numbers are automatically swapped.
+
+
+
+
+ Returns a random Int32 within [minInclusive, maxInclusive] (range is inclusive).
+ If minInclusive is greater than maxInclusive, then the numbers are automatically swapped.
+
+
+
+
+ Returns a random UInt32 within [minInclusive, maxExclusive) (range is exclusive).
+ If minInclusive and maxExclusive are equal, then the "exclusive rule" is ignored and minInclusive will be returned.
+ If minInclusive is greater than maxExclusive, then the numbers are automatically swapped.
+
+
+
+
+ Returns a random UInt32 within [minInclusive, maxInclusive] (range is inclusive).
+ If minInclusive is greater than maxInclusive, then the numbers are automatically swapped.
+
+
+
+
+ Fixed-size UTF32 string. All operations are alloc-free, except for converting to .
+
+
+
+
+
+ Maximum UTF32 string length.
+
+
+
+
+ Converts to/from regular UTF16 string. Setter is alloc-free. Use
+ to get possibly alloc-free conversion.
+
+
+
+
+ Number of UTF32 scalars. It is equal or less than or the length
+ of , because those use UTF16 encoding, which needs two characters to encode
+ some values.
+
+
+
+
+ Returns UTF32 scalar at position. To iterate over characters,
+ use .
+
+
+
+
+
+
+ Checks if is equivalent and if not converts to UTF16 and
+ stores the result in .
+
+
+
+ False if no conversion was performed, true otherwise.
+
+
+
+ Converts to UTF32 string and stores it internally.
+
+
+ False if was too long to fit and had to be trimmed.
+
+
+
+ Calculates the length of the equivalent UTF16 string.
+
+
+
+
+
+ Represents a Fusion player.
+
+ The PlayerRef, in contrast to the player index, is 1-based. The reason is that default(PlayerRef) will return a "null/invalid" player ref struct for convenience. There are automatic cast operators that can cast an int into a PlayerRef.
+
+ default(PlayerRef), internally a 0, means NOBODY
+ PlayerRef, internally 1, is the same as player index 0
+ PlayerRef, internally 2, is the same as player index 1
+
+
+
+
+ None player
+
+
+
+
+ If this player index is valid
+
+
+
+
+ Raw encoded value
+
+
+
+
+ Player id this player ref represents
+
+
+
+
+ Note: You are passing the bitcount of the length, not the length. Normal values will be in the 5-8 range (32 - 256).
+ This RingArray is meant to be fast, so it only uses counts of 2^x.
+
+ Element count will be 2 to this power.
+
+
+
+ Indexer. Runs a fast mod on the frameId to make it conform to the ring array.
+
+
+
+
+
+ Wrapper class which unifies rotation handling of Quaternion, Euler or Z-only (used by 2D).
+ Can store a Quaternion, Euler or Z-axis (for 2d rotation), and implicitly casts between those types.
+
+
+
+
+ Indicates of the stored rotation is a Quaternion or Euler type.
+
+
+
+
+ Returns the rotation as a Quaternion. If original type was a Euler or Rotation Z-axis only, that is converted to a Quaternion.
+
+
+
+
+ Returns the rotation as a Euler. If original type was Quaternion, that is converted to a Euler.
+
+
+
+
+ Returns the z-axis value of the rotation. If original type was Quaternion, first converts to a Euler then returns the z value of that Euler.
+
+
+
+
+ None scene
+
+
+
+
+ If this scene index is valid
+
+
+
+
+ The unique identifier for a network entity.
+
+
+
+
+ Offset for the bitflag that indicates of this tick is predicted or final.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ String conversion specifically for use in prefixing names of GameObjects.
+
+
+
+
+
+ The primary Fusion component for networked GameObject entities.
+ This stores the object's network identity and manages the object's state and input authority.
+
+
+
+
+ The unique identifier for this network entity.
+
+
+
+
+ Signal that this comes from a Resume Spawn
+
+
+
+
+ The this entity is associated with.
+
+
+
+
+ How Object Interest is determined for this object.
+ Only applicable to mode, and if is enabled.
+
+
+
+
+ All players will start with these Interest Groups explicitly enabled for this object.
+ Use on the server
+ to explicitly add or remove a player's interest in groups for this .
+
+
+
+
+ If the player with State Authority for this Object leaves the room, this Object will automatically be destroyed on the network.
+ Only applicable to Shared Mode.
+
+
+
+
+ When enabled, State Authority over this Object can be taken by a player, without the current State Authority player first releasing authority.
+ If disabled, will fail if another player currently has State Authority, and has not called .
+ Only applicable to Shared Mode.
+
+
+
+
+ Specifies the component to used to determine this players position for Area Of Interest checks.
+ If left null, will use the first found root/child instance of on the Object.
+
+
+
+
+ Last tick this object received an update. Only available for .
+
+
+
+
+ Flags used for network object prefabs and similar
+
+
+
+
+ The GUID for this prefab or scene object, which is set at development time. Used to reference this as a spawnable object.
+ All spawned instances of this object will retain this GUID. Use for the unique ID of network entries.
+
+
+
+
+
+
+
+
+
+ Array of initial child nested entities, that are children of this Object.
+
+
+
+
+ Array of all s associated with this network entity.
+
+
+
+
+ Array of all s associated with this network entity.
+ This does not include derived classes, as they are stored in .
+
+
+
+
+ The ID + Unity GameObject name for this entity.
+
+
+
+
+ Returns if this network entity existed as part of a scene, rather than having been dynamically spawned.
+
+
+
+
+ Returns if this network entity is associated with its , and that runner is not null.
+
+
+
+
+ If this is a predicted spawned object
+
+
+
+
+ If this is a predicted spawned object
+
+
+
+
+ If this object is inserted into the simulation
+
+
+
+
+ Returns the that has Input Authority over this network entity.
+ PlayerRefs are assigned in order from 0 to MaxPlayers-1 and are re-used as players join and leave.
+ The only caveat is that the server player (if one exists), always gets the last index no matter how many clients are connected.
+
+
+
+
+ Returns the that has State Authority over this network entity.
+ PlayerRefs are assigned in order from 0 to MaxPlayers-1 and are re-used as players join and leave.
+ The only caveat is that the server player (if one exists), always gets the last index no matter how many clients are connected.
+
+
+
+
+ The layers this object exists in for area of interest queries. This is an integer bitmask not a layer index.
+
+
+
+
+ Returns if is the designated Input Authority for this network entity.
+
+
+
+
+ Returns if is the designated State Authority for this network entity.
+
+
+
+
+ Returns if is neither the Input nor State Authority for this network entity.
+
+
+
+
+ Toggles if this NetworkObject is included in the , which will include the prefab in builds as a Spawnable object.
+
+
+
+
+ Gets a bitmask of flags, representing the current local authority over this .
+
+
+
+
+ Gets a bitmask of flags, representing the supplied RPC authority for this .
+
+
+
+
+ Sets which has Input Authority for this Object.
+
+
+
+
+ Removes input authority from whichever player has it for this object. Only valid when called on a Host or Server peer.
+
+
+
+
+ Add or remove specific player interest in this NetworkObject.
+
+ must be set to .
+
+
+
+
+
+
+
+ Copies the entire State from another
+
+ NetworkObject to copy the State from
+
+
+
+ Add or remove Player's interest in a specific named Interest Group for this .
+
+ must be set to .
+
+
+
+
+
+ A decoupled prefab reference. Internally stored as a GUID.
+
+
+
+
+ Network meta information for a .
+
+
+
+
+ The id of the root most , if this is nested.
+
+
+
+
+ Represents a base class for "prefab assets" - assets that point to a prefab and provide a way to load them.
+
+
+
+
+ Actual Unity prefab guid. If out of sync with the prefab's, it will be updated at first opportunity.
+
+
+
+
+ Placeholder kept after a prefab is removed or made not spawnable. If the prefab is restored/made spawnable again,
+ the type of this asset will change to .
+
+
+
+
+ Header data for this object
+
+
+
+
+ If we have a header or not
+
+
+
+
+ Data pointer to the first word of this objects data block
+
+
+
+
+ Adds prefab to the table and assigns it an id.
+
+
+ The id assigned to the prefab (if returns true) or id of the prefab with the same guid that has already been added.
+ True if the prefab prefab had unique guid and was added.
+
+
+
+ Flag constants for input and state authority.
+
+
+
+
+ Flags a method as being a networked Remote Procedure Call.
+ Only usable in a NetworkBehaviour.
+ Calls to this method (from the indicated allowed ) will generate a network message,
+ which will execute the method remotely on the indicated .
+ The RPC method can include an empty argument, that will include meta information about the RPC on the receiving peer.
+ Example:
+
+ | [Rpc(RpcSources.All, RpcTargets.All, InvokeLocal = false, InvokeResim = false, Channel = RpcChannel.Reliable, TickAligned = true)]
+ | public void RPC_Configure(NetworkObject no, string name, Color color, RpcInfo info = default) { }
+
+ To target a specific Player, use the :
+
+ | [Rpc]
+ | public void RpcFoo([RpcTarget] PlayerRef targetPlayer) {}
+
+ Use as a return value to access meta information about the RPC send attempt, such as failure to send reasons, message size, etc.
+
+ Non-static RPCs are only valid on a .
+ Static RPCs can be implemented on s, and do not require a instance.
+ Static RPC require the first argument to be NetworkRunner.
+
+ Static RPC Example:
+
+ | [Rpc]
+ | public static void RPC_Configure(NetworkRunner runner) { }
+
+
+
+
+
+ The legal types that can trigger this Rpc. Cast to int.
+
+
+
+
+ The types that will receive and invoke this method. Cast to int.
+
+
+
+
+ Indicates if the method should be called locally (on the RPC caller). This happens immediately.
+
+
+
+
+ Indicates if this RPC will execute during resims, or only once on the first execution of the associated tick.
+
+
+
+
+ Specifies which RpcChannel to use.
+
+
+
+
+ Indicates if this RPC's execution will be postponed until the local simulation catches up with the sender's Tick number.
+ Even if set to false, the order of Rpcs is always preserved. Rpcs are deferred until all preceding Rpcs have
+ executed.
+
+
+
+
+ Options for when the game is run in mode and RPC is invoked by the host.
+
+
+
+ The legal types that can trigger this Rpc
+ The types that will receive and invoke this method
+
+
+
+ Rpc order preserved, delivery verified, resend in case of a failed delivery.
+
+
+
+
+ Rpc order preserved, delivery not verified, no resend attempts.
+
+
+
+
+ Options for when the game is run in mode and RPC is invoked by the host.
+
+
+
+
+ If host invokes RPC will be set to (default).
+
+
+
+
+ If host invokes RPC will be set to the host's local player.
+
+
+
+
+ May be used as an optional return value. Contains meta data about the RPC send, such as failure to send reasons, culling, message size, etc.
+ Example:
+
+ | [Rpc]
+ | public RpcInvokeInfo RpcFoo(int value) {
+ | return default;
+ | }
+ |
+ | public override void FixedUpdateNetwork() {
+ | var info = RpcFoo();
+ | Debug.Log(info);
+ | }
+
+
+
+
+
+ Results for the local RPC Invocation of the RPC method.
+
+
+
+
+ RPC has been invoked locally.
+
+
+
+
+ Not invoked locally because is false.
+
+
+
+
+ Not invoked locally because is false and simulation stage is
+
+
+
+
+ Not invoked because source current authority does not match flags set in
+
+
+
+
+ Not invoked because target player is local and this current authority does not match flags set in
+
+
+
+
+ Not invoked because target player is not local.
+
+
+
+
+ Results for the RPC message send operation. Note: Some individual targets may be culled even if the send operation succeeds.
+ Information about culled targets can be found in .
+
+
+
+
+ RPC has been sent. Check for details.
+
+
+
+
+ Send culled because is false.
+
+
+
+
+ Send culled because source current authority does not match flags set in
+
+
+
+
+ Send culled because there are no active connections.
+
+
+
+
+ Send culled because target player does not exist.
+
+
+
+
+ Send culled because target player is local and is false.
+
+
+
+
+ RPC send operation result information.
+
+
+
+
+ Result flags for the RPC send operation.
+
+
+
+
+ The size of the RPC message.
+
+
+
+
+ Collection of the targets which were sent this RPC message.
+
+
+
+
+ Collection of the targets which were failed to be sent this RPC message.
+ Reason for failure can be found in the flags.
+
+
+
+
+ RPC attribute used to indicate a specific target player for an RPC when sending from one player to another.
+ RPC is sent to the server, and then is forwarded to the specified player.
+ Usage:
+
+ | [Rpc]
+ | public void RpcFoo([RpcTarget] PlayerRef targetPlayer) { }
+
+
+
+
+
+ Companion component for . Exposes as UnityEvents,
+ which can be wired up to other components in the inspector.
+
+
+
+
+
+ The core Fusion config file that is shared with all peers at startup.
+
+
+
+
+ Options for running one or multiple peers in one Unity instance.
+ Multiple is useful for testing multiple players/clients inside of the Unity editor without needing to build executables.
+ Each peer is assigned its own independent physics scene and instance.
+
+
+
+
+ This is the normal use case, where every build and the editor run a single server, host or client peer.
+
+
+
+
+ This is the optional use case, which allows running multiple peers in the Unity editor, or in a build.
+
+
+
+
+ Options for which Physics engines Fusion will use for simulations.
+
+
+
+
+ The Unity PhysX simulation is used, but auto-simulation is disabled and simulations are controlled by Fusion.
+
+
+
+
+ The Unity PhysX2D simulation is used, but auto-simulation is disabled and simulations are controlled by Fusion.
+
+
+
+
+ Fusion preforms no simulation calls.
+
+
+
+
+ Options for how physics is simulated on clients.
+
+ - Clients do not predict remote objects, and render in their remote time frame (relative past).
+ - Clients predict remote objects and have options for rendering them in local and/or remote time frames.
+
+
+
+
+
+ The server simulates and sends states to all clients. Clients do not attempt prediction and will render remote objects in the server (relative past) time frame.
+
+
+
+
+ The server simulates and sends states to all clients. Clients simulate remote states forward into the local time frame (prediction).
+
+
+
+
+ Spawn Modes while Scene is being loaded
+
+
+
+
+ Block all Spawns
+
+
+
+
+ Allow all Spawns
+
+
+
+
+ Queue spawn for when Scene is fully loaded
+
+
+
+
+ Delta Compression Implementations
+
+
+
+
+ Default Implementation
+
+
+
+
+ Burst Implementation
+
+
+
+
+ Debug Implementation
+
+
+
+
+ Default file name for the asset
+
+
+
+
+ Reference for the default
+
+
+
+
+ Current Type ID
+
+
+
+
+ Current version
+
+
+
+
+ Current version
+
+
+
+
+ Current Type ID
+
+
+
+
+ Setting for whether multiple peers can run per Unity instance (typically to allow easy testing of multiple peers inside of the editor).
+
+
+
+
+ Setting for which physics engine Fusion will simulate with.
+
+
+
+
+ Setting for which Fusion will use in server or host mode. Not used in shared mode.
+
+
+
+
+ Use lag compensation. Not used in shared mode.
+
+
+
+
+ Advanced lag compensation buffer settings.
+
+
+
+
+ Current
+
+
+
+
+ Current type
+
+
+
+
+ Signal if the callbacks should be invoked in Batch Mode
+
+
+
+
+ Max number of allowed
+
+
+
+
+ Signal if the of the should be included on the name of the
+
+
+
+
+ Enable the Support for Host Migration
+
+
+
+
+ Delay in seconds between each time the Host sends a Snapshot
+ of the current Simulation State to be used in the Host Migration
+
+
+
+
+ Reference for the current
+
+
+
+
+ Simulation Settings
+
+
+
+
+ Interpolation Settings
+
+
+
+
+ Network Settings
+
+
+
+
+ Settings for simulating network conditions of latency and loss.
+
+
+
+
+ Heap Settings
+
+
+
+
+ The named global accuracies used by this project.
+
+
+
+
+ Names of assemblies Fusion is going to weave. Not case sensetive.
+
+
+
+
+ Use Fusion.SerializableDictionary to store [Networked] dictionary properties initial value. If unchecked,
+ the weaver will emit System.Generic.Dictionary instead - a type that's not Unity-serializable, but custom
+ serializers (e.g. Odin) may support it.
+
+
+
+
+ If set, the weaver will add a check to all [Networked] properties on each
+ to verify if owing has been attached to.
+
+
+
+
+ Make a copy of the
+
+
+
+
+ ToString
+
+
+
+
+ Serialize the a NetworkProjectConfig into a JSON
+
+ NetworkProjectConfig reference
+ JSON String
+
+
+
+ Deserialize the NetworkProjectConfig based on the JSON Serialized version sent by the Room's Creator
+
+ JSON with a serialized NetworkProjectConfig
+ NetworkProjectConfig reference deserialized
+
+
+
+ Remove un-unecessary data from serialized version of
+
+
+
+
+ Get the version information for the Fusion.Runntime.dll.
+
+
+
+
+ Convert between to
+
+
+
+
+ Manages and references the current instance of
+
+
+
+
+ Get the version information for the Fusion.Runntime.dll.
+
+
+
+
+ Path to asset (created on demand if non-existent), which will serve as a host
+ for lightweight assets. They can be used to reference prefabs
+ alternatively to and regular references,
+ offering the best of two worlds: decoupling and Find References support.
+
+ Suggested path: Assets/Photon/Fusion/User/NetworkPrefabAssetCollection.asset
+
+
+
+
+ An auto-generated list containing source information (e.g. Resource path, address, static reference) for all the prefabs that can be spawned, i.e. the ones with
+ component and enabled.
+
+ Additional prefabs can registered at runtime with .
+
+
+
+
+ Represents a Server or Client Simulation.
+
+
+ Host Migration related code in order to get a copy of the Simulation State
+
+
+ All Scene related API and fields
+
+
+
+
+ Enumeration of Fusion.Runtime.dll options.
+
+
+
+
+ Use the Debug version of the Fusion.Runntime.dll.
+
+
+
+
+ Use the Debug version of the Fusion.Runntime.dll.
+
+
+
+
+ Initialization stages of Fusion
+
+
+
+
+ Runner is about to start
+
+
+
+
+ Runner is running
+
+
+
+
+ Runner is shutdown
+
+
+
+
+ Get Fusion.Runtime.dll build type.
+
+
+
+
+ Delegate type for on before spawned callback
+
+
+
+
+ Stores the Shutdown parameters used when requesting a Shutdown from inside a Runner Callback
+
+
+
+
+ Get enumerator for the collection of all s.
+
+
+
+
+
+ Completion Source for the startup Photon Cloud Operations
+
+
+
+
+ Change the visibility of this NetworkRunner when running in Multiple Peer Mode
+
+
+
+
+ Indicates if this is collecting .
+
+
+
+
+ The current topology used
+
+
+
+
+ Returns the for this .
+
+
+
+
+ Returns the flags for The type of network peer the associated represents.
+
+
+
+
+ Returns the current stage of this .
+
+
+
+
+ Returns the fixed tick time interval. Derived from the .
+
+
+
+
+ The time the current State represents (the most recent FixedUpdateNetwork simulation).
+ Use as an equivalent to Unity's Time.fixedTime.
+ Time is relative to Tick 0 (which represents Time 0f).
+
+
+
+
+ The current time (current State.Time + Simulation.DeltaTime) for predicted objects (objects in the local time frame).
+ Use as an equivalent to Unity's Time.time.
+ Time is relative to Tick 0 (which represents Time 0f).
+
+
+
+
+ The current time (current State.Time + Simulation.DeltaTime) for non-predicted objects (objects in a remote time frame).
+ Use as an equivalent to Unity's Time.time.
+ Time is relative to Tick 0 (which represents Time 0f).
+
+
+
+
+ Returns if this is valid and running.
+
+
+
+
+ If the runner is shutdown
+
+
+
+
+ Are we dealing with a regular, planned shutdown.
+
+
+
+
+ If the runner is pending to start
+
+
+
+
+ Returns if this represents a Client connection.
+
+
+
+
+ Returns if this Client is currently connected to a Remote Server
+
+
+
+
+ Returns if this represents a Server connection.
+
+
+
+
+ Returns true if this runner represents a Client or Host. Dedicated servers have no local player and will return false.
+
+
+
+
+ Returns true if this runner was started as single player (Started as with = 1).
+
+
+
+
+ If this is the last tick that is being executed this update
+
+
+
+
+ If this is the first tick that executes this update or re-simulation
+
+
+
+
+ If this is not a re-simulation but a new forward tick
+
+
+
+
+ If we are currently executing a client side prediction re-simulation.
+
+
+
+
+ The current state of the runner, if it's Starting, Running, Shutdown
+
+
+
+
+ Returns a for the local simulation. For a dedicated server will equal false.
+ PlayerRefs are assigned in order from 0 to MaxPlayers-1 and are re-used as players join and leave.
+ The only caveat is that the server player (if one exists), always gets the last index no matter how many clients are connected.
+
+
+
+
+ Returns the reference.
+
+
+
+
+ Returns how many ticks we executed last update.
+
+
+
+
+ Returns the collection of objects for this NetworkRunner's .
+
+
+
+
+ Returns the global instance of a lag compensation buffer .
+
+
+
+
+ Disconnect a player from the server
+
+ Player to disconnect
+
+
+
+ Connect this as a client to a Server.
+
+
+
+
+ Initiates a .
+
+
+
+
+ Starts using the supplied arguments.
+
+
+
+
+ Pauses the game in single player
+
+
+
+
+ Continues a paused game in single player
+
+
+
+
+ Sets the paused state in a single player
+
+
+
+
+ Add or remove Player's interest in a specific named Interest Group for a specific .
+ must be set to .
+
+
+
+
+ Gets Player's Actor Number (ID). Only usable in shared mode.
+
+ PlayerRef to get the Actor Number (ID)
+ Actor Number associated with the PlayerRef, otherwise null.
+
+
+
+ Gets Player's UserID. Only usable in shared mode.
+
+ PlayerRef to get the UserID
+ UserID if valid player found, otherwise null.
+
+
+
+ Sets the network object associated with this player
+
+
+
+
+
+
+ Gets the network object associated with a specific player
+
+
+ Network object if one is associated with the player
+
+
+
+ Returns the player round trip time (ping) in seconds
+
+ The player you want the round trip time for
+
+
+
+ Sends RPC message. Not meant to be used directly, ILWeaver calls this.
+
+
+
+
+
+ Sends RPC message. Not meant to be used directly, ILWeaver calls this.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Returns array of all registered with this .
+
+
+
+
+
+
+ Register an instance for callbacks from this .
+
+
+
+
+
+ Unregister an instance for callbacks from this .
+
+
+
+
+
+ Send an arbitrary data buffer to a target Player
+
+ Player that should receive the buffer
+ Buffer to be sent
+
+
+
+ Send an arbitrary data buffer to the Server
+
+ Buffer to be sent
+
+
+
+ Flags this player as always interested in this object. Means it does not have to be in a players area of interest to be replicated.
+
+ The player
+ The object
+ If he's always interested, or not.
+
+
+
+ Adds a area of interest radius for a specific player at a position. A player can have several areas of interests added. Needs to be called every frame.
+
+ The player
+ Center position of the area of interest
+ Radius of the area of interest
+
+
+
+ Returns the data from player, converted to the indicated .
+
+
+
+
+ Returns the unconverted unsafe for the indicated player.
+
+
+
+
+ Outputs the from player, translated to the indicated .
+
+
+
+
+ Get the instance for this from a .
+
+
+ null if object cannot be found.
+
+
+
+ Get the instance for this from a .
+
+
+
+ True if object was found.
+
+
+
+ Get the instance for this from a .
+
+
+
+ True if object was found.
+
+
+
+ Gets the for the current stage. For use in the .Render() callback.
+
+
+ Indicate if the start and end ticks should represent predicted, or state snapshots.
+
+
+
+
+
+ Tries to return the first instance of T found on the root of a .
+
+
+
+ Returns the found component. Null if the cannot be found, or if T cannot be found on the GameObject.
+
+
+
+ Returns if the contains a reference to a in the current State .
+
+
+
+
+ Returns if the contains a with given in the current State .
+
+
+
+
+ Returns if the contains a reference to a in the specified State .
+
+
+
+
+ Attempts to network instantiate a using a Component type that is part of a
+
+ Must be a Type derived from
+ used to spawn the
+ Spawn Position
+ Spawn Rotation
+ Player Input Authority
+ reference
+ reference
+ reference, or null if it was not able to spawn the object
+
+
+
+ Attempts to network instantiate a using a prefab.
+ Note: position and rotation values are only used locally for the instantiation of the object, and are not inherently networked.
+ Use , or any of its derived classes such as to replicate the initial transform state.
+
+ Prefab used to spawn the
+ Spawn Position
+ Spawn Rotation
+ Player Input Authority
+ reference
+ reference
+ reference, or null if it was not able to spawn the object
+
+
+
+ Attempts to network instantiate a using a .
+ Note: position and rotation values are only used locally for the instantiation of the object, and are not inherently networked.
+ Use , or any of its derived classes such as to replicate the initial transform state.
+
+ Prefab Ref used to spawn the
+ Spawn Position
+ Spawn Rotation
+ Player Input Authority
+ reference
+ reference
+ reference, or null if it was not able to spawn the object
+
+
+
+ Attempts to network instantiate a using a
+ Note: position and rotation values are only used locally for the instantiation of the object, and are not inherently networked.
+ Use , or any of its derived classes such as to replicate the initial transform state.
+
+ Prefab Asset used to spawn the
+ Spawn Position
+ Spawn Rotation
+ Player Input Authority
+ reference
+ reference
+ reference, or null if it was not able to spawn the object
+
+
+
+ Attempts to network instantiate a using a
+ Note: position and rotation values are only used locally for the instantiation of the object, and are not inherently networked.
+ Use , or any of its derived classes such as to replicate the initial transform state.
+
+ Object Guid used to spawn the
+ Spawn Position
+ Spawn Rotation
+ Player Input Authority
+ reference
+ reference
+ reference, or null if it was not able to spawn the object
+
+
+
+ Attempts to network instantiate a using a
+ Note: position and rotation values are only used locally for the instantiation of the object, and are not inherently networked.
+ Use , or any of its derived classes such as to replicate the initial transform state.
+
+ Prefab ID used to spawn the
+ Spawn Position
+ Spawn Rotation
+ Player Input Authority
+ reference
+ reference
+ reference, or null if it was not able to spawn the object
+
+
+
+ Destroys a .
+
+
+
+
+
+ Ensures that a specific component exists on this gameobject.
+
+
+
+
+ Removes a specific from this gameobject, if it exists.
+
+
+
+
+ Register a instance with the .
+
+
+
+
+ Unregister a instance from the callbacks.
+
+
+
+
+ Attaches a user created network object to the network
+
+ The object to attach
+ If assigned who is the default input authority for this object
+
+
+
+ Attempts to network instantiate a using a
+ Note: position and rotation values are only used locally for the instantiation of the object, and are not inherently networked.
+ Use , or any of its derived classes such as to replicate the initial transform state.
+
+ Prefab ID used to spawn the
+ Spawn Position
+ Spawn Rotation
+ Player Input Authority
+ reference
+ reference
+ reference, or null if it was not able to spawn the object
+
+
+
+ Signal if Fusion was initilized with Host Migration system enabled
+
+
+
+
+ if this instance is a resume (host migration)
+
+
+
+
+ Iterate over the old NetworkObjects from the Resume Snapshot
+
+ Iterable list of
+
+
+
+ Get the next NetworkID used while resuming the simulation
+
+
+
+
+
+ Gets a temporary representation of a from the old Server Snapshot
+
+
+
+
+ Setup Host Migration information
+
+
+
+
+
+ Start the Host Migration process
+
+ Base Snapshot to be used when restarting the Host
+
+
+
+ Recurring Service method that will check if the Job responsible for computing
+ the Server Snapshot has finished the process and will push the result for later use
+
+
+
+
+ Start the Snapshot build using an async process
+ This will return a Task that can be awaited witht the result of the operation
+
+ Await Task that will complete with the Snapshot computation
+
+
+
+ Creates a Job to build the Server Simulation Snapshot
+
+ Ready to use
+
+
+
+ Signal the Host Migration process has started
+
+
+
+
+ Unity Job responsible for computing a Server Snapshot
+
+
+
+
+ Signal if the Local Peer is connected to Photon Cloud and is able to Create/Join Room but also receive Lobby Updates
+
+
+
+
+ Photon Client UserID
+
+ Returns null if Peer is not connected to Photon Cloud
+
+
+
+ used by this Runner to Authenticate the local peer.
+
+
+
+
+ Current Game Mode active on the Fusion Simulation
+
+
+
+
+ Stores information about the current running session
+
+
+
+
+ Check the current Connection Type with the Remote Server
+
+
+
+
+ Exposes the current NAT Type from the local Peer
+
+
+
+
+ Signal if the Local Peer is in a Room and is the Room Master Client
+
+
+
+
+ Completion Source for the startup Photon Cloud Operations
+
+
+
+
+ Responsible to manage the Photon Cloud related Services
+
+
+
+
+ Join the Peer to a specific Lobby, either a prebuild or a custom one
+
+ Lobby Type to Join
+ Lobby ID
+ Authentication Values used to authenticate this peer
+ Custom Photon Application Settings
+ Async Task to Join a Session Lobby. Can be used to wait for the process to be finished.
+
+
+
+ Starts the local Fusion Runner and takes care of all major setup necessary
+
+ Custom arguments used to setup the Fusion Simulation
+ Task that can be awaited to chain actions
+
+
+
+ Connect the local peer to Photon Cloud using an async process.
+
+ Authentication Values used to authenticate this peer
+ Custom Photon Application Settings
+ External Communicator that will be reused on restart
+ Async Task of the connect to Photon Cloud process. Can be used to wait for the process to be finished.
+
+
+
+ Disconnect the Peer from Photon Cloud
+
+ If the Cloud Services were not initialized, it just returns immediately
+
+
+
+
+
+ Start Fusion in Single Player Mode
+
+ Initialization Arguments
+ A running Task of the initialization process
+
+
+
+ Start Fusion in one of the Cloud Game Modes
+
+ Initialization Arguments
+ A running Task of the initialization process
+
+
+
+ Shutdown the Fusion Runner based on a arbitrary Exception
+
+ Exception used as base for the Shutdown procedure
+ Awaitable Task of the Shutdown procedure
+
+
+
+ Signal an update on the list of
+
+ New Session Info
+
+
+
+ Signal an update on the list of
+
+ Custom Authentication Response
+
+
+
+ Returns the current loaded network scene.
+
+
+
+
+ Returns the Unity scene for this . With , multiple physics scenes may exist, and this getter should be used in place of SceneManager.GetActiveScene().
+
+
+
+
+ A scene used when run in mode.
+
+
+
+
+ Signal if this Runner is already in a Temp Physics Scene
+
+
+
+
+ Update the current Active Scene
+
+ to be activated
+
+
+
+ Invoke on all implementations
+
+
+
+
+ Invoke on all implementations
+
+
+
+
+ Get the a GameObject instance belongs to.
+
+ GameObject to check for a
+ reference, or null if not found
+
+
+
+ Get the from a specific Scene
+
+ Scene to check for a
+ reference, or null if not found
+
+
+
+ Try to create a temp empty scene for PhysicsScene
+
+ false if the runner was on the temp scene already, true otherwise.
+
+
+
+ Get the 3D Physics scene being used by this Runner.
+
+
+
+
+ Get the 2D Physics scene being used by this Runner.
+
+
+
+
+ Instantiates an object in the scene of this runner
+
+
+
+
+ Instantiates an object in the scene of this runner
+
+
+
+
+ Instantiates an object in the scene of this runner
+
+
+
+
+ Instantiates an object in the scene of this runner
+
+
+
+
+ Moves an object to the scene of this runner
+
+
+ Component of object to move
+
+
+
+ Moves an object to the scene of this runner
+
+ Object to move
+
+
+
+ If running in peer mode and the current active
+ scene is different than , switches active scene to ,
+ stores the previous active scene in and returns true.
+ Returns false otherwise.
+
+
+ True if an actual change occurred.
+
+
+
+ Retrieve the associated with an specific Scene
+
+ Scene handler to check
+ reference, or null if not found
+
+
+
+ Transitory Holder with all necessary information to restart the Fusion Runner
+ after the Host Migration has completed
+
+
+
+
+ New GameMode the local peer will assume after the Host Migration
+
+
+
+
+ Fusion Start Arguments, used to configure the
+ simulation mode and other settings
+
+
+
+
+ Game Mode in which this peer will start
+
+
+
+
+ Photon Cloud Session Name used either to Create or Join a Session
+
+
+
+
+ Binding Address
+
+
+
+
+ Object pool to use
+
+
+
+
+ Custom reference
+
+
+
+
+ Custom used to start the simulation
+
+
+
+
+ Number of players allowed to connect to this peer, when running in Server Mode
+
+
+
+
+ Scene that will be set as the starting Scene when running in Server Mode
+
+
+
+
+ Callback that is invoked when the Fusion has fully started
+
+
+
+
+ Flag to disable the NAT Punchthrough implementation and connect only via Relay
+
+
+
+
+ User defined callback interfaces we will provide O(1) constant time lookup for
+
+
+
+
+ Connection token sent by client to server. Not used in shared mode.
+
+
+
+
+ Custom Session Properties.
+ This dictionary can be used to either setup the initial Session Properties when creating a Session
+ but also to set the matchmaking filters when joining a Random Session.
+
+
+
+
+ Session Custom Lobby to be published in
+
+
+
+
+ Specify a Custom STUN Server used to Resolve the peer Reflexive Addresses
+
+
+
+
+ Custom Authentication Data
+
+
+
+
+ Custom Photon Application Settings
+
+
+
+
+ Disables the Session creation when starting a Client with an specific Session Name
+
+
+
+
+ Host Migration Token used when restarting the Fusion Simulation
+
+
+
+
+ Callback invoked when the new Host is migrating from the old Host state
+
+
+
+
+ Fusion Game Mode.
+
+ Used to select how the local simulation will act.
+
+
+
+
+ Single Player Mode: it works very similar to Mode, but don't accept any connections.
+
+
+
+
+ Shared Mode: starts a Game Client, which will connect to a Game Server running in the Photon Cloud using the Fusion Plugin.
+
+
+
+
+ Server Mode: starts a Dedicated Game Server with no local player.
+
+
+
+
+ Host Mode: starts a Game Server and allows a local player.
+
+
+
+
+ Client Mode: starts a Game Client, which will connect to a peer in either or Modes.
+
+
+
+
+ Automatically start as Host or Client. The first peer to connect to a room will be started as a Host, all others will connect as clients.
+
+
+
+
+ Defines the type of the current connection with the Remote Peer,
+ either the Server or a Client
+
+
+
+
+ No connection is currently active
+
+
+
+
+ Connection was accomplished using the Photon Relay Services
+
+
+
+
+ Connection was accomplished directly with the remote peer
+
+
+
+
+ Session Lobby Type
+
+
+
+
+ Invalid Session Lobby Type
+
+
+
+
+ ClientServer Lobby
+
+
+
+
+ Shared Lobby
+
+
+
+
+ Custom Lobby - works in conjuction with a Lobby Name/ID
+
+
+
+
+ Holds information about the Game Session
+
+
+
+
+ Flag to signal if the is ready for use
+
+
+
+
+ Stores the current Room Name
+
+
+
+
+ Stores the current connected Region
+
+
+
+
+ Signal if the current connected Room is visible
+
+
+
+
+ Signal if the current connected Room is open
+
+
+
+
+ Room Custom Properties
+
+
+
+
+ Current number of peers inside this Session, this includes the Server/Host and Clients
+
+
+
+
+ Max number of peer that can join this Session, this value always include an extra slot for the Server/Host
+
+
+
+
+ Check if the reference is not Null and is Valid.
+
+
+
+
+
+ Update or change the Custom Properties of the current joined Room
+
+ New custom properties
+
+
+
+ String representation of a
+
+ Formatted
+
+
+
+ Represents the result of starting the Fusion Simulation
+
+
+
+
+ Signal if the Start was OK
+
+
+
+
+ Start Game Shutdown Reason
+
+
+
+
+ StartGameResult to String
+
+
+
+
+
+ Describe an Exception that Occurred while starting the Fusion Simulation
+
+
+
+
+ ShutdownReason that caused this exception
+
+
+
+
+ StartGameException to String
+
+
+
+
+ Convert arbitrary Exceptions into a StartGameException to public use
+
+ Exception to be converted
+ Reference to a StartGameException holding a ShutdownReason
+
+
+
+ Stores data types used on the interface
+
+
+
+
+ Data holder of a Connection Request from a remote client
+
+
+
+
+ Address of the remote client
+
+
+
+
+ Accepts the Request
+
+
+
+
+ Refuses the Request
+
+
+
+
+ Describes a list of Reason why the Fusion Runner was Shutdown
+
+
+
+
+ OK Reason means Fusion was Shutdown by request
+
+
+
+
+ Shutdown was caused by some internal error
+
+
+
+
+ Raised when the peer tries to Join a Room with a mismatching type between ClientServer Mode and Shared Mode.
+
+
+
+
+ Raised when the local peer started as a Server and tried to join a Room that already has a Server peer.
+
+
+
+
+ Raised when the Peer is disconnected or kicked by a Plugin Logic.
+
+
+
+
+ Raised when the Game the Peer is trying to Join is Closed
+
+
+
+
+ Raised when the Game the Peer is trying to Join does not exist
+
+
+
+
+ Raised when all CCU available for the Photon Application are in use
+
+
+
+
+ Raised when the peer is trying to connect to an unavailable or non-existent Region
+
+
+
+
+ Raised when a Session with the same name was already created
+
+
+
+
+ Raised when a peer is trying to join a Room with already the max capacity of players
+
+
+
+
+ Raised when the Authentication Values are invalid
+
+
+
+
+ Raised when the Custom Authentication has failed for some other reason
+
+
+
+
+ Raised when the Authentication Ticket has expired
+
+
+
+
+ Timeout on the Connection with the Photon Cloud
+
+
+
+
+ Raised when Fusion is already running and the StartGame is invoked again
+
+
+
+
+ Raised when any of the StartGame arguments does not meet the requirements
+
+
+
+
+ Signal this Runner is shutting down because of a Host Migration is about to happen
+
+
+
+
+ Interface for callbacks.
+ Register a class/struct instance which implements this interface with .
+
+
+
+
+ Callback from a when a new player has joined.
+
+
+
+
+ Callback from a when a player has disconnected.
+
+
+
+
+ Callback from that polls for user inputs.
+ The that is supplied expects:
+
+ input.Set(new CustomINetworkInput() { /* your values */ });
+
+
+
+
+
+
+
+
+
+
+
+
+ Called when the runner is shutdown
+
+ The runner being shutdown
+ Describes the reason Fusion was Shutdown
+
+
+
+ Callback when successfully connects to a server or host.
+
+
+
+
+ Callback when disconnects from a server or host.
+
+
+
+
+ Callback when receives a Connection Request from a Remote Client
+
+ Local NetworkRunner
+ Request information
+ Request Token
+
+
+
+ Callback when fails to connect to a server or host.
+
+
+
+
+ This callback is invoked when a manually dispatched simulation message is received from a remote peer
+
+ The runner this message is for
+ The message pointer
+
+
+
+ This callback is invoked when a new List of Sessions is received from Photon Cloud
+
+ The runner this object exists on
+ Updated list of Session
+
+
+
+ Callback is invoked when the Authentication procedure returns a response from the Authentication Server
+
+ The runner this object exists on
+ Custom Authentication Reply Values
+
+
+
+ Callback is invoked when the Host Migration process has started
+
+ The runner this object exists on
+ Migration Token that stores all necessary information to restart the Fusion Runner
+
+
+
+ Class that contains global accuracy information.
+ Built-in named defaults can be edited, or custom named defaults can be created.
+ These defaults allow you to change accuracy settings across an entire project.
+ These values can be changed in the .
+
+
+
+
+ The named built-in default for Uncompressed. This cannot be changed and will always have a value of 0.
+
+
+
+
+ The named built-in general default.
+
+
+
+
+ The named built-in default for Position.
+ This value is used by built-in components like and ,
+ but may be used for your own components as well.
+
+
+
+
+ The named built-in default for Rotation.
+ This value is used by built-in components like and ,
+ but may be used for your own components as well.
+
+
+
+
+ The named built-in default for NormalizedTime.
+ This value is used by built-in components like ,
+ but may be used for your own components as well.
+
+
+
+
+ The standard default fall back value for Accuracy.
+
+
+
+
+ The fixed value that represents uncompressed.
+
+
+
+
+ Which hash should a hash value of zero (the struct default value) remap to.
+
+
+
+
+ Which tag name should a zero hash (the struct default value) remap to.
+
+
+
+
+ Which accuracy value should a zero hash (the struct default value) remap to.
+
+
+
+
+ Attempts to get an accuracy from a hash value.
+
+ Returns false if the hash is invalid (hash 0 is considered valid, and remaps to )
+
+
+
+ Main simulation class
+
+
+
+
+ Use inside of FixedUpdateNetwork to determine if the tick currently being simulated has previously been simulated locally.
+ Resimulation occurs in client prediction when new states arrive from the StateAuthority.
+ Networked objects are set to the most current authority state tick, and simulations are repeated from that tick to the local current tick.
+
+
+
+
+ Use in conjunction with IsResimulation/IsForward inside of FixedUpdateNetwork to determine if the current tick being simulated
+ is the last tick of the resimulation or forward phase of the simulation loop.
+
+ 'Resimulation' describes simulating a tick that has been previously been simulated.
+ 'Forward' describes simulating a tick that is being simulated for the first time locally.
+ 'Prediction' describes simulating ticks higher than the most current known StateAuthority snapshot tick.
+
+
+
+
+
+ Use in conjunction with IsResimulation/IsForward inside of FixedUpdateNetwork to determine if the current tick being simulated
+ is the first tick of the resimulation or forward phase of the simulation loop.
+
+ 'Resimulation' describes simulating a tick that has been previously been simulated.
+ 'Forward' describes simulating a tick that is being simulated for the first time locally.
+ 'Prediction' describes simulating ticks higher than the most current known StateAuthority snapshot tick.
+
+
+
+
+
+ Use inside of FixedUpdateNetwork to determine if the tick currently being simulated has NOT previously been simulated locally.
+
+
+
+
+ True if the current stage of the simulation loop is Forward. False during resimulations.
+
+ 'Resimulation' describes simulating a tick that has been previously been simulated.
+ 'Forward' describes simulating a tick that is being simulated for the first time locally.
+ 'Prediction' describes simulating ticks higher than the most current known StateAuthority snapshot tick.
+
+
+
+
+
+ The tick associated with the current state of networked objects.
+
+
+
+
+ Indicates if a Server/Client or Shared Mode (relay server) topology is being used.
+
+
+
+
+ Gets the flags for The type of network peer this simulation represents.
+
+
+
+
+ Gets the current value.
+
+
+
+
+ The file used by this .
+
+
+
+
+ The file used by this .
+
+
+
+
+ Gets the fixed tick time interval. Derived from the .
+
+
+
+
+ If this peer is a client. True for client peers in Server/Client topologies, and true for all peers in Shared Mode.
+
+
+
+
+ If this peer is the server. True for the Server or Host peer in Server/Client topologies, and always false for all peers in Shared Mode (the relay is the server).
+
+
+
+
+ True for any peer that represents a human player. This is true for all peers except a dedicated server.
+
+
+
+
+ Indicates that this simulation is operating in Single Player mode, which is a Host that accepts no connections.
+
+
+
+
+ Only valid in Shared Mode. Indicates if this peer is flagged as the MasterClient, which means it is default StateAuthority
+
+
+
+
+ Signal if the Simulation is currently running
+
+
+
+
+ Bound Address of the internal socket
+
+
+
+
+ Add or remove specific player interest in a NetworkObject.
+
+ must be set to .
+
+
+
+
+
+ Forwards the Simulation based on the Delta Time
+
+ Delta Time used to forward the simulation
+ How many Ticks executed on this Update
+
+
+
+ Engine sources for statistics.
+
+
+
+
+ telemetry available for the sockets layer.
+
+
+
+
+ as Flags.
+
+
+
+
+ telemetry available for a .
+
+
+
+
+ as Flags.
+
+
+
+
+ telemetry available for .
+
+
+
+
+ as Flags.
+
+
+
+
+ Returns the requested associated with this .
+
+
+
+
+ Returns the requested associated with this .
+
+
+
+
+ Result flags for the RPC message send operation.
+
+
+
+
+ Client sent to the server, server will send to the target client.
+
+
+
+
+ Server sent to a specific client (a targeted message).
+
+
+
+
+ Server attempted to send to all the clients and at least one succeeded.
+
+
+
+
+ Target object not confirmed on the client.
+
+
+
+
+ Target object not in client's interest. Likely due to being outside of player's AOI region, or needs to be explicitly set as always interested.
+
+
+
+
+ Target client not connected (a targeted message).
+
+
+
+
+ Server attempted to send to all the clients, but none was connected.
+
+
+
+
+ Server attempted to send to all the clients, but the target object is not confirmed/not in Object Interest for all target clients.
+
+
+
+
+ Project configuration settings specific to how the Simulation class behaves.
+
+
+
+
+
+
+
+
+
+ Classic server and client model
+
+
+
+
+ Relay based shared world model
+
+
+
+
+ Enumerates the types of state replication available.
+
+
+
+
+ Server Authoritative, Delta Snapshots send the complete world state from every network tick. This produces the highest accuracy simulation replication,
+ but may not be suitable for higher object and player counts.
+
+
+
+
+ Server Authoritative, Eventual Consistency allows for partial/culled state transmission, which may be necessary for implementing Area of Interest,
+ high networked object counts, or high player counts.
+
+
+
+
+
+
+
+
+
+ The update rate of the simulation in Hz (ticks per second).
+
+
+
+
+ The default number of players allowed to join a game instance. Can also be changed in code when starting Fusion.
+
+
+
+
+ Determines which mode will be used.
+
+
+
+
+ The topology used
+
+
+
+
+ If, in host mode, we should allow host migration if the current host leaves.
+
+
+
+
+ Selects if Object Interest should be used when running in mode.
+ When enabled, clients will only receive updates for objects which they have interest in.
+ How interest is determined for each is based on its mode setting.
+
+
+
+
+ Uses area of interest queries to cull execution of Fixed Update Network for objects outside of any players area of interest.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Returns the inverse of TickRate. The time (in seconds) between simulation ticks.
+
+
+
+
+ Returns ( * ).
+
+
+
+
+ This value times TickRate determines the network send rate for the server.
+ A value of 1 instructs the server to send state updates to clients every simulation tick.
+ Values greater than 1 will send a input/state updates every N ticks.
+ Higher values reduce data usage, in exchange for increased latency and reduced state sync accuracy.
+
+
+
+
+ This value times TickRate determines the network send rate for clients.
+ A value of 1 instructs clients to send input/state updates to the server every simulation tick.
+ Values greater than 1 will send an update every N ticks.
+ Higher values reduce data usage, in exchange for increased latency and reduced state sync accuracy.
+
+
+
+
+ Returns ( * ). This is the effective time interval (in seconds) between server tick updates to clients.
+
+
+
+
+ Returns ( * ). This is the effective time interval (in seconds) between client input/state updates from the client.
+
+
+
+
+
+
+
+
+
+ Memory Heap Settings
+
+
+
+
+ Default size of each Heap Page
+
+
+
+
+ Default number of Heap Pages
+
+
+
+
+ Heap Global Size
+
+
+
+
+ Initializes and creates a new based on the Global Size
+
+
+
+
+ ToString
+
+
+
+
+ How much the delta time is modulated up/down to adjust interpolation time
+ when the client has ended up behind or ahead of the server. Common values
+ are 1% to 3%, the lower the tick rate the higher this should be.
+
+ Default value is 1%.
+
+
+
+
+ How much the actual interpolation time is allowed to drift up/down from the calculated optimal time
+ before adjustments to the interpolation time is made. Defined in % of optimal interpolation time.
+ For example with a 25% value and an optimal interpolation time of 0.1 seconds, the actual interpolation time
+ is allowed to very between 0.75-0.125 before adjustments are made to it.
+
+ Default value is 25%.
+
+
+
+
+ How much actual interpolation time is allowed to drift up/down from calculated optimal time
+ before the time calculations are reset and snapped to the optimal value.
+ Defined in % of optimal time. Common values are 200% to 500%.
+
+ Default value is 200%.
+
+
+
+
+ The minimum multiplier that is used to compensate for jitter and uncertainty when calculating optimal interpolation offset.
+ This multiplier is used to give some extra interpolation offset from the absolutely optimal time.
+
+
+
+
+ Same as the Multiplier Min, just the max value instead.
+
+
+
+
+ Main network configuration class.
+
+
+
+
+ Flag for allowed Reliable Data transfer modes.
+
+
+
+
+ Allow Client to Server.
+
+
+
+
+ Allow Client to Client using Server as Proxy.
+
+
+
+
+ Size in Kilobytes of the underlying socket send buffer.
+
+
+
+
+ Size in Kilobytes of the underlying socket receive buffer.
+
+
+
+
+ Max number of connection attempts that a Client will run when trying to connect to a remote Server.
+
+
+
+
+ Interval in seconds between each connection attempt from a Client.
+
+
+
+
+ Default assumed RTT in seconds for new connections (before actual RTT has been determined). The real RTT is calculated over time once the connection is established.
+
+
+
+
+ Max allowed time in seconds that the local peer can run without receiving any update from a remote peer.
+ If a client does not receive any update from the server within this period, it will disconnect itself.
+ If a server does not receive any update from a remote client within this period, it will disconnect that particular client.
+
+
+
+
+ Interval in seconds between PING messages sent to a remote connection, in order to keep that connection alive.
+
+ Currently unused.
+
+
+
+ Default delay between connection changes status to Shutdown (disconnected/invalid), and it actually being released (freeing all references to that particular connection).
+
+
+
+
+ Max number of bytes that can be used by Fusion to fill up a UDP package.
+
+
+
+
+ Current mode.
+
+
+
+
+ Initializes and creates a copy of this .
+
+
+
+
+
+ Convert this into a using the as reference.
+
+
+
+
+ Configuration for network conditions simulation (induced latency and loss).
+
+
+
+
+ If adverse network conditions are being simulated.
+
+
+
+
+ The pattern used to oscillate between and values.
+
+
+
+
+ The lowest packet delay value returned from the oscillator.
+
+
+
+
+ The highest packet delay value returned from the oscillator.
+
+
+
+
+ The period of the oscillator (the rate at which delay oscillates between and ).
+
+
+
+
+ The oscillates between 0 and 1. Values below this threshold are reduced to zero, resulting in a value equal to .
+
+
+
+
+ After the delay value from the oscillator is determined, random 0 to this value of additional seconds be added to the packet latency.
+
+
+
+
+ The pattern used to oscillate between and values.
+
+
+
+
+ The lowest loss chance value the oscillator will produce. 0 = 0% chance of being lost. 1 = 100% chance of being lost.
+
+
+
+
+ The highest loss chance value the oscillator will produce. 0 = 0% chance of being lost. 1 = 100% chance of being lost.
+
+
+
+
+ The wave oscillates between 0 and 1. Values below this threshold are reduced to zero, resulting in a value equal to .
+
+
+
+
+ The period of the oscillator (the rate at which delay oscillates between and ).
+
+
+
+
+ After the oscillation loss calculated, an additional 0 to this (normalized) percentage of loss chance is added.
+
+
+
+
+ Stores the global state of a simulation
+
+
+
+
+ Total size of the Global State in 4 byte words
+
+
+
+
+ Total size of the Global State
+
+
+
+
+ Current Scene Ref
+
+
+
+
+ Current Simulation Mode
+
+
+
+
+ Current player count
+
+
+
+
+
+
+
+
+
+ Flags for The type of network peer a simulation represents.
+
+
+
+
+ Simulation represents a server peer, with no local player.
+
+
+
+
+ Simulation represents a server peer, with a local player.
+
+
+
+
+ Simulation represents a client peer, with a local player.
+
+
+
+
+ Represents a snapshot of the simulation state
+
+
+
+
+ The absolute tick index this snapshot represents.
+
+
+
+
+ The time in seconds this represents.
+ Time is relative to 0, with Tick 0 representing Time 0f.
+
+
+
+
+ Flags for which stage the simulation currently running. Forward is when a tick is being simulated for the first time.
+ Resimulate is when a tick is being simulated again with corrections.
+
+
+
+
+ Currently simulating a tick for the first time.
+
+
+
+
+ Currently simulating a previously simulated tick again, with state corrections.
+
+
+
+
diff --git a/Assets/Photon/Fusion/Assemblies/Fusion.Runtime.xml.meta b/Assets/Photon/Fusion/Assemblies/Fusion.Runtime.xml.meta
new file mode 100644
index 0000000..384f280
--- /dev/null
+++ b/Assets/Photon/Fusion/Assemblies/Fusion.Runtime.xml.meta
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: d461b7cc07b37504f94b4a901b69e494
+TextScriptImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Photon/Fusion/Assemblies/Fusion.Sockets.dll b/Assets/Photon/Fusion/Assemblies/Fusion.Sockets.dll
new file mode 100644
index 0000000..e573d8d
Binary files /dev/null and b/Assets/Photon/Fusion/Assemblies/Fusion.Sockets.dll differ
diff --git a/Assets/Photon/Fusion/Assemblies/Fusion.Sockets.dll.debug b/Assets/Photon/Fusion/Assemblies/Fusion.Sockets.dll.debug
new file mode 100644
index 0000000..e856a6a
Binary files /dev/null and b/Assets/Photon/Fusion/Assemblies/Fusion.Sockets.dll.debug differ
diff --git a/Assets/Photon/Fusion/Assemblies/Fusion.Sockets.dll.debug.meta b/Assets/Photon/Fusion/Assemblies/Fusion.Sockets.dll.debug.meta
new file mode 100644
index 0000000..ac4c382
--- /dev/null
+++ b/Assets/Photon/Fusion/Assemblies/Fusion.Sockets.dll.debug.meta
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: 02ee5c5911f692e44a0cec1e51da1507
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Photon/Fusion/Assemblies/Fusion.Sockets.dll.meta b/Assets/Photon/Fusion/Assemblies/Fusion.Sockets.dll.meta
new file mode 100644
index 0000000..3aea0d0
--- /dev/null
+++ b/Assets/Photon/Fusion/Assemblies/Fusion.Sockets.dll.meta
@@ -0,0 +1,33 @@
+fileFormatVersion: 2
+guid: 850f5b8096bb4c64abfef35065cde6b1
+PluginImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ iconMap: {}
+ executionOrder: {}
+ defineConstraints: []
+ isPreloaded: 0
+ isOverridable: 0
+ isExplicitlyReferenced: 0
+ validateReferences: 1
+ platformData:
+ - first:
+ Any:
+ second:
+ enabled: 1
+ settings: {}
+ - first:
+ Editor: Editor
+ second:
+ enabled: 0
+ settings:
+ DefaultValueInitialized: true
+ - first:
+ Windows Store Apps: WindowsStoreApps
+ second:
+ enabled: 0
+ settings:
+ CPU: AnyCPU
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Photon/Fusion/Assemblies/Fusion.Sockets.pdb.debug b/Assets/Photon/Fusion/Assemblies/Fusion.Sockets.pdb.debug
new file mode 100644
index 0000000..5ea90d7
Binary files /dev/null and b/Assets/Photon/Fusion/Assemblies/Fusion.Sockets.pdb.debug differ
diff --git a/Assets/Photon/Fusion/Assemblies/Fusion.Sockets.pdb.debug.meta b/Assets/Photon/Fusion/Assemblies/Fusion.Sockets.pdb.debug.meta
new file mode 100644
index 0000000..d85a2db
--- /dev/null
+++ b/Assets/Photon/Fusion/Assemblies/Fusion.Sockets.pdb.debug.meta
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: 4da11c4b9bd14f146984f58dd9a83d27
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Photon/Fusion/Assemblies/Fusion.Sockets.xml b/Assets/Photon/Fusion/Assemblies/Fusion.Sockets.xml
new file mode 100644
index 0000000..b4f95fa
--- /dev/null
+++ b/Assets/Photon/Fusion/Assemblies/Fusion.Sockets.xml
@@ -0,0 +1,1202 @@
+
+
+
+ Fusion.Sockets
+
+
+
+
+ Represents a Network Address, which includes a IP and Port
+ This can contains either a IPv4 or a IPv6 address
+
+
+
+
+ Retrieves the Remote Actor ID which this Represents
+
+
+
+
+ Signal if the is a Relayed connection
+
+
+
+
+ Signal if the represents an IPv6 Address
+
+
+
+
+ Signal if this is not default/empty
+
+
+
+
+ Create a new NetAddress on the LocalHost address with the desired Port
+
+ Port used to build the NetAddress
+ New NetAddress reference
+
+
+
+ Create a new on the LocalHost IPv6 Address with the desired Port
+
+ Port used to build the NetAddress
+ New NetAddress reference
+
+
+
+ Create a new NetAddress using the "Any" IPv4 Address representation (0.0.0.0)
+ with the Port passed as argument
+
+ Port used to build the NetAddress
+ New NetAddress reference
+
+
+
+ Create a new NetAddress using the "Any" IPv6 Address representation (::)
+ with the Port passed as argument
+
+ Port used to build the NetAddress
+ New NetAddress reference
+
+
+
+ Create a new NetAddress based on the IP and Port passed as argument
+
+ String representation of an IP, either IPv4 or IPv6
+ Port used to build the NetAddress
+ New NetAddress reference
+
+
+
+ IPv4 Subnet Mask Utilities
+
+
+
+
+ List of IPv4 Subnet Masks
+
+
+
+
+ Check if two IPv4 seems to be in the same Subnet.
+
+ The addresses are checked against all subnet masks in .
+
+ EndPoint A
+ EndPoint B
+ True if both addresses seems to be in the same subnet
+
+
+
+ Extracts the Network Address of an IPv4 EndPoint based on a particular Subnet Mask
+
+ EndPoint
+ Subnet Mask
+ Network Address based on the Subnet Mask
+
+
+
+ Build and alloc a based on the number of packets
+ it need to keep track and the size of each packets.
+
+ Number of blocks to allocate
+ Size of each block
+ Reference to a
+
+
+
+ Release the that is part of this Block and
+ mark it as available again by including it on the list of buffers
+
+
+
+
+
+ Tries to get a valid reference from the Buffer block
+
+ A valid NetBitBuffer reference if it can be retrieved from this block, null otherwise
+
+
+
+ Creates a new empty
+
+ NetBitBuffer reference
+
+
+
+ Tries to get a valid reference from the Buffer block
+
+ Reference to a NetBitBuffer
+ True if a valid NetBitBuffer reference can be retrieved from this block, false otherwise
+
+
+
+ Represents a linked list of
+
+
+
+
+ Add a at the beginning of the List
+
+ NetBitBuffer to add to the list
+
+
+
+ Add a at the end of the list.
+
+ NetBitBuffer to add to the list
+
+
+
+ Removes the first element of the list
+
+ NetBitBuffer reference
+
+
+
+ Remove a specific from the list
+
+ NetBitBuffer to remove
+
+
+
+ Check if a specific is in the list
+
+ NetBitBuffer to check
+ True if the list contains the item, false otherwise
+
+
+
+ Describe the Type of a Command Packet
+
+
+
+
+ Network Command Header
+ Describe its type and usual settings for all commands
+
+
+
+
+ Create a new NetCommandHeader based on a type
+
+ Type of Command that should be created
+ New NetCommandHeader reference based on the Command Type
+
+
+
+ Connect Command used to signal a remote server that a client is trying to connect to it
+
+
+
+
+ Accepted Command, sent by the server when a remote client connection is accepted
+
+
+
+
+ Refuse Command, sent by the server when the connection was refused.
+ This happens when the server has reached its max connection capacity.
+
+
+
+
+ Disconnect Command, it can be used by either side of the connection
+
+
+
+
+ General configuration used to drive the behavior of the Socket library
+
+
+
+
+ Pre-allocated number of data buffers used to send data
+
+
+
+
+ Number of Connection Groups supported by the local instance
+
+
+
+
+ Max Number of Connections supported by the local instance
+
+
+
+
+ Max number of Connection per Group based on the and
+
+
+
+
+ Size of the internal Socket send buffer
+
+
+
+
+
+ Size of the internal Socket receive buffer
+
+
+
+
+
+ default Maximum Transmission Unit
+
+
+
+
+ UDP Packet Size in Bytes
+
+
+
+
+ UDP Packet Size in Bits based on
+
+
+
+
+ Number of Connection Attempts tried by the peer before cancel the connection
+
+
+
+
+ Interval in Seconds between attempts to connect to a remote server
+
+
+
+
+ Max Allowed time for the Send and Receive operations, in milliseconds
+
+
+
+
+ Initial RTT
+
+
+
+
+ Connection Timeout in seconds
+
+
+
+
+ Interval in Seconds between ping being sent to a remote end
+
+
+
+
+ Timeout in Seconds to allow a disconnected Connection to be released from the Group Mapping
+
+
+
+
+
+
+
+
+ Network Address used to bind the internal Socket
+
+
+
+
+ Package acknowledgment system configuration
+
+
+
+
+ Network simulation system configuration
+
+
+
+
+ Builds a with the default values
+
+
+
+
+ Disconnect Reason Flag
+
+
+
+
+ Describe the type of a Networked Packet
+
+
+
+
+ IPv6 header: 40 bytes, UDP header: 8 bytes, Realtime Header: 96 bytes
+
+
+
+
+ MinimumTransferUnit bytes.
+
+
+
+
+ MinimumTransferUnit bits.
+
+
+
+
+ MaximumTransferUnit bytes.
+
+
+
+
+ MaximumTransferUnit bits. (ipv6 header: 40 bytes, udp header: 8 bytes)
+
+
+
+
+ if from is LARGER than to, result is positive
+ if from is LESSER than to, result is negative
+ if they are the same, result is zero
+
+
+
+
+
+
+
+ Random ID of this socket
+
+
+
+
+ Reference to Current Communicator
+
+
+
+
+ Local Peer Address is based on the current Player Actor Number inside the Room
+
+
+
+
+ Specifies UDP network type.
+
+
+
+
+ Invalid NAT Type
+
+
+
+
+ UDP is always blocked.
+
+
+
+
+ No NAT, public IP, no firewall.
+
+
+
+
+ A full cone NAT is one where all requests from the same internal IP address and port are
+ mapped to the same external IP address and port. Furthermore, any external host can send
+ a packet to the internal host, by sending a packet to the mapped external address.
+
+
+
+
+ A symmetric NAT is one where all requests from the same internal IP address and port,
+ to a specific destination IP address and port, are mapped to the same external IP address and
+ port. If the same host sends a packet with the same source address and port, but to
+ a different destination, a different mapping is used. Furthermore, only the external host that
+ receives a packet can send a UDP packet back to the internal host.
+
+
+
+
+ This class implements STUN Client. Defined in RFC 8489
+
+ Session Traversal Utilities for NAT (STUN)
+ Traversal Using Relays around NAT (TURN): Relay Extensions to Session Traversal Utilities for NAT(STUN)
+ Happy Eyeballs Version 2: Better Connectivity Using Concurrency
+ State of Peer-to-Peer (P2P) Communication across Network Address Translators(NATs)
+
+
+
+
+
+
+
+
+
+ List of public DNS Servers
+
+
+
+
+ Run a STUN Binding Request against the Public STUN Server in order to discover peer reflexive addresses
+
+ Network Peer reference
+ Network Socket reference
+ Running Task of the STUN Query Procedure
+
+
+
+ Retrieve the Local IP Endpoint currently active
+
+
+
+
+
+ This class implements STUN ERROR-CODE. Defined in RFC RFC 5389 15.6
+
+
+
+
+ Gets or sets error code.
+
+
+
+
+ Gets reason text.
+
+
+
+
+ Default constructor.
+
+ Error code.
+ Reason text.
+
+
+
+ Implements STUN message. Defined in RFC 3489.
+
+
+
+
+ STUN Message Type
+
+
+
+
+ STUN Attribute Type
+
+
+
+
+ Global Stun Related defined values
+
+
+
+
+ IP Address Family
+
+
+
+
+ STUN Message Type
+
+
+
+
+ STUN Transaction ID
+
+
+
+
+ Gets transaction ID.
+
+
+
+
+ Gets or sets IP end point what was actually connected to STUN server. Returns null if not specified.
+
+
+
+
+ Gets or sets user name. Value null means not specified.
+
+
+
+
+ Gets or sets error info. Returns null if not specified.
+
+
+
+
+ Default constructor.
+
+
+
+
+ Parses STUN message from raw data packet.
+
+ Raw STUN message.
+
+
+
+ Converts this to raw STUN packet.
+
+ Returns raw STUN packet.
+
+
+
+ Parses attribute from data.
+
+ SIP message data.
+ Offset in data.
+
+
+
+ Pasrses IP endpoint attribute.
+
+ STUN message data.
+ Offset in data.
+ Returns parsed IP end point.
+
+
+
+ Stores ip end point attribute to buffer.
+
+ Attribute type.
+ IP end point.
+ Buffer where to store.
+ Offset in buffer.
+
+
+
+ This class holds the result of a STUN Query
+
+
+
+
+ Current NAT Type of the peer
+
+
+
+
+ Signal if Result is valid
+
+
+
+
+ Gets public IP end point.
+
+
+
+
+ Gets private IP end point.
+
+
+
+
+ Invalid StunResult Reference
+
+
+
+
+ Default constructor.
+
+ Specifies UDP network type.
+ Public IP end point.
+
+
+
+ List of public STUN Servers
+
+
+
+
+
+
+
+
+
+
+
+
+ Total size in BITS of the buffer
+
+
+
+
+ Current read/write position in BITS inside the Buffer
+
+
+
+
+ Size of written buffer in BYTES
+ Ammount of bytes required considering the total of written bytes
+
+
+
+
+ Total Size in BYTES of the Buffer
+
+
+
+
+ Signal if the buffer was completely written
+
+
+
+
+ Signal if the buffer is overflowing
+
+
+
+
+ Signal if the Buffer is in Write Mode
+
+
+
+
+ Signal if the Buffer is in Read Mode
+
+
+
+
+ Internal Byte Array
+
+
+
+
+ Handles Protocol Msgs sent by the Fusion Plugin
+
+ It converts the byte buffer into usable Protocol Msgs
+
+ Sender Actor of the Protocol Msg, generally the Plugin
+ Object that stores the buffer to be converted
+
+
+
+ Convert the Data object into a usable Byte Buffer.
+ How the conversion happens depends on the the Type of Communicator
+
+
+
+
+ Base Protocol Message.
+
+ This concentrates the basics for serialization and cloning
+
+
+
+
+ Max Lenght of the Custom Data
+
+
+
+
+ Stores the Current Protocol Message version
+
+
+
+
+ Stores the Current Fusion Serialization Version
+
+
+
+
+ Represents an Invalid Version
+
+
+
+
+ Custom data send along side any Protocol Message
+
+
+
+
+ Creates a copy of this Message
+
+
+
+
+
+ Created a new Message with a certain version
+
+ Protocol Message Version
+
+
+
+ Serialize this Message into or from a .
+
+ Buffer to read from or write into the data of the Message
+
+
+
+ Used by the specialized versions of Message to serialize its data
+
+ Buffer to read from or write into the data of the Message
+
+
+
+ Check if this Message is compatible with target versions
+
+ Target Protocol Message Version
+ Target Fusion Serialization Version
+ Enable the Serialization Version Check
+ True if message is compatible with versions
+
+
+
+ Disconnect Protocol Message.
+
+ Used to signal a peer that it will be disconnected from Photon Cloud
+
+
+
+
+ Disconnect Reason
+
+
+
+
+ Disconnect Protocol Message
+
+
+
+
+ Disconnect Protocol Message
+
+ Disconnect Reason
+
+
+
+ List all Disconnect reason used by the Plugin to remove an Actor from the Room
+
+
+
+
+ Abstract disconnect reason
+
+
+
+
+ Used when an event with other code other then the treated ones is received by the plugin
+
+
+
+
+ When the Join Message is not of the Request Type
+
+
+
+
+ When the Join Message does not contain a valid Game Mode
+
+
+
+
+ When any of the major settings of a message does not align with the current settings,
+ like GameMode, Protocol Version, Serialization Version and Peer Mode
+
+
+
+
+ When there is already a Server running on the current Room
+
+
+
+
+ Local Peer Mode
+
+
+
+
+ message Type
+
+
+
+
+ Sent by Peer to Request to Join on the Plugin
+
+
+
+
+ Sent by the Plugin to confirm the Join of a Peer
+
+
+
+
+ Type of Peer which the Peer is starting as
+
+
+
+
+ No Mode Selected, means Invalid
+
+
+
+
+ Server Mode
+
+
+
+
+ Client Mode
+
+
+
+
+ Join Requests sent by the Plugin to request data from the Peer
+
+
+
+
+ No request in the Join Message
+
+
+
+
+ Request the Network Config
+
+
+
+
+ Request for Reflexive Information
+
+
+
+
+ Request to Disable NAT Punch
+
+
+
+
+ Join Message
+
+ It is used to join a Fusion Room Session with extra information about the Peer.
+ This is unrelated to the Join Operation into a Photon Room.
+
+
+
+
+ Join Message Type
+
+
+
+
+ Requested Plugin Game Mode
+
+
+
+
+ Local Peer Mode
+
+
+
+
+ Requests sent from Plugin
+
+
+
+
+ Network Config Msg Type
+
+
+
+
+ Request Network Config
+
+
+
+
+ Response to a Request
+
+
+
+
+ Override Signal for the Network Config
+
+
+
+
+ NetworkConfig Protocol Msgs
+ It is used to serialize the Fusion NetworkConfig and send to Photon Cloud Plugin
+
+
+
+
+ Network Config Type
+
+
+
+
+ JSON Serialized NetworkConfig
+
+
+
+
+ Reflexive Info Msgs
+
+ Used to transport information about the Reflexive Addresses of a Peer
+
+
+
+
+ Actor ID to which this info is related
+
+
+
+
+ Peer Public Address
+
+
+
+
+ Peer Private Address
+
+
+
+
+ Peer NAT Type
+
+
+
+
+ Signal if this Reflexive Info is Valid or not
+
+
+
+
+ Snapshot Message Type
+
+
+
+
+ Invalid/Empty Type
+
+
+
+
+ Base Snapshot
+
+
+
+
+ Confirmation sent by the Plugin
+
+
+
+
+ State Snapshot Protocol Msgs
+
+ Used to sync the current Server Game State with the Photon Cloud Plugin
+ in order to perform an eventual Host Migration
+
+
+
+
+ Tick to which this Snapshot represents
+
+
+
+
+ Last NetworkID from the Server
+
+
+
+
+ Snapshot Type
+
+
+
+
+ Snapshot Total number of bytes stored or expected to be stored on the Snapshot
+
+
+
+
+ Check if the Snapshot has a valid Data based on the expected CRC
+
+ True if the Snapshot has a valid data
+
+
+
+ Get Snapshot internal Data Buffer
+
+ Internal Data Buffer
+
+
+
+ CRC Hash based on the content of the internal data or the expected CRC after all fragments are computed
+
+
+
+
+ Actual Snapshot data
+
+
+
+
+ Snapshot Total Size
+
+
+
+
+ Computes the CRC64 of the current Buffer Data stored on the Snapshot
+
+
+
+
+ Merge the received Snapshot data on this own data
+
+ Snapshot to be merged
+
+
+
+ Create a clone with this Snapshot and reset reference
+
+
+
+
+
+ Start Message Requests
+
+
+
+
+ No Requests
+
+
+
+
+ Peer should connect to Shared Server
+
+
+
+
+ Peer should wait for the Server Reflexive Info
+
+
+
+
+ Start Protocol Msgs
+ Used to signal that Fusion Simulation should start
+
+
+
+
+ Actor ID of the Remote Server
+
+
+
+
+ Start Requests
+
+
+
+
+ Defines the Mode the Plugin should run
+
+
+
+
+ No Game Mode set
+
+
+
+
+ Client Server Game Mode
+
+ The Plugin will act just as a relay, exchanging data between the peers.
+
+
+
+
+ Shared Game Mode
+
+ The Plugin will act as a Fusion Server and will accept remote connections
+
+
+
+
+ Photon Event Codes used by the Fusion to communicate with the Photon Cloud
+
+
+
+
+ Protocol Event Code
+
+
+
+
+ Data Event Code
+
+
+
+
+ Zero (0) means: if it should be the room itself (authorative event).
+
+
+
+
+
+
+ Default CustomData Key of Realtime Events
+
+
+
+
+
+
+ Protocol Messages Serializer
+
+
+
+
+ Serialize a Protocol Message into a BitStream
+
+ Protocol Message to be serialized
+ BitStream containing the Protocol Message
+ True if the Protocol Message was serialized
+
+
+
+ Deserialize a Protocol Message from a BitStream
+
+ Stream containing a Protocol Message
+ Deserialized Protocol Message
+ True if a Protocol Message was deserialized
+
+
+
+ Invalid Version
+
+
+
+
+ Initial Version
+
+
+
+
+ Added Support to Fusion Serialization Version
+
+
+
+
+ Added Custom Data to all Protocol Messages
+
+
+
+
+ Added NAT Type to Reflexive Info
+
+
+
+
+ Added Host Migration Support
+
+
+
+
+ Always points to the Latest version
+
+
+
+
diff --git a/Assets/Photon/Fusion/Assemblies/Fusion.Sockets.xml.meta b/Assets/Photon/Fusion/Assemblies/Fusion.Sockets.xml.meta
new file mode 100644
index 0000000..ec1d311
--- /dev/null
+++ b/Assets/Photon/Fusion/Assemblies/Fusion.Sockets.xml.meta
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: 43a4edfa145535c4d80df040678f3746
+TextScriptImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Photon/Fusion/Editor.meta b/Assets/Photon/Fusion/Editor.meta
new file mode 100644
index 0000000..ab19196
--- /dev/null
+++ b/Assets/Photon/Fusion/Editor.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 16e8492301418144dac7bf2bafdaa982
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Photon/Fusion/Editor/Resources.meta b/Assets/Photon/Fusion/Editor/Resources.meta
new file mode 100644
index 0000000..8ab87e8
--- /dev/null
+++ b/Assets/Photon/Fusion/Editor/Resources.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: db14742ab878fc64f817a77ca9d3a69d
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Photon/Fusion/Editor/Resources/Assembly-CSharp.xml b/Assets/Photon/Fusion/Editor/Resources/Assembly-CSharp.xml
new file mode 100644
index 0000000..4d23714
--- /dev/null
+++ b/Assets/Photon/Fusion/Editor/Resources/Assembly-CSharp.xml
@@ -0,0 +1,647 @@
+
+
+
+ Assembly-CSharp
+
+
+
+
+ Prototyping component for spawning Player avatars.
+
+
+
+
+ Which section of the Fusion engine is being monitored. In combination with StatId, this selects the stat being monitored.
+
+
+
+
+ The specific stat being monitored.
+
+
+
+
+ Available if AllowClientObjects is enabled in the NetworkProjectConfig, this allows players to be spawned with client StateAuthority.
+
+
+
+
+ The aspect ratio this element should maintain. 2 = twice as wide as tall.
+
+
+
+
+ If true, all messages will be prefixed with [Fusion] tag
+
+
+
+
+ If true, some parts of messages will be enclosed with <color> tags.
+
+
+
+
+ Color of the global prefix (see ).
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Converts object to a color . By default works only for and uses and fields.
+
+
+
+
+ Collect the bounds of the indicated types (MeshRenderer and/or Collider) on the object and all of its children, and returns bounds that are a sum of all of those.
+
+ GameObject to start search from.
+ The types of bounds to factor in.
+ Whether to search all children for bounds.
+
+
+
+
+ Sets the default teleport interpolation velocity to be the CC's current velocity.
+ For more details on how this field is used, see .
+
+
+
+
+ Sets the default teleport interpolation angular velocity to be the CC's rotation speed on the Z axis.
+ For more details on how this field is used, see .
+
+
+
+
+ Basic implementation of a jump impulse (immediately integrates a vertical component to Velocity).
+ Jump even if not in a grounded state.
+ Optional field to override the jump impulse. If null, is used.
+
+
+
+
+ Basic implementation of a character controller's movement function based on an intended direction.
+ Intended movement direction, subject to movement query, acceleration and max speed values.
+
+
+
+
+ Companion component for , which automatically faces this GameObject toward the supplied Camera. If Camera == null, will face towards Camera.main.
+
+
+
+
+ Force a particular camera to billboard this object toward. Leave null to use Camera.main.
+
+
+
+
+ Flag interface to identify GameObjects that should be used as markers for spawn points.
+ Used by to locate spawn points in a scene.
+
+
+
+
+ Values greater than 0 will limit the meter to a range of 0 to MeterMax.
+ Value of 0 will adjust the max to the largest value occurance.
+
+
+
+
+ Exposes the UI labels and controls of , so they may be modified if customizing this graph.
+
+
+
+
+ A simple example of Fusion input collection. This component should be on the same GameObject as the .
+
+
+
+
+ Example definition of an INetworkStruct.
+
+
+
+
+ Derive from this class for different types.
+ Derived manager will only find that spawn point type, allowing for separate handling of player spawn points from other spawn-able items such as AI.
+
+
+
+
+
+ How spawn points will be selected from the collection.
+
+
+
+
+ LayerMask for which physics layers should be used for blocked spawn point checks.
+
+
+
+
+ The search radius used for detecting if a spawn point is blocked by an object.
+
+
+
+
+ Serialized collection of all of the type T found in the same scene as this component.
+
+
+
+
+ Find all instances in the same scene as this spawner.
+ This should only be done at development time if using the Photon relay for any spawn logic.
+
+
+
+
+ Select the next spawn point using the defined . Override this method to expand on this, such as detecting if a spawn point is blocked.
+
+
+
+
+ Handling for if all spawn points are blocked.
+
+
+
+
+
+ Cycles through all remaining spawn points searching for unblocked. Will return null if all points return == true.
+
+ The index of the first tried SpawnPoints[] element, which was blocked.
+ ( index, )
+
+
+
+ Override this method with any logic for checking if a spawn point is blocked.
+
+
+
+
+
+
+ Interface for behaviours.
+
+
+
+
+ Flag component to identify GameObjects that should be used as markers for spawn points.
+
+
+
+
+ Prototyping component for Fusion. Updates the Player's AOI every tick to be a radius around this object.
+
+
+
+
+ Radius around this GameObject that defines the Area Of Interest for the InputAuthority of the object.
+ The InputAuthority player of this ,
+ will receive updates for any other within this radius.
+
+
+
+
+ Creates and controls a Canvas with one or multiple telemetry graphs. Can be created as a scene object or prefab,
+ or be created at runtime using the methods. If created as the child of a
+ then will automatically be set to true.
+
+
+
+
+ Options for displaying stats as screen overlays or world GameObjects.
+
+
+
+
+ Predefined layout default options.
+
+
+
+
+ Creates a new GameObject with a component, attaches it to any supplied parent, and generates Canvas/Graphs.
+
+
+ Generated FusionStats component and GameObject will be added as a child of this transform.
+ Uses a predefined position.
+ The network stats to be enabled. If left null, default statistics will be used.
+ The simulation stats to be enabled. If left null, default statistics will be used.
+
+
+
+
+ The gets the default SimStats. Some are only intended for Fusion internal development and aren't useful to users.
+
+
+
+
+ Interval (in seconds) between Graph redraws. Higher values (longer intervals) reduce CPU overhead, draw calls and garbage collection.
+
+
+
+
+ Selects between displaying Canvas as screen overlay, or a world GameObject.
+
+
+
+
+ Selects between displaying Canvas as screen overlay, or a world GameObject.
+
+
+
+
+ Enables text labels for the control buttons.
+
+
+
+
+ Enables text labels for the control buttons.
+
+
+
+
+ Height of button region at top of the stats panel. Values less than or equal to 0 hide the buttons, and reduce the header size.
+
+
+
+
+ Height of button region at top of the stats panel. Values less than or equal to 0 hide the buttons, and reduce the header size.
+
+
+
+
+ The size of the canvas when is set to .
+
+
+
+
+ The distance on the Z axis the canvas will be positioned. Allows moving the canvas in front of or behind the parent GameObject.
+
+
+
+
+ The Rect which defines the position of the stats canvas on a GameObject. Sizes are normalized percentages.(ranges of 0f-1f).
+
+
+
+
+ The Rect which defines the position of the stats canvas overlay on the screen. Sizes are normalized percentages.(ranges of 0f-1f).
+
+
+
+
+ value which all child components will use if their value is set to Auto.
+
+
+
+
+ UI Text on FusionGraphs can only overlay the bar graph if the canvas is perfectly facing the camera.
+ Any other angles will result in ZBuffer fighting between the text and the graph bar shader.
+ For uses where perfect camera billboarding is not possible (such as VR), this toggle prevents FusionGraph layouts being used where text and graphs overlap.
+ Normally leave this unchecked, unless you are experiencing corrupted text rendering.
+
+
+
+
+ Disables the bar graph in , and uses a text only layout.
+ Enable this if is not rendering correctly in VR.
+
+
+
+
+ Force graphs layout to use X number of columns.
+
+
+
+
+ If is set to zero, then columns will automatically be added as needed to limit graphs to this width or less.
+
+
+
+
+ If is set to zero, then columns will automatically be added as needed to limit graphs to this width or less.
+
+
+
+
+ Enables/Disables all NetworkObject related elements.
+
+
+
+
+ The source for any specific telemetry.
+
+
+
+
+ Height of Object title region at top of the stats panel.
+
+
+
+
+ Height of Object info region at top of the stats panel.
+
+
+
+
+ Height of Object info region at top of the stats panel.
+
+
+
+
+ The currently associated with this component and graphs.
+
+
+
+
+ Initializes a for all available stats, even if not initially included.
+ If disabled, graphs added after initialization will be added to the bottom of the interface stack.
+
+
+
+
+ When is null and no exists in the current scene, FusionStats will continuously attempt to find and connect to an active which matches these indicated modes.
+
+
+
+
+ Selects which NetworkObject stats should be displayed.
+
+
+
+
+ Selects which NetConnection stats should be displayed.
+
+
+
+
+ Selects which Simulation stats should be displayed.
+
+
+
+
+ Automatically destroys this GameObject if the associated runner is null or inactive.
+ Otherwise attempts will continuously be made to find an new active runner which is running in specified by , and connect to that.
+
+
+
+
+ Only one instance with the can exist. Will destroy any clones on Awake.
+
+
+
+
+ Identifier used to enforce single instances of when running in Multi-Peer mode.
+ When is enabled, only one instance of with this GUID will be active at any time,
+ regardless of the total number of peers running.
+
+
+
+
+ The color used for the telemetry graph data.
+
+
+
+
+ The color used for the telemetry graph data.
+
+
+
+
+ The color used for the telemetry graph data.
+
+
+
+
+ The color used for the telemetry graph data.
+
+
+
+
+ Companion component for . Automatically added as needed for rendering in-game networking IMGUI.
+
+
+
+
+ When enabled, the in-game user interface buttons can be activated with the keys H (Host), S (Server) and C (Client).
+
+
+
+
+ The GUISkin to use as the base for the scalable in-game UI.
+
+
+
+
+ A Fusion prototyping class for starting up basic networking. Add this component to your startup scene, and supply a .
+ Can be set to automatically startup the network, display an in-game menu, or allow simplified start calls like .
+
+
+
+
+ Selection for how will behave at startup.
+
+
+
+
+ The current stage of connection or shutdown.
+
+
+
+
+ Supply a Prefab or a scene object which has the component on it,
+ as well as any runner dependent components which implement ,
+ such as or your own custom INetworkInput implementations.
+
+
+
+
+ Select how network startup will be triggered. Automatically, by in-game menu selection, or exclusively by script.
+
+
+
+
+ When is set to , this option selects if the
+ will be started as a dedicated server, or as a host (which is a server with a local player).
+
+
+
+
+ will not render GUI elements while == .
+
+
+
+
+ The number of client instances that will be created if running in Mulit-Peer Mode.
+ When using the Select start mode, this number will be the default value for the additional clients option box.
+
+
+
+
+ The port that server/host will use.
+
+
+
+
+ The default room name to use when connecting to photon cloud.
+
+
+
+
+ Will automatically enable once peers have finished connecting.
+
+
+
+
+ The Scene that will be loaded after network shutdown completes (all peers have disconnected).
+ If this field is null or invalid, will be set to the current scene when runs Awake().
+
+
+
+
+ Indicates which step of the startup process is currently in.
+
+
+
+
+ The index number used for the last created peer.
+
+
+
+
+ The server mode that was used for initial startup. Used to inform UI which client modes should be available.
+
+
+
+
+ Start a single player instance.
+
+
+
+
+ Start a server instance.
+
+
+
+
+ Start a host instance. This is a server instance, with a local player.
+
+
+
+
+ Start a client instance.
+
+
+
+
+ Start a Fusion server instance, and the number of client instances indicated by .
+ InstanceMode must be set to Multi-Peer mode, as this requires multiple instances.
+
+
+
+
+ Start a Fusion host instance, and the number of client instances indicated by .
+ InstanceMode must be set to Multi-Peer mode, as this requires multiple instances.
+
+
+
+
+ Start a Fusion server instance, and the indicated number of client instances.
+ InstanceMode must be set to Multi-Peer mode, as this requires multiple instances.
+
+
+
+
+ Start a Fusion host instance (server with local player), and the indicated number of additional client instances.
+ InstanceMode must be set to Multi-Peer mode, as this requires multiple instances.
+
+
+
+
+ Start a Fusion host instance (server with local player), and the indicated number of additional client instances.
+ InstanceMode must be set to Multi-Peer mode, as this requires multiple instances.
+
+
+
+
+ Start as Room on the Photon cloud, and connects as one or more clients.
+
+
+
+
+
+ In-Game IMGUI style used for the interface.
+
+
+
+
+ Get the custom scalable skin, already resized to the current screen. Provides the height, width, padding and margin used.
+
+
+
+
+
+ Modifies a skin to make it scale with screen height.
+
+
+ Returns (height, width, padding, top-margin, left-box-margin) values applied to the GuiSkin
+
+
+
+ Individual graph components generated and used by .
+
+
+
+
+ Select between automatic formating (based on size and aspect ratio of the graph) and manual selection of the various graph layouts available.
+
+
+
+
+ Controls if the graph shader will render. Currently the graph shader only works in Overlay mode, so if forced to show Always here, it will not render correctly in 3d space.
+
+
+
+
+ Padding added to text and other layout objects.
+
+
+
+
+ The graph shaded area (which is only visible in Overlay mode) will expand to the full extends of the component when this is enabled, regardless of size.
+ When false, the graph will automatically expand only as needed.
+
+
+
+
+ Exposes the UI labels and controls of , so they may be modified if customizing this graph.
+
+
+
+
+ Returns true if the graph rendered. False if the size was too small and the graph was hidden.
+
+
+
+
+
+ Creates a new GameObject with and attaches it to the specified parent.
+
+
+
+
+ Generates the Graph UI for this .
+
+
+
+
diff --git a/Assets/Photon/Fusion/Editor/Resources/Assembly-CSharp.xml.meta b/Assets/Photon/Fusion/Editor/Resources/Assembly-CSharp.xml.meta
new file mode 100644
index 0000000..a831bc7
--- /dev/null
+++ b/Assets/Photon/Fusion/Editor/Resources/Assembly-CSharp.xml.meta
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: 98ca5aa6754ce124689e0c452916e9d4
+TextScriptImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Photon/Fusion/Editor/Resources/ComponentHeaderGraphics.meta b/Assets/Photon/Fusion/Editor/Resources/ComponentHeaderGraphics.meta
new file mode 100644
index 0000000..a2adf5a
--- /dev/null
+++ b/Assets/Photon/Fusion/Editor/Resources/ComponentHeaderGraphics.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 1dca4e484cd4200468b640fdf0fe98df
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Photon/Fusion/Editor/Resources/ComponentHeaderGraphics/Fonts.meta b/Assets/Photon/Fusion/Editor/Resources/ComponentHeaderGraphics/Fonts.meta
new file mode 100644
index 0000000..c2f1a80
--- /dev/null
+++ b/Assets/Photon/Fusion/Editor/Resources/ComponentHeaderGraphics/Fonts.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 5ccd8b3061f54ad4fba6f9abc1a63ec6
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Photon/Fusion/Editor/Resources/ComponentHeaderGraphics/Fonts/OFL.txt b/Assets/Photon/Fusion/Editor/Resources/ComponentHeaderGraphics/Fonts/OFL.txt
new file mode 100644
index 0000000..6485417
--- /dev/null
+++ b/Assets/Photon/Fusion/Editor/Resources/ComponentHeaderGraphics/Fonts/OFL.txt
@@ -0,0 +1,93 @@
+Copyright 2016 The Oswald Project Authors (https://github.com/googlefonts/OswaldFont)
+
+This Font Software is licensed under the SIL Open Font License, Version 1.1.
+This license is copied below, and is also available with a FAQ at:
+http://scripts.sil.org/OFL
+
+
+-----------------------------------------------------------
+SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
+-----------------------------------------------------------
+
+PREAMBLE
+The goals of the Open Font License (OFL) are to stimulate worldwide
+development of collaborative font projects, to support the font creation
+efforts of academic and linguistic communities, and to provide a free and
+open framework in which fonts may be shared and improved in partnership
+with others.
+
+The OFL allows the licensed fonts to be used, studied, modified and
+redistributed freely as long as they are not sold by themselves. The
+fonts, including any derivative works, can be bundled, embedded,
+redistributed and/or sold with any software provided that any reserved
+names are not used by derivative works. The fonts and derivatives,
+however, cannot be released under any other type of license. The
+requirement for fonts to remain under this license does not apply
+to any document created using the fonts or their derivatives.
+
+DEFINITIONS
+"Font Software" refers to the set of files released by the Copyright
+Holder(s) under this license and clearly marked as such. This may
+include source files, build scripts and documentation.
+
+"Reserved Font Name" refers to any names specified as such after the
+copyright statement(s).
+
+"Original Version" refers to the collection of Font Software components as
+distributed by the Copyright Holder(s).
+
+"Modified Version" refers to any derivative made by adding to, deleting,
+or substituting -- in part or in whole -- any of the components of the
+Original Version, by changing formats or by porting the Font Software to a
+new environment.
+
+"Author" refers to any designer, engineer, programmer, technical
+writer or other person who contributed to the Font Software.
+
+PERMISSION & CONDITIONS
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of the Font Software, to use, study, copy, merge, embed, modify,
+redistribute, and sell modified and unmodified copies of the Font
+Software, subject to the following conditions:
+
+1) Neither the Font Software nor any of its individual components,
+in Original or Modified Versions, may be sold by itself.
+
+2) Original or Modified Versions of the Font Software may be bundled,
+redistributed and/or sold with any software, provided that each copy
+contains the above copyright notice and this license. These can be
+included either as stand-alone text files, human-readable headers or
+in the appropriate machine-readable metadata fields within text or
+binary files as long as those fields can be easily viewed by the user.
+
+3) No Modified Version of the Font Software may use the Reserved Font
+Name(s) unless explicit written permission is granted by the corresponding
+Copyright Holder. This restriction only applies to the primary font name as
+presented to the users.
+
+4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
+Software shall not be used to promote, endorse or advertise any
+Modified Version, except to acknowledge the contribution(s) of the
+Copyright Holder(s) and the Author(s) or with their explicit written
+permission.
+
+5) The Font Software, modified or unmodified, in part or in whole,
+must be distributed entirely under this license, and must not be
+distributed under any other license. The requirement for fonts to
+remain under this license does not apply to any document created
+using the Font Software.
+
+TERMINATION
+This license becomes null and void if any of the above conditions are
+not met.
+
+DISCLAIMER
+THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
+OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
+COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
+DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
+OTHER DEALINGS IN THE FONT SOFTWARE.
diff --git a/Assets/Photon/Fusion/Editor/Resources/ComponentHeaderGraphics/Fonts/OFL.txt.meta b/Assets/Photon/Fusion/Editor/Resources/ComponentHeaderGraphics/Fonts/OFL.txt.meta
new file mode 100644
index 0000000..ebf1b08
--- /dev/null
+++ b/Assets/Photon/Fusion/Editor/Resources/ComponentHeaderGraphics/Fonts/OFL.txt.meta
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: 9ab706fba9f8d8a4e8ecbd1b18087710
+TextScriptImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Photon/Fusion/Editor/Resources/ComponentHeaderGraphics/Fonts/Oswald-Header.ttf b/Assets/Photon/Fusion/Editor/Resources/ComponentHeaderGraphics/Fonts/Oswald-Header.ttf
new file mode 100644
index 0000000..7601ddd
Binary files /dev/null and b/Assets/Photon/Fusion/Editor/Resources/ComponentHeaderGraphics/Fonts/Oswald-Header.ttf differ
diff --git a/Assets/Photon/Fusion/Editor/Resources/ComponentHeaderGraphics/Fonts/Oswald-Header.ttf.meta b/Assets/Photon/Fusion/Editor/Resources/ComponentHeaderGraphics/Fonts/Oswald-Header.ttf.meta
new file mode 100644
index 0000000..33307e1
--- /dev/null
+++ b/Assets/Photon/Fusion/Editor/Resources/ComponentHeaderGraphics/Fonts/Oswald-Header.ttf.meta
@@ -0,0 +1,22 @@
+fileFormatVersion: 2
+guid: bc4170141f0283e4c80ff0f668490e67
+TrueTypeFontImporter:
+ externalObjects: {}
+ serializedVersion: 4
+ fontSize: 17
+ forceTextureCase: -2
+ characterSpacing: 0
+ characterPadding: 1
+ includeFontData: 1
+ fontNames:
+ - Oswald
+ fallbackFontReferences:
+ - {fileID: 12800000, guid: a30f933bed2f6504bae572c0ef6aaeb7, type: 3}
+ customCharacters:
+ fontRenderingMode: 0
+ ascentCalculationMode: 1
+ useLegacyBoundsCalculation: 0
+ shouldRoundAdvanceValue: 1
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Photon/Fusion/Editor/Resources/icons.meta b/Assets/Photon/Fusion/Editor/Resources/icons.meta
new file mode 100644
index 0000000..fa74251
--- /dev/null
+++ b/Assets/Photon/Fusion/Editor/Resources/icons.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: caefff3f1d2f12f4d9356c622cdafb29
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Photon/Fusion/Editor/Resources/icons/correct-icon.png b/Assets/Photon/Fusion/Editor/Resources/icons/correct-icon.png
new file mode 100644
index 0000000..c07250f
Binary files /dev/null and b/Assets/Photon/Fusion/Editor/Resources/icons/correct-icon.png differ
diff --git a/Assets/Photon/Fusion/Editor/Resources/icons/correct-icon.png.meta b/Assets/Photon/Fusion/Editor/Resources/icons/correct-icon.png.meta
new file mode 100644
index 0000000..b686e33
--- /dev/null
+++ b/Assets/Photon/Fusion/Editor/Resources/icons/correct-icon.png.meta
@@ -0,0 +1,120 @@
+fileFormatVersion: 2
+guid: 8958b450dee843f41a091a734ed43ccd
+TextureImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 11
+ mipmaps:
+ mipMapMode: 0
+ enableMipMap: 0
+ sRGBTexture: 1
+ linearTexture: 0
+ fadeOut: 0
+ borderMipMap: 0
+ mipMapsPreserveCoverage: 0
+ alphaTestReferenceValue: 0.5
+ mipMapFadeDistanceStart: 1
+ mipMapFadeDistanceEnd: 3
+ bumpmap:
+ convertToNormalMap: 0
+ externalNormalMap: 0
+ heightScale: 0.25
+ normalMapFilter: 0
+ isReadable: 0
+ streamingMipmaps: 0
+ streamingMipmapsPriority: 0
+ vTOnly: 0
+ grayScaleToAlpha: 0
+ generateCubemap: 6
+ cubemapConvolution: 0
+ seamlessCubemap: 0
+ textureFormat: 1
+ maxTextureSize: 2048
+ textureSettings:
+ serializedVersion: 2
+ filterMode: 1
+ aniso: 1
+ mipBias: 0
+ wrapU: 1
+ wrapV: 1
+ wrapW: 0
+ nPOTScale: 0
+ lightmap: 0
+ compressionQuality: 50
+ spriteMode: 0
+ spriteExtrude: 1
+ spriteMeshType: 1
+ alignment: 0
+ spritePivot: {x: 0.5, y: 0.5}
+ spritePixelsToUnits: 100
+ spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+ spriteGenerateFallbackPhysicsShape: 1
+ alphaUsage: 1
+ alphaIsTransparency: 1
+ spriteTessellationDetail: -1
+ textureType: 2
+ textureShape: 1
+ singleChannelComponent: 0
+ flipbookRows: 1
+ flipbookColumns: 1
+ maxTextureSizeSet: 0
+ compressionQualitySet: 0
+ textureFormatSet: 0
+ ignorePngGamma: 0
+ applyGammaDecoding: 0
+ platformSettings:
+ - serializedVersion: 3
+ buildTarget: DefaultTexturePlatform
+ maxTextureSize: 2048
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 0
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ - serializedVersion: 3
+ buildTarget: Standalone
+ maxTextureSize: 2048
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 0
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ - serializedVersion: 3
+ buildTarget: Android
+ maxTextureSize: 2048
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 0
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ spriteSheet:
+ serializedVersion: 2
+ sprites: []
+ outline: []
+ physicsShape: []
+ bones: []
+ spriteID:
+ internalID: 0
+ vertices: []
+ indices:
+ edges: []
+ weights: []
+ secondaryTextures: []
+ spritePackingTag:
+ pSDRemoveMatte: 0
+ pSDShowRemoveMatteOption: 0
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Photon/Fusion/Editor/Resources/icons/input-disabled-icon.png b/Assets/Photon/Fusion/Editor/Resources/icons/input-disabled-icon.png
new file mode 100644
index 0000000..30200c1
Binary files /dev/null and b/Assets/Photon/Fusion/Editor/Resources/icons/input-disabled-icon.png differ
diff --git a/Assets/Photon/Fusion/Editor/Resources/icons/input-disabled-icon.png.meta b/Assets/Photon/Fusion/Editor/Resources/icons/input-disabled-icon.png.meta
new file mode 100644
index 0000000..10975f1
--- /dev/null
+++ b/Assets/Photon/Fusion/Editor/Resources/icons/input-disabled-icon.png.meta
@@ -0,0 +1,120 @@
+fileFormatVersion: 2
+guid: 9c44338dd0d7004459e02469c0074de2
+TextureImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 11
+ mipmaps:
+ mipMapMode: 0
+ enableMipMap: 0
+ sRGBTexture: 1
+ linearTexture: 0
+ fadeOut: 0
+ borderMipMap: 0
+ mipMapsPreserveCoverage: 0
+ alphaTestReferenceValue: 0.5
+ mipMapFadeDistanceStart: 1
+ mipMapFadeDistanceEnd: 3
+ bumpmap:
+ convertToNormalMap: 0
+ externalNormalMap: 0
+ heightScale: 0.25
+ normalMapFilter: 0
+ isReadable: 0
+ streamingMipmaps: 0
+ streamingMipmapsPriority: 0
+ vTOnly: 0
+ grayScaleToAlpha: 0
+ generateCubemap: 6
+ cubemapConvolution: 0
+ seamlessCubemap: 0
+ textureFormat: 1
+ maxTextureSize: 2048
+ textureSettings:
+ serializedVersion: 2
+ filterMode: 1
+ aniso: 1
+ mipBias: 0
+ wrapU: 1
+ wrapV: 1
+ wrapW: 0
+ nPOTScale: 0
+ lightmap: 0
+ compressionQuality: 50
+ spriteMode: 0
+ spriteExtrude: 1
+ spriteMeshType: 1
+ alignment: 0
+ spritePivot: {x: 0.5, y: 0.5}
+ spritePixelsToUnits: 100
+ spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+ spriteGenerateFallbackPhysicsShape: 1
+ alphaUsage: 1
+ alphaIsTransparency: 1
+ spriteTessellationDetail: -1
+ textureType: 2
+ textureShape: 1
+ singleChannelComponent: 0
+ flipbookRows: 1
+ flipbookColumns: 1
+ maxTextureSizeSet: 0
+ compressionQualitySet: 0
+ textureFormatSet: 0
+ ignorePngGamma: 0
+ applyGammaDecoding: 0
+ platformSettings:
+ - serializedVersion: 3
+ buildTarget: DefaultTexturePlatform
+ maxTextureSize: 2048
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 0
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ - serializedVersion: 3
+ buildTarget: Standalone
+ maxTextureSize: 2048
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 0
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ - serializedVersion: 3
+ buildTarget: Android
+ maxTextureSize: 2048
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 0
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ spriteSheet:
+ serializedVersion: 2
+ sprites: []
+ outline: []
+ physicsShape: []
+ bones: []
+ spriteID:
+ internalID: 0
+ vertices: []
+ indices:
+ edges: []
+ weights: []
+ secondaryTextures: []
+ spritePackingTag:
+ pSDRemoveMatte: 0
+ pSDShowRemoveMatteOption: 0
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Photon/Fusion/Editor/Resources/icons/input-enabled-icon.png b/Assets/Photon/Fusion/Editor/Resources/icons/input-enabled-icon.png
new file mode 100644
index 0000000..5c3d12a
Binary files /dev/null and b/Assets/Photon/Fusion/Editor/Resources/icons/input-enabled-icon.png differ
diff --git a/Assets/Photon/Fusion/Editor/Resources/icons/input-enabled-icon.png.meta b/Assets/Photon/Fusion/Editor/Resources/icons/input-enabled-icon.png.meta
new file mode 100644
index 0000000..a150701
--- /dev/null
+++ b/Assets/Photon/Fusion/Editor/Resources/icons/input-enabled-icon.png.meta
@@ -0,0 +1,120 @@
+fileFormatVersion: 2
+guid: 5a71cb696f8dd5042bc4c110df660dea
+TextureImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 11
+ mipmaps:
+ mipMapMode: 0
+ enableMipMap: 0
+ sRGBTexture: 1
+ linearTexture: 0
+ fadeOut: 0
+ borderMipMap: 0
+ mipMapsPreserveCoverage: 0
+ alphaTestReferenceValue: 0.5
+ mipMapFadeDistanceStart: 1
+ mipMapFadeDistanceEnd: 3
+ bumpmap:
+ convertToNormalMap: 0
+ externalNormalMap: 0
+ heightScale: 0.25
+ normalMapFilter: 0
+ isReadable: 0
+ streamingMipmaps: 0
+ streamingMipmapsPriority: 0
+ vTOnly: 0
+ grayScaleToAlpha: 0
+ generateCubemap: 6
+ cubemapConvolution: 0
+ seamlessCubemap: 0
+ textureFormat: 1
+ maxTextureSize: 2048
+ textureSettings:
+ serializedVersion: 2
+ filterMode: 1
+ aniso: 1
+ mipBias: 0
+ wrapU: 1
+ wrapV: 1
+ wrapW: 0
+ nPOTScale: 0
+ lightmap: 0
+ compressionQuality: 50
+ spriteMode: 2
+ spriteExtrude: 1
+ spriteMeshType: 1
+ alignment: 0
+ spritePivot: {x: 0.5, y: 0.5}
+ spritePixelsToUnits: 100
+ spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+ spriteGenerateFallbackPhysicsShape: 1
+ alphaUsage: 1
+ alphaIsTransparency: 1
+ spriteTessellationDetail: -1
+ textureType: 2
+ textureShape: 1
+ singleChannelComponent: 0
+ flipbookRows: 1
+ flipbookColumns: 1
+ maxTextureSizeSet: 0
+ compressionQualitySet: 0
+ textureFormatSet: 0
+ ignorePngGamma: 0
+ applyGammaDecoding: 0
+ platformSettings:
+ - serializedVersion: 3
+ buildTarget: DefaultTexturePlatform
+ maxTextureSize: 2048
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 0
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ - serializedVersion: 3
+ buildTarget: Standalone
+ maxTextureSize: 2048
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 0
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ - serializedVersion: 3
+ buildTarget: Android
+ maxTextureSize: 2048
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 0
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ spriteSheet:
+ serializedVersion: 2
+ sprites: []
+ outline: []
+ physicsShape: []
+ bones: []
+ spriteID:
+ internalID: 0
+ vertices: []
+ indices:
+ edges: []
+ weights: []
+ secondaryTextures: []
+ spritePackingTag:
+ pSDRemoveMatte: 0
+ pSDShowRemoveMatteOption: 0
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Photon/Fusion/Editor/Resources/icons/networked-property-icon.png b/Assets/Photon/Fusion/Editor/Resources/icons/networked-property-icon.png
new file mode 100644
index 0000000..6d8dd58
Binary files /dev/null and b/Assets/Photon/Fusion/Editor/Resources/icons/networked-property-icon.png differ
diff --git a/Assets/Photon/Fusion/Editor/Resources/icons/networked-property-icon.png.meta b/Assets/Photon/Fusion/Editor/Resources/icons/networked-property-icon.png.meta
new file mode 100644
index 0000000..fe92167
--- /dev/null
+++ b/Assets/Photon/Fusion/Editor/Resources/icons/networked-property-icon.png.meta
@@ -0,0 +1,108 @@
+fileFormatVersion: 2
+guid: 9d1a679741319604a85979784032907e
+TextureImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 11
+ mipmaps:
+ mipMapMode: 0
+ enableMipMap: 0
+ sRGBTexture: 1
+ linearTexture: 0
+ fadeOut: 0
+ borderMipMap: 0
+ mipMapsPreserveCoverage: 0
+ alphaTestReferenceValue: 0.5
+ mipMapFadeDistanceStart: 1
+ mipMapFadeDistanceEnd: 3
+ bumpmap:
+ convertToNormalMap: 0
+ externalNormalMap: 0
+ heightScale: 0.25
+ normalMapFilter: 0
+ isReadable: 0
+ streamingMipmaps: 0
+ streamingMipmapsPriority: 0
+ vTOnly: 0
+ grayScaleToAlpha: 0
+ generateCubemap: 6
+ cubemapConvolution: 0
+ seamlessCubemap: 0
+ textureFormat: 1
+ maxTextureSize: 2048
+ textureSettings:
+ serializedVersion: 2
+ filterMode: 1
+ aniso: 1
+ mipBias: 0
+ wrapU: 1
+ wrapV: 1
+ wrapW: 0
+ nPOTScale: 0
+ lightmap: 0
+ compressionQuality: 50
+ spriteMode: 1
+ spriteExtrude: 1
+ spriteMeshType: 1
+ alignment: 0
+ spritePivot: {x: 0.5, y: 0.5}
+ spritePixelsToUnits: 100
+ spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+ spriteGenerateFallbackPhysicsShape: 1
+ alphaUsage: 1
+ alphaIsTransparency: 1
+ spriteTessellationDetail: -1
+ textureType: 2
+ textureShape: 1
+ singleChannelComponent: 0
+ flipbookRows: 1
+ flipbookColumns: 1
+ maxTextureSizeSet: 0
+ compressionQualitySet: 0
+ textureFormatSet: 0
+ ignorePngGamma: 0
+ applyGammaDecoding: 0
+ platformSettings:
+ - serializedVersion: 3
+ buildTarget: DefaultTexturePlatform
+ maxTextureSize: 2048
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 0
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ - serializedVersion: 3
+ buildTarget: Standalone
+ maxTextureSize: 2048
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 0
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ spriteSheet:
+ serializedVersion: 2
+ sprites: []
+ outline: []
+ physicsShape: []
+ bones: []
+ spriteID:
+ internalID: 0
+ vertices: []
+ indices:
+ edges: []
+ weights: []
+ secondaryTextures: []
+ spritePackingTag:
+ pSDRemoveMatte: 0
+ pSDShowRemoveMatteOption: 0
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Photon/Fusion/Editor/Resources/icons/visible-disabled-icon.png b/Assets/Photon/Fusion/Editor/Resources/icons/visible-disabled-icon.png
new file mode 100644
index 0000000..b0b6eb2
Binary files /dev/null and b/Assets/Photon/Fusion/Editor/Resources/icons/visible-disabled-icon.png differ
diff --git a/Assets/Photon/Fusion/Editor/Resources/icons/visible-disabled-icon.png.meta b/Assets/Photon/Fusion/Editor/Resources/icons/visible-disabled-icon.png.meta
new file mode 100644
index 0000000..d95e5b8
--- /dev/null
+++ b/Assets/Photon/Fusion/Editor/Resources/icons/visible-disabled-icon.png.meta
@@ -0,0 +1,120 @@
+fileFormatVersion: 2
+guid: d09bc19b7d97b4b43a1e646890703e08
+TextureImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 11
+ mipmaps:
+ mipMapMode: 0
+ enableMipMap: 0
+ sRGBTexture: 1
+ linearTexture: 0
+ fadeOut: 0
+ borderMipMap: 0
+ mipMapsPreserveCoverage: 0
+ alphaTestReferenceValue: 0.5
+ mipMapFadeDistanceStart: 1
+ mipMapFadeDistanceEnd: 3
+ bumpmap:
+ convertToNormalMap: 0
+ externalNormalMap: 0
+ heightScale: 0.25
+ normalMapFilter: 0
+ isReadable: 0
+ streamingMipmaps: 0
+ streamingMipmapsPriority: 0
+ vTOnly: 0
+ grayScaleToAlpha: 0
+ generateCubemap: 6
+ cubemapConvolution: 0
+ seamlessCubemap: 0
+ textureFormat: 1
+ maxTextureSize: 2048
+ textureSettings:
+ serializedVersion: 2
+ filterMode: 1
+ aniso: 1
+ mipBias: 0
+ wrapU: 1
+ wrapV: 1
+ wrapW: 0
+ nPOTScale: 0
+ lightmap: 0
+ compressionQuality: 50
+ spriteMode: 0
+ spriteExtrude: 1
+ spriteMeshType: 1
+ alignment: 0
+ spritePivot: {x: 0.5, y: 0.5}
+ spritePixelsToUnits: 100
+ spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+ spriteGenerateFallbackPhysicsShape: 1
+ alphaUsage: 1
+ alphaIsTransparency: 1
+ spriteTessellationDetail: -1
+ textureType: 2
+ textureShape: 1
+ singleChannelComponent: 0
+ flipbookRows: 1
+ flipbookColumns: 1
+ maxTextureSizeSet: 0
+ compressionQualitySet: 0
+ textureFormatSet: 0
+ ignorePngGamma: 0
+ applyGammaDecoding: 0
+ platformSettings:
+ - serializedVersion: 3
+ buildTarget: DefaultTexturePlatform
+ maxTextureSize: 2048
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 0
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ - serializedVersion: 3
+ buildTarget: Standalone
+ maxTextureSize: 2048
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 0
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ - serializedVersion: 3
+ buildTarget: Android
+ maxTextureSize: 2048
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 0
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ spriteSheet:
+ serializedVersion: 2
+ sprites: []
+ outline: []
+ physicsShape: []
+ bones: []
+ spriteID:
+ internalID: 0
+ vertices: []
+ indices:
+ edges: []
+ weights: []
+ secondaryTextures: []
+ spritePackingTag:
+ pSDRemoveMatte: 0
+ pSDShowRemoveMatteOption: 0
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Photon/Fusion/Editor/Resources/icons/visible-enabled-icon.png b/Assets/Photon/Fusion/Editor/Resources/icons/visible-enabled-icon.png
new file mode 100644
index 0000000..73129f1
Binary files /dev/null and b/Assets/Photon/Fusion/Editor/Resources/icons/visible-enabled-icon.png differ
diff --git a/Assets/Photon/Fusion/Editor/Resources/icons/visible-enabled-icon.png.meta b/Assets/Photon/Fusion/Editor/Resources/icons/visible-enabled-icon.png.meta
new file mode 100644
index 0000000..4259314
--- /dev/null
+++ b/Assets/Photon/Fusion/Editor/Resources/icons/visible-enabled-icon.png.meta
@@ -0,0 +1,120 @@
+fileFormatVersion: 2
+guid: 536acaec6131e754883bd7ffae7dc885
+TextureImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 11
+ mipmaps:
+ mipMapMode: 0
+ enableMipMap: 0
+ sRGBTexture: 1
+ linearTexture: 0
+ fadeOut: 0
+ borderMipMap: 0
+ mipMapsPreserveCoverage: 0
+ alphaTestReferenceValue: 0.5
+ mipMapFadeDistanceStart: 1
+ mipMapFadeDistanceEnd: 3
+ bumpmap:
+ convertToNormalMap: 0
+ externalNormalMap: 0
+ heightScale: 0.25
+ normalMapFilter: 0
+ isReadable: 0
+ streamingMipmaps: 0
+ streamingMipmapsPriority: 0
+ vTOnly: 0
+ grayScaleToAlpha: 0
+ generateCubemap: 6
+ cubemapConvolution: 0
+ seamlessCubemap: 0
+ textureFormat: 1
+ maxTextureSize: 2048
+ textureSettings:
+ serializedVersion: 2
+ filterMode: 1
+ aniso: 1
+ mipBias: 0
+ wrapU: 1
+ wrapV: 1
+ wrapW: 0
+ nPOTScale: 0
+ lightmap: 0
+ compressionQuality: 50
+ spriteMode: 0
+ spriteExtrude: 1
+ spriteMeshType: 1
+ alignment: 0
+ spritePivot: {x: 0.5, y: 0.5}
+ spritePixelsToUnits: 100
+ spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+ spriteGenerateFallbackPhysicsShape: 1
+ alphaUsage: 1
+ alphaIsTransparency: 1
+ spriteTessellationDetail: -1
+ textureType: 2
+ textureShape: 1
+ singleChannelComponent: 0
+ flipbookRows: 1
+ flipbookColumns: 1
+ maxTextureSizeSet: 0
+ compressionQualitySet: 0
+ textureFormatSet: 0
+ ignorePngGamma: 0
+ applyGammaDecoding: 0
+ platformSettings:
+ - serializedVersion: 3
+ buildTarget: DefaultTexturePlatform
+ maxTextureSize: 2048
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 0
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ - serializedVersion: 3
+ buildTarget: Standalone
+ maxTextureSize: 2048
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 0
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ - serializedVersion: 3
+ buildTarget: Android
+ maxTextureSize: 2048
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 0
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ spriteSheet:
+ serializedVersion: 2
+ sprites: []
+ outline: []
+ physicsShape: []
+ bones: []
+ spriteID:
+ internalID: 0
+ vertices: []
+ indices:
+ edges: []
+ weights: []
+ secondaryTextures: []
+ spritePackingTag:
+ pSDRemoveMatte: 0
+ pSDShowRemoveMatteOption: 0
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Photon/Fusion/Editor/Resources/icons_welcome.meta b/Assets/Photon/Fusion/Editor/Resources/icons_welcome.meta
new file mode 100644
index 0000000..7e67b25
--- /dev/null
+++ b/Assets/Photon/Fusion/Editor/Resources/icons_welcome.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 453785a293d1a574fa05852324ed5ac7
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Photon/Fusion/Editor/Resources/icons_welcome/ATTRIBUTION.txt b/Assets/Photon/Fusion/Editor/Resources/icons_welcome/ATTRIBUTION.txt
new file mode 100644
index 0000000..55acb02
--- /dev/null
+++ b/Assets/Photon/Fusion/Editor/Resources/icons_welcome/ATTRIBUTION.txt
@@ -0,0 +1 @@
+Icons by Fat Cow Hosting (http://www.fatcow.com/free-icons). Licensed under a Creative Commons Attribution 3.0 License.
\ No newline at end of file
diff --git a/Assets/Photon/Fusion/Editor/Resources/icons_welcome/ATTRIBUTION.txt.meta b/Assets/Photon/Fusion/Editor/Resources/icons_welcome/ATTRIBUTION.txt.meta
new file mode 100644
index 0000000..87545b4
--- /dev/null
+++ b/Assets/Photon/Fusion/Editor/Resources/icons_welcome/ATTRIBUTION.txt.meta
@@ -0,0 +1,4 @@
+fileFormatVersion: 2
+guid: 28883dc040320bb4ea69a449132b35d7
+TextScriptImporter:
+ userData:
diff --git a/Assets/Photon/Fusion/Editor/Resources/icons_welcome/bugtracker.png b/Assets/Photon/Fusion/Editor/Resources/icons_welcome/bugtracker.png
new file mode 100644
index 0000000..563c364
Binary files /dev/null and b/Assets/Photon/Fusion/Editor/Resources/icons_welcome/bugtracker.png differ
diff --git a/Assets/Photon/Fusion/Editor/Resources/icons_welcome/bugtracker.png.meta b/Assets/Photon/Fusion/Editor/Resources/icons_welcome/bugtracker.png.meta
new file mode 100644
index 0000000..d4e71f9
--- /dev/null
+++ b/Assets/Photon/Fusion/Editor/Resources/icons_welcome/bugtracker.png.meta
@@ -0,0 +1,84 @@
+fileFormatVersion: 2
+guid: 1d949f6bc5812234bb28b6bd51e902f5
+timeCreated: 1500450410
+licenseType: Pro
+TextureImporter:
+ fileIDToRecycleName: {}
+ serializedVersion: 4
+ mipmaps:
+ mipMapMode: 0
+ enableMipMap: 0
+ sRGBTexture: 0
+ linearTexture: 0
+ fadeOut: 0
+ borderMipMap: 0
+ mipMapFadeDistanceStart: 1
+ mipMapFadeDistanceEnd: 3
+ bumpmap:
+ convertToNormalMap: 0
+ externalNormalMap: 0
+ heightScale: 0.25
+ normalMapFilter: 0
+ isReadable: 0
+ grayScaleToAlpha: 0
+ generateCubemap: 6
+ cubemapConvolution: 0
+ seamlessCubemap: 0
+ textureFormat: 1
+ maxTextureSize: 2048
+ textureSettings:
+ filterMode: -1
+ aniso: 1
+ mipBias: -1
+ wrapMode: 1
+ nPOTScale: 0
+ lightmap: 0
+ compressionQuality: 50
+ spriteMode: 0
+ spriteExtrude: 1
+ spriteMeshType: 1
+ alignment: 0
+ spritePivot: {x: 0.5, y: 0.5}
+ spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+ spritePixelsToUnits: 100
+ alphaUsage: 1
+ alphaIsTransparency: 1
+ spriteTessellationDetail: -1
+ textureType: 2
+ textureShape: 1
+ maxTextureSizeSet: 0
+ compressionQualitySet: 0
+ textureFormatSet: 0
+ platformSettings:
+ - buildTarget: DefaultTexturePlatform
+ maxTextureSize: 32
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ - buildTarget: Standalone
+ maxTextureSize: 32
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ - buildTarget: Android
+ maxTextureSize: 32
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ spriteSheet:
+ serializedVersion: 2
+ sprites: []
+ outline: []
+ spritePackingTag:
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Photon/Fusion/Editor/Resources/icons_welcome/bullet_black.png b/Assets/Photon/Fusion/Editor/Resources/icons_welcome/bullet_black.png
new file mode 100644
index 0000000..d448caa
Binary files /dev/null and b/Assets/Photon/Fusion/Editor/Resources/icons_welcome/bullet_black.png differ
diff --git a/Assets/Photon/Fusion/Editor/Resources/icons_welcome/bullet_black.png.meta b/Assets/Photon/Fusion/Editor/Resources/icons_welcome/bullet_black.png.meta
new file mode 100644
index 0000000..ee8941f
--- /dev/null
+++ b/Assets/Photon/Fusion/Editor/Resources/icons_welcome/bullet_black.png.meta
@@ -0,0 +1,108 @@
+fileFormatVersion: 2
+guid: ca583a4b5a2b2452c80aa11e55f19346
+TextureImporter:
+ fileIDToRecycleName: {}
+ externalObjects: {}
+ serializedVersion: 6
+ mipmaps:
+ mipMapMode: 0
+ enableMipMap: 0
+ sRGBTexture: 1
+ linearTexture: 0
+ fadeOut: 0
+ borderMipMap: 0
+ mipMapsPreserveCoverage: 0
+ alphaTestReferenceValue: 0.5
+ mipMapFadeDistanceStart: 1
+ mipMapFadeDistanceEnd: 3
+ bumpmap:
+ convertToNormalMap: 0
+ externalNormalMap: 0
+ heightScale: 0.25
+ normalMapFilter: 0
+ isReadable: 0
+ streamingMipmaps: 0
+ streamingMipmapsPriority: 0
+ grayScaleToAlpha: 0
+ generateCubemap: 6
+ cubemapConvolution: 0
+ seamlessCubemap: 0
+ textureFormat: 1
+ maxTextureSize: 2048
+ textureSettings:
+ serializedVersion: 2
+ filterMode: -1
+ aniso: 1
+ mipBias: -100
+ wrapU: 1
+ wrapV: 1
+ wrapW: 1
+ nPOTScale: 0
+ lightmap: 0
+ compressionQuality: 50
+ spriteMode: 0
+ spriteExtrude: 1
+ spriteMeshType: 1
+ alignment: 0
+ spritePivot: {x: 0.5, y: 0.5}
+ spritePixelsToUnits: 100
+ spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+ spriteGenerateFallbackPhysicsShape: 1
+ alphaUsage: 1
+ alphaIsTransparency: 1
+ spriteTessellationDetail: -1
+ textureType: 2
+ textureShape: 1
+ singleChannelComponent: 0
+ maxTextureSizeSet: 0
+ compressionQualitySet: 0
+ textureFormatSet: 0
+ platformSettings:
+ - serializedVersion: 2
+ buildTarget: DefaultTexturePlatform
+ maxTextureSize: 32
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ androidETC2FallbackOverride: 0
+ - serializedVersion: 2
+ buildTarget: Standalone
+ maxTextureSize: 32
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ androidETC2FallbackOverride: 0
+ - serializedVersion: 2
+ buildTarget: Android
+ maxTextureSize: 32
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ androidETC2FallbackOverride: 0
+ spriteSheet:
+ serializedVersion: 2
+ sprites: []
+ outline: []
+ physicsShape: []
+ bones: []
+ spriteID:
+ vertices: []
+ indices:
+ edges: []
+ weights: []
+ spritePackingTag:
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Photon/Fusion/Editor/Resources/icons_welcome/bullet_down.png b/Assets/Photon/Fusion/Editor/Resources/icons_welcome/bullet_down.png
new file mode 100644
index 0000000..060af25
Binary files /dev/null and b/Assets/Photon/Fusion/Editor/Resources/icons_welcome/bullet_down.png differ
diff --git a/Assets/Photon/Fusion/Editor/Resources/icons_welcome/bullet_down.png.meta b/Assets/Photon/Fusion/Editor/Resources/icons_welcome/bullet_down.png.meta
new file mode 100644
index 0000000..0d3cb0b
--- /dev/null
+++ b/Assets/Photon/Fusion/Editor/Resources/icons_welcome/bullet_down.png.meta
@@ -0,0 +1,86 @@
+fileFormatVersion: 2
+guid: 06632fbfd33334c72a288bdbdf2922ea
+TextureImporter:
+ fileIDToRecycleName: {}
+ externalObjects: {}
+ serializedVersion: 6
+ mipmaps:
+ mipMapMode: 0
+ enableMipMap: 1
+ sRGBTexture: 1
+ linearTexture: 0
+ fadeOut: 0
+ borderMipMap: 0
+ mipMapsPreserveCoverage: 0
+ alphaTestReferenceValue: 0.5
+ mipMapFadeDistanceStart: 1
+ mipMapFadeDistanceEnd: 3
+ bumpmap:
+ convertToNormalMap: 0
+ externalNormalMap: 0
+ heightScale: 0.25
+ normalMapFilter: 0
+ isReadable: 0
+ streamingMipmaps: 0
+ streamingMipmapsPriority: 0
+ grayScaleToAlpha: 0
+ generateCubemap: 6
+ cubemapConvolution: 0
+ seamlessCubemap: 0
+ textureFormat: 1
+ maxTextureSize: 2048
+ textureSettings:
+ serializedVersion: 2
+ filterMode: -1
+ aniso: -1
+ mipBias: -100
+ wrapU: -1
+ wrapV: -1
+ wrapW: -1
+ nPOTScale: 1
+ lightmap: 0
+ compressionQuality: 50
+ spriteMode: 0
+ spriteExtrude: 1
+ spriteMeshType: 1
+ alignment: 0
+ spritePivot: {x: 0.5, y: 0.5}
+ spritePixelsToUnits: 100
+ spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+ spriteGenerateFallbackPhysicsShape: 1
+ alphaUsage: 1
+ alphaIsTransparency: 0
+ spriteTessellationDetail: -1
+ textureType: 0
+ textureShape: 1
+ singleChannelComponent: 0
+ maxTextureSizeSet: 0
+ compressionQualitySet: 0
+ textureFormatSet: 0
+ platformSettings:
+ - serializedVersion: 2
+ buildTarget: DefaultTexturePlatform
+ maxTextureSize: 2048
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ androidETC2FallbackOverride: 0
+ spriteSheet:
+ serializedVersion: 2
+ sprites: []
+ outline: []
+ physicsShape: []
+ bones: []
+ spriteID:
+ vertices: []
+ indices:
+ edges: []
+ weights: []
+ spritePackingTag:
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Photon/Fusion/Editor/Resources/icons_welcome/bullet_green.png b/Assets/Photon/Fusion/Editor/Resources/icons_welcome/bullet_green.png
new file mode 100644
index 0000000..f74a914
Binary files /dev/null and b/Assets/Photon/Fusion/Editor/Resources/icons_welcome/bullet_green.png differ
diff --git a/Assets/Photon/Fusion/Editor/Resources/icons_welcome/bullet_green.png.meta b/Assets/Photon/Fusion/Editor/Resources/icons_welcome/bullet_green.png.meta
new file mode 100644
index 0000000..f2e6b51
--- /dev/null
+++ b/Assets/Photon/Fusion/Editor/Resources/icons_welcome/bullet_green.png.meta
@@ -0,0 +1,108 @@
+fileFormatVersion: 2
+guid: e12890dcb5a25439e8a36389cf70fce1
+TextureImporter:
+ fileIDToRecycleName: {}
+ externalObjects: {}
+ serializedVersion: 6
+ mipmaps:
+ mipMapMode: 0
+ enableMipMap: 0
+ sRGBTexture: 1
+ linearTexture: 0
+ fadeOut: 0
+ borderMipMap: 0
+ mipMapsPreserveCoverage: 0
+ alphaTestReferenceValue: 0.5
+ mipMapFadeDistanceStart: 1
+ mipMapFadeDistanceEnd: 3
+ bumpmap:
+ convertToNormalMap: 0
+ externalNormalMap: 0
+ heightScale: 0.25
+ normalMapFilter: 0
+ isReadable: 0
+ streamingMipmaps: 0
+ streamingMipmapsPriority: 0
+ grayScaleToAlpha: 0
+ generateCubemap: 6
+ cubemapConvolution: 0
+ seamlessCubemap: 0
+ textureFormat: 1
+ maxTextureSize: 2048
+ textureSettings:
+ serializedVersion: 2
+ filterMode: -1
+ aniso: 1
+ mipBias: -100
+ wrapU: 1
+ wrapV: 1
+ wrapW: 1
+ nPOTScale: 0
+ lightmap: 0
+ compressionQuality: 50
+ spriteMode: 0
+ spriteExtrude: 1
+ spriteMeshType: 1
+ alignment: 0
+ spritePivot: {x: 0.5, y: 0.5}
+ spritePixelsToUnits: 100
+ spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+ spriteGenerateFallbackPhysicsShape: 1
+ alphaUsage: 1
+ alphaIsTransparency: 1
+ spriteTessellationDetail: -1
+ textureType: 2
+ textureShape: 1
+ singleChannelComponent: 0
+ maxTextureSizeSet: 0
+ compressionQualitySet: 0
+ textureFormatSet: 0
+ platformSettings:
+ - serializedVersion: 2
+ buildTarget: DefaultTexturePlatform
+ maxTextureSize: 32
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ androidETC2FallbackOverride: 0
+ - serializedVersion: 2
+ buildTarget: Standalone
+ maxTextureSize: 32
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ androidETC2FallbackOverride: 0
+ - serializedVersion: 2
+ buildTarget: Android
+ maxTextureSize: 32
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ androidETC2FallbackOverride: 0
+ spriteSheet:
+ serializedVersion: 2
+ sprites: []
+ outline: []
+ physicsShape: []
+ bones: []
+ spriteID:
+ vertices: []
+ indices:
+ edges: []
+ weights: []
+ spritePackingTag:
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Photon/Fusion/Editor/Resources/icons_welcome/comments.png b/Assets/Photon/Fusion/Editor/Resources/icons_welcome/comments.png
new file mode 100644
index 0000000..61ae64b
Binary files /dev/null and b/Assets/Photon/Fusion/Editor/Resources/icons_welcome/comments.png differ
diff --git a/Assets/Photon/Fusion/Editor/Resources/icons_welcome/comments.png.meta b/Assets/Photon/Fusion/Editor/Resources/icons_welcome/comments.png.meta
new file mode 100644
index 0000000..9044c3f
--- /dev/null
+++ b/Assets/Photon/Fusion/Editor/Resources/icons_welcome/comments.png.meta
@@ -0,0 +1,76 @@
+fileFormatVersion: 2
+guid: 0d548c93fd2fd490db38298610780b39
+TextureImporter:
+ fileIDToRecycleName: {}
+ externalObjects: {}
+ serializedVersion: 4
+ mipmaps:
+ mipMapMode: 0
+ enableMipMap: 1
+ sRGBTexture: 1
+ linearTexture: 0
+ fadeOut: 0
+ borderMipMap: 0
+ mipMapsPreserveCoverage: 0
+ alphaTestReferenceValue: 0.5
+ mipMapFadeDistanceStart: 1
+ mipMapFadeDistanceEnd: 3
+ bumpmap:
+ convertToNormalMap: 0
+ externalNormalMap: 0
+ heightScale: 0.25
+ normalMapFilter: 0
+ isReadable: 0
+ grayScaleToAlpha: 0
+ generateCubemap: 6
+ cubemapConvolution: 0
+ seamlessCubemap: 0
+ textureFormat: 1
+ maxTextureSize: 2048
+ textureSettings:
+ serializedVersion: 2
+ filterMode: -1
+ aniso: -1
+ mipBias: -1
+ wrapU: -1
+ wrapV: -1
+ wrapW: -1
+ nPOTScale: 1
+ lightmap: 0
+ compressionQuality: 50
+ spriteMode: 0
+ spriteExtrude: 1
+ spriteMeshType: 1
+ alignment: 0
+ spritePivot: {x: 0.5, y: 0.5}
+ spritePixelsToUnits: 100
+ spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+ spriteGenerateFallbackPhysicsShape: 1
+ alphaUsage: 1
+ alphaIsTransparency: 0
+ spriteTessellationDetail: -1
+ textureType: 0
+ textureShape: 1
+ maxTextureSizeSet: 0
+ compressionQualitySet: 0
+ textureFormatSet: 0
+ platformSettings:
+ - buildTarget: DefaultTexturePlatform
+ maxTextureSize: 2048
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ androidETC2FallbackOverride: 0
+ spriteSheet:
+ serializedVersion: 2
+ sprites: []
+ outline: []
+ physicsShape: []
+ spritePackingTag:
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Photon/Fusion/Editor/Resources/icons_welcome/community.png b/Assets/Photon/Fusion/Editor/Resources/icons_welcome/community.png
new file mode 100644
index 0000000..e67fe63
Binary files /dev/null and b/Assets/Photon/Fusion/Editor/Resources/icons_welcome/community.png differ
diff --git a/Assets/Photon/Fusion/Editor/Resources/icons_welcome/community.png.meta b/Assets/Photon/Fusion/Editor/Resources/icons_welcome/community.png.meta
new file mode 100644
index 0000000..2ce92a5
--- /dev/null
+++ b/Assets/Photon/Fusion/Editor/Resources/icons_welcome/community.png.meta
@@ -0,0 +1,84 @@
+fileFormatVersion: 2
+guid: fd7da1b41e02e2546a5b59597cbbedfd
+timeCreated: 1500450532
+licenseType: Pro
+TextureImporter:
+ fileIDToRecycleName: {}
+ serializedVersion: 4
+ mipmaps:
+ mipMapMode: 0
+ enableMipMap: 0
+ sRGBTexture: 0
+ linearTexture: 0
+ fadeOut: 0
+ borderMipMap: 0
+ mipMapFadeDistanceStart: 1
+ mipMapFadeDistanceEnd: 3
+ bumpmap:
+ convertToNormalMap: 0
+ externalNormalMap: 0
+ heightScale: 0.25
+ normalMapFilter: 0
+ isReadable: 0
+ grayScaleToAlpha: 0
+ generateCubemap: 6
+ cubemapConvolution: 0
+ seamlessCubemap: 0
+ textureFormat: 1
+ maxTextureSize: 2048
+ textureSettings:
+ filterMode: -1
+ aniso: 1
+ mipBias: -1
+ wrapMode: 1
+ nPOTScale: 0
+ lightmap: 0
+ compressionQuality: 50
+ spriteMode: 0
+ spriteExtrude: 1
+ spriteMeshType: 1
+ alignment: 0
+ spritePivot: {x: 0.5, y: 0.5}
+ spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+ spritePixelsToUnits: 100
+ alphaUsage: 1
+ alphaIsTransparency: 1
+ spriteTessellationDetail: -1
+ textureType: 2
+ textureShape: 1
+ maxTextureSizeSet: 0
+ compressionQualitySet: 0
+ textureFormatSet: 0
+ platformSettings:
+ - buildTarget: DefaultTexturePlatform
+ maxTextureSize: 32
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ - buildTarget: Standalone
+ maxTextureSize: 32
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ - buildTarget: Android
+ maxTextureSize: 32
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ spriteSheet:
+ serializedVersion: 2
+ sprites: []
+ outline: []
+ spritePackingTag:
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Photon/Fusion/Editor/Resources/icons_welcome/documentation.png b/Assets/Photon/Fusion/Editor/Resources/icons_welcome/documentation.png
new file mode 100644
index 0000000..1086fbe
Binary files /dev/null and b/Assets/Photon/Fusion/Editor/Resources/icons_welcome/documentation.png differ
diff --git a/Assets/Photon/Fusion/Editor/Resources/icons_welcome/documentation.png.meta b/Assets/Photon/Fusion/Editor/Resources/icons_welcome/documentation.png.meta
new file mode 100644
index 0000000..32cbd42
--- /dev/null
+++ b/Assets/Photon/Fusion/Editor/Resources/icons_welcome/documentation.png.meta
@@ -0,0 +1,84 @@
+fileFormatVersion: 2
+guid: 7d6ce7da11bf9aa4f98abcc9eb237a08
+timeCreated: 1500450305
+licenseType: Pro
+TextureImporter:
+ fileIDToRecycleName: {}
+ serializedVersion: 4
+ mipmaps:
+ mipMapMode: 0
+ enableMipMap: 0
+ sRGBTexture: 0
+ linearTexture: 0
+ fadeOut: 0
+ borderMipMap: 0
+ mipMapFadeDistanceStart: 1
+ mipMapFadeDistanceEnd: 3
+ bumpmap:
+ convertToNormalMap: 0
+ externalNormalMap: 0
+ heightScale: 0.25
+ normalMapFilter: 0
+ isReadable: 0
+ grayScaleToAlpha: 0
+ generateCubemap: 6
+ cubemapConvolution: 0
+ seamlessCubemap: 0
+ textureFormat: 1
+ maxTextureSize: 2048
+ textureSettings:
+ filterMode: -1
+ aniso: 1
+ mipBias: -1
+ wrapMode: 1
+ nPOTScale: 0
+ lightmap: 0
+ compressionQuality: 50
+ spriteMode: 0
+ spriteExtrude: 1
+ spriteMeshType: 1
+ alignment: 0
+ spritePivot: {x: 0.5, y: 0.5}
+ spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+ spritePixelsToUnits: 100
+ alphaUsage: 1
+ alphaIsTransparency: 1
+ spriteTessellationDetail: -1
+ textureType: 2
+ textureShape: 1
+ maxTextureSizeSet: 0
+ compressionQualitySet: 0
+ textureFormatSet: 0
+ platformSettings:
+ - buildTarget: DefaultTexturePlatform
+ maxTextureSize: 32
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ - buildTarget: Standalone
+ maxTextureSize: 32
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ - buildTarget: Android
+ maxTextureSize: 32
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ spriteSheet:
+ serializedVersion: 2
+ sprites: []
+ outline: []
+ spritePackingTag:
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Photon/Fusion/Editor/Resources/icons_welcome/information.png b/Assets/Photon/Fusion/Editor/Resources/icons_welcome/information.png
new file mode 100644
index 0000000..93c67f2
Binary files /dev/null and b/Assets/Photon/Fusion/Editor/Resources/icons_welcome/information.png differ
diff --git a/Assets/Photon/Fusion/Editor/Resources/icons_welcome/information.png.meta b/Assets/Photon/Fusion/Editor/Resources/icons_welcome/information.png.meta
new file mode 100644
index 0000000..3cbe4b6
--- /dev/null
+++ b/Assets/Photon/Fusion/Editor/Resources/icons_welcome/information.png.meta
@@ -0,0 +1,108 @@
+fileFormatVersion: 2
+guid: fe64035b49c4e4a078ee42b857ae1519
+TextureImporter:
+ fileIDToRecycleName: {}
+ externalObjects: {}
+ serializedVersion: 6
+ mipmaps:
+ mipMapMode: 0
+ enableMipMap: 0
+ sRGBTexture: 1
+ linearTexture: 0
+ fadeOut: 0
+ borderMipMap: 0
+ mipMapsPreserveCoverage: 0
+ alphaTestReferenceValue: 0.5
+ mipMapFadeDistanceStart: 1
+ mipMapFadeDistanceEnd: 3
+ bumpmap:
+ convertToNormalMap: 0
+ externalNormalMap: 0
+ heightScale: 0.25
+ normalMapFilter: 0
+ isReadable: 0
+ streamingMipmaps: 0
+ streamingMipmapsPriority: 0
+ grayScaleToAlpha: 0
+ generateCubemap: 6
+ cubemapConvolution: 0
+ seamlessCubemap: 0
+ textureFormat: 1
+ maxTextureSize: 2048
+ textureSettings:
+ serializedVersion: 2
+ filterMode: -1
+ aniso: 1
+ mipBias: -100
+ wrapU: 1
+ wrapV: 1
+ wrapW: 1
+ nPOTScale: 0
+ lightmap: 0
+ compressionQuality: 50
+ spriteMode: 0
+ spriteExtrude: 1
+ spriteMeshType: 1
+ alignment: 0
+ spritePivot: {x: 0.5, y: 0.5}
+ spritePixelsToUnits: 100
+ spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+ spriteGenerateFallbackPhysicsShape: 1
+ alphaUsage: 1
+ alphaIsTransparency: 1
+ spriteTessellationDetail: -1
+ textureType: 2
+ textureShape: 1
+ singleChannelComponent: 0
+ maxTextureSizeSet: 0
+ compressionQualitySet: 0
+ textureFormatSet: 0
+ platformSettings:
+ - serializedVersion: 2
+ buildTarget: DefaultTexturePlatform
+ maxTextureSize: 32
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ androidETC2FallbackOverride: 0
+ - serializedVersion: 2
+ buildTarget: Standalone
+ maxTextureSize: 32
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ androidETC2FallbackOverride: 0
+ - serializedVersion: 2
+ buildTarget: Android
+ maxTextureSize: 32
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ androidETC2FallbackOverride: 0
+ spriteSheet:
+ serializedVersion: 2
+ sprites: []
+ outline: []
+ physicsShape: []
+ bones: []
+ spriteID:
+ vertices: []
+ indices:
+ edges: []
+ weights: []
+ spritePackingTag:
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Photon/Fusion/Editor/Resources/icons_welcome/samples.png b/Assets/Photon/Fusion/Editor/Resources/icons_welcome/samples.png
new file mode 100644
index 0000000..669b150
Binary files /dev/null and b/Assets/Photon/Fusion/Editor/Resources/icons_welcome/samples.png differ
diff --git a/Assets/Photon/Fusion/Editor/Resources/icons_welcome/samples.png.meta b/Assets/Photon/Fusion/Editor/Resources/icons_welcome/samples.png.meta
new file mode 100644
index 0000000..674d3f7
--- /dev/null
+++ b/Assets/Photon/Fusion/Editor/Resources/icons_welcome/samples.png.meta
@@ -0,0 +1,84 @@
+fileFormatVersion: 2
+guid: d2b478a89610eb748a4b0b8040f43a01
+timeCreated: 1500450669
+licenseType: Pro
+TextureImporter:
+ fileIDToRecycleName: {}
+ serializedVersion: 4
+ mipmaps:
+ mipMapMode: 0
+ enableMipMap: 0
+ sRGBTexture: 0
+ linearTexture: 0
+ fadeOut: 0
+ borderMipMap: 0
+ mipMapFadeDistanceStart: 1
+ mipMapFadeDistanceEnd: 3
+ bumpmap:
+ convertToNormalMap: 0
+ externalNormalMap: 0
+ heightScale: 0.25
+ normalMapFilter: 0
+ isReadable: 0
+ grayScaleToAlpha: 0
+ generateCubemap: 6
+ cubemapConvolution: 0
+ seamlessCubemap: 0
+ textureFormat: 1
+ maxTextureSize: 2048
+ textureSettings:
+ filterMode: -1
+ aniso: 1
+ mipBias: -1
+ wrapMode: 1
+ nPOTScale: 0
+ lightmap: 0
+ compressionQuality: 50
+ spriteMode: 0
+ spriteExtrude: 1
+ spriteMeshType: 1
+ alignment: 0
+ spritePivot: {x: 0.5, y: 0.5}
+ spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+ spritePixelsToUnits: 100
+ alphaUsage: 1
+ alphaIsTransparency: 1
+ spriteTessellationDetail: -1
+ textureType: 2
+ textureShape: 1
+ maxTextureSizeSet: 0
+ compressionQualitySet: 0
+ textureFormatSet: 0
+ platformSettings:
+ - buildTarget: DefaultTexturePlatform
+ maxTextureSize: 32
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ - buildTarget: Standalone
+ maxTextureSize: 32
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ - buildTarget: Android
+ maxTextureSize: 32
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ spriteSheet:
+ serializedVersion: 2
+ sprites: []
+ outline: []
+ spritePackingTag:
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Photon/Fusion/Plugins.meta b/Assets/Photon/Fusion/Plugins.meta
new file mode 100644
index 0000000..bd49102
--- /dev/null
+++ b/Assets/Photon/Fusion/Plugins.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 88a369d26c2621f4b857e1099c7e4364
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Photon/Fusion/Plugins/NanoSockets.meta b/Assets/Photon/Fusion/Plugins/NanoSockets.meta
new file mode 100644
index 0000000..8d21e97
--- /dev/null
+++ b/Assets/Photon/Fusion/Plugins/NanoSockets.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 7c0f804fc175b194a84166c696747f0b
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Photon/Fusion/Plugins/NanoSockets/Android.meta b/Assets/Photon/Fusion/Plugins/NanoSockets/Android.meta
new file mode 100644
index 0000000..6ef8bd3
--- /dev/null
+++ b/Assets/Photon/Fusion/Plugins/NanoSockets/Android.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 9007c321666fb65448aaf7502001c2b1
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Photon/Fusion/Plugins/NanoSockets/Android/arm64-v8a.meta b/Assets/Photon/Fusion/Plugins/NanoSockets/Android/arm64-v8a.meta
new file mode 100644
index 0000000..26ff8b4
--- /dev/null
+++ b/Assets/Photon/Fusion/Plugins/NanoSockets/Android/arm64-v8a.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: f3c69e69a588ff64294d4352f80d4762
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Photon/Fusion/Plugins/NanoSockets/Android/arm64-v8a/libnanosockets.so b/Assets/Photon/Fusion/Plugins/NanoSockets/Android/arm64-v8a/libnanosockets.so
new file mode 100644
index 0000000..384d104
Binary files /dev/null and b/Assets/Photon/Fusion/Plugins/NanoSockets/Android/arm64-v8a/libnanosockets.so differ
diff --git a/Assets/Photon/Fusion/Plugins/NanoSockets/Android/arm64-v8a/libnanosockets.so.meta b/Assets/Photon/Fusion/Plugins/NanoSockets/Android/arm64-v8a/libnanosockets.so.meta
new file mode 100644
index 0000000..64a924e
--- /dev/null
+++ b/Assets/Photon/Fusion/Plugins/NanoSockets/Android/arm64-v8a/libnanosockets.so.meta
@@ -0,0 +1,80 @@
+fileFormatVersion: 2
+guid: fd330aee9172d2c4087e7baffb8d9f5d
+PluginImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ iconMap: {}
+ executionOrder: {}
+ defineConstraints: []
+ isPreloaded: 0
+ isOverridable: 0
+ isExplicitlyReferenced: 0
+ validateReferences: 1
+ platformData:
+ - first:
+ : Any
+ second:
+ enabled: 0
+ settings:
+ Exclude Android: 0
+ Exclude Editor: 1
+ Exclude Linux64: 1
+ Exclude OSXUniversal: 1
+ Exclude Win: 1
+ Exclude Win64: 1
+ Exclude iOS: 1
+ - first:
+ Android: Android
+ second:
+ enabled: 1
+ settings:
+ CPU: ARM64
+ - first:
+ Any:
+ second:
+ enabled: 0
+ settings: {}
+ - first:
+ Editor: Editor
+ second:
+ enabled: 0
+ settings:
+ CPU: AnyCPU
+ DefaultValueInitialized: true
+ OS: AnyOS
+ - first:
+ Standalone: Linux64
+ second:
+ enabled: 0
+ settings:
+ CPU: None
+ - first:
+ Standalone: OSXUniversal
+ second:
+ enabled: 0
+ settings:
+ CPU: None
+ - first:
+ Standalone: Win
+ second:
+ enabled: 0
+ settings:
+ CPU: None
+ - first:
+ Standalone: Win64
+ second:
+ enabled: 0
+ settings:
+ CPU: None
+ - first:
+ iPhone: iOS
+ second:
+ enabled: 0
+ settings:
+ AddToEmbeddedBinaries: false
+ CPU: AnyCPU
+ CompileFlags:
+ FrameworkDependencies:
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Photon/Fusion/Plugins/NanoSockets/Android/armeabi-v7a.meta b/Assets/Photon/Fusion/Plugins/NanoSockets/Android/armeabi-v7a.meta
new file mode 100644
index 0000000..4d4c500
--- /dev/null
+++ b/Assets/Photon/Fusion/Plugins/NanoSockets/Android/armeabi-v7a.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: e49e89c8db6eb8346b3b480b38d620ce
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Photon/Fusion/Plugins/NanoSockets/Android/armeabi-v7a/libnanosockets.so b/Assets/Photon/Fusion/Plugins/NanoSockets/Android/armeabi-v7a/libnanosockets.so
new file mode 100644
index 0000000..7167bd8
Binary files /dev/null and b/Assets/Photon/Fusion/Plugins/NanoSockets/Android/armeabi-v7a/libnanosockets.so differ
diff --git a/Assets/Photon/Fusion/Plugins/NanoSockets/Android/armeabi-v7a/libnanosockets.so.meta b/Assets/Photon/Fusion/Plugins/NanoSockets/Android/armeabi-v7a/libnanosockets.so.meta
new file mode 100644
index 0000000..fa2f7ba
--- /dev/null
+++ b/Assets/Photon/Fusion/Plugins/NanoSockets/Android/armeabi-v7a/libnanosockets.so.meta
@@ -0,0 +1,80 @@
+fileFormatVersion: 2
+guid: 34d5b82ebfd43f840915715f4a3a133d
+PluginImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ iconMap: {}
+ executionOrder: {}
+ defineConstraints: []
+ isPreloaded: 0
+ isOverridable: 0
+ isExplicitlyReferenced: 0
+ validateReferences: 1
+ platformData:
+ - first:
+ : Any
+ second:
+ enabled: 0
+ settings:
+ Exclude Android: 0
+ Exclude Editor: 1
+ Exclude Linux64: 1
+ Exclude OSXUniversal: 1
+ Exclude Win: 1
+ Exclude Win64: 1
+ Exclude iOS: 1
+ - first:
+ Android: Android
+ second:
+ enabled: 1
+ settings:
+ CPU: ARMv7
+ - first:
+ Any:
+ second:
+ enabled: 0
+ settings: {}
+ - first:
+ Editor: Editor
+ second:
+ enabled: 0
+ settings:
+ CPU: AnyCPU
+ DefaultValueInitialized: true
+ OS: AnyOS
+ - first:
+ Standalone: Linux64
+ second:
+ enabled: 0
+ settings:
+ CPU: None
+ - first:
+ Standalone: OSXUniversal
+ second:
+ enabled: 0
+ settings:
+ CPU: None
+ - first:
+ Standalone: Win
+ second:
+ enabled: 0
+ settings:
+ CPU: None
+ - first:
+ Standalone: Win64
+ second:
+ enabled: 0
+ settings:
+ CPU: None
+ - first:
+ iPhone: iOS
+ second:
+ enabled: 0
+ settings:
+ AddToEmbeddedBinaries: false
+ CPU: AnyCPU
+ CompileFlags:
+ FrameworkDependencies:
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Photon/Fusion/Plugins/NanoSockets/Android/x86.meta b/Assets/Photon/Fusion/Plugins/NanoSockets/Android/x86.meta
new file mode 100644
index 0000000..047796d
--- /dev/null
+++ b/Assets/Photon/Fusion/Plugins/NanoSockets/Android/x86.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: f2538901e4f33b94a83d1cf785b14a5d
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Photon/Fusion/Plugins/NanoSockets/Android/x86/libnanosockets.so b/Assets/Photon/Fusion/Plugins/NanoSockets/Android/x86/libnanosockets.so
new file mode 100644
index 0000000..a3e3190
Binary files /dev/null and b/Assets/Photon/Fusion/Plugins/NanoSockets/Android/x86/libnanosockets.so differ
diff --git a/Assets/Photon/Fusion/Plugins/NanoSockets/Android/x86/libnanosockets.so.meta b/Assets/Photon/Fusion/Plugins/NanoSockets/Android/x86/libnanosockets.so.meta
new file mode 100644
index 0000000..50a6c12
--- /dev/null
+++ b/Assets/Photon/Fusion/Plugins/NanoSockets/Android/x86/libnanosockets.so.meta
@@ -0,0 +1,80 @@
+fileFormatVersion: 2
+guid: abb420497d9a79343b4647172f1fa2ec
+PluginImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ iconMap: {}
+ executionOrder: {}
+ defineConstraints: []
+ isPreloaded: 0
+ isOverridable: 0
+ isExplicitlyReferenced: 0
+ validateReferences: 1
+ platformData:
+ - first:
+ : Any
+ second:
+ enabled: 0
+ settings:
+ Exclude Android: 0
+ Exclude Editor: 1
+ Exclude Linux64: 1
+ Exclude OSXUniversal: 1
+ Exclude Win: 1
+ Exclude Win64: 1
+ Exclude iOS: 1
+ - first:
+ Android: Android
+ second:
+ enabled: 1
+ settings:
+ CPU: x86
+ - first:
+ Any:
+ second:
+ enabled: 0
+ settings: {}
+ - first:
+ Editor: Editor
+ second:
+ enabled: 0
+ settings:
+ CPU: AnyCPU
+ DefaultValueInitialized: true
+ OS: AnyOS
+ - first:
+ Standalone: Linux64
+ second:
+ enabled: 0
+ settings:
+ CPU: None
+ - first:
+ Standalone: OSXUniversal
+ second:
+ enabled: 0
+ settings:
+ CPU: None
+ - first:
+ Standalone: Win
+ second:
+ enabled: 0
+ settings:
+ CPU: None
+ - first:
+ Standalone: Win64
+ second:
+ enabled: 0
+ settings:
+ CPU: None
+ - first:
+ iPhone: iOS
+ second:
+ enabled: 0
+ settings:
+ AddToEmbeddedBinaries: false
+ CPU: AnyCPU
+ CompileFlags:
+ FrameworkDependencies:
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Photon/Fusion/Plugins/NanoSockets/Linux.meta b/Assets/Photon/Fusion/Plugins/NanoSockets/Linux.meta
new file mode 100644
index 0000000..e17ab63
--- /dev/null
+++ b/Assets/Photon/Fusion/Plugins/NanoSockets/Linux.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: b4128901ef174a1489d784676ce0a5aa
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Photon/Fusion/Plugins/NanoSockets/Linux/libnanosockets.so b/Assets/Photon/Fusion/Plugins/NanoSockets/Linux/libnanosockets.so
new file mode 100644
index 0000000..c0a2dbd
Binary files /dev/null and b/Assets/Photon/Fusion/Plugins/NanoSockets/Linux/libnanosockets.so differ
diff --git a/Assets/Photon/Fusion/Plugins/NanoSockets/Linux/libnanosockets.so.meta b/Assets/Photon/Fusion/Plugins/NanoSockets/Linux/libnanosockets.so.meta
new file mode 100644
index 0000000..f14f406
--- /dev/null
+++ b/Assets/Photon/Fusion/Plugins/NanoSockets/Linux/libnanosockets.so.meta
@@ -0,0 +1,80 @@
+fileFormatVersion: 2
+guid: 1353bd98fd16b304f82bc4cb8ff7d03f
+PluginImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ iconMap: {}
+ executionOrder: {}
+ defineConstraints: []
+ isPreloaded: 0
+ isOverridable: 0
+ isExplicitlyReferenced: 0
+ validateReferences: 1
+ platformData:
+ - first:
+ : Any
+ second:
+ enabled: 0
+ settings:
+ Exclude Android: 1
+ Exclude Editor: 0
+ Exclude Linux64: 0
+ Exclude OSXUniversal: 1
+ Exclude Win: 0
+ Exclude Win64: 0
+ Exclude iOS: 1
+ - first:
+ Android: Android
+ second:
+ enabled: 0
+ settings:
+ CPU: ARMv7
+ - first:
+ Any:
+ second:
+ enabled: 0
+ settings: {}
+ - first:
+ Editor: Editor
+ second:
+ enabled: 1
+ settings:
+ CPU: AnyCPU
+ DefaultValueInitialized: true
+ OS: Linux
+ - first:
+ Standalone: Linux64
+ second:
+ enabled: 1
+ settings:
+ CPU: AnyCPU
+ - first:
+ Standalone: OSXUniversal
+ second:
+ enabled: 0
+ settings:
+ CPU: None
+ - first:
+ Standalone: Win
+ second:
+ enabled: 1
+ settings:
+ CPU: x86
+ - first:
+ Standalone: Win64
+ second:
+ enabled: 1
+ settings:
+ CPU: x86_64
+ - first:
+ iPhone: iOS
+ second:
+ enabled: 0
+ settings:
+ AddToEmbeddedBinaries: false
+ CPU: AnyCPU
+ CompileFlags:
+ FrameworkDependencies:
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Photon/Fusion/Plugins/NanoSockets/NanoSockets.meta b/Assets/Photon/Fusion/Plugins/NanoSockets/NanoSockets.meta
new file mode 100644
index 0000000..5e48db9
--- /dev/null
+++ b/Assets/Photon/Fusion/Plugins/NanoSockets/NanoSockets.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 497a010bd4e8f2c4ea10903a5b29aa7d
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Photon/Fusion/Plugins/NanoSockets/NanoSockets/Dynamic.meta b/Assets/Photon/Fusion/Plugins/NanoSockets/NanoSockets/Dynamic.meta
new file mode 100644
index 0000000..0cca44c
--- /dev/null
+++ b/Assets/Photon/Fusion/Plugins/NanoSockets/NanoSockets/Dynamic.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 8fc02f7d3703ecc409b5446020e1dc8f
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Photon/Fusion/Plugins/NanoSockets/NanoSockets/Dynamic/NanoSockets.dll b/Assets/Photon/Fusion/Plugins/NanoSockets/NanoSockets/Dynamic/NanoSockets.dll
new file mode 100644
index 0000000..8fbe77b
Binary files /dev/null and b/Assets/Photon/Fusion/Plugins/NanoSockets/NanoSockets/Dynamic/NanoSockets.dll differ
diff --git a/Assets/Photon/Fusion/Plugins/NanoSockets/NanoSockets/Dynamic/NanoSockets.dll.meta b/Assets/Photon/Fusion/Plugins/NanoSockets/NanoSockets/Dynamic/NanoSockets.dll.meta
new file mode 100644
index 0000000..4e89bf0
--- /dev/null
+++ b/Assets/Photon/Fusion/Plugins/NanoSockets/NanoSockets/Dynamic/NanoSockets.dll.meta
@@ -0,0 +1,89 @@
+fileFormatVersion: 2
+guid: 97dbb2b4c5d67894381958ef748f2a74
+PluginImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ iconMap: {}
+ executionOrder: {}
+ defineConstraints: []
+ isPreloaded: 0
+ isOverridable: 0
+ isExplicitlyReferenced: 0
+ validateReferences: 1
+ platformData:
+ - first:
+ : Any
+ second:
+ enabled: 0
+ settings:
+ Exclude Android: 0
+ Exclude Editor: 0
+ Exclude Linux64: 0
+ Exclude OSXUniversal: 0
+ Exclude PS4: 1
+ Exclude PS5: 1
+ Exclude Switch: 1
+ Exclude Win: 0
+ Exclude Win64: 0
+ Exclude iOS: 1
+ - first:
+ Android: Android
+ second:
+ enabled: 1
+ settings:
+ CPU: ARMv7
+ - first:
+ Any:
+ second:
+ enabled: 0
+ settings: {}
+ - first:
+ Editor: Editor
+ second:
+ enabled: 1
+ settings:
+ CPU: AnyCPU
+ DefaultValueInitialized: true
+ OS: AnyOS
+ - first:
+ Standalone: Linux64
+ second:
+ enabled: 1
+ settings:
+ CPU: AnyCPU
+ - first:
+ Standalone: OSXUniversal
+ second:
+ enabled: 1
+ settings:
+ CPU: AnyCPU
+ - first:
+ Standalone: Win
+ second:
+ enabled: 1
+ settings:
+ CPU: x86
+ - first:
+ Standalone: Win64
+ second:
+ enabled: 1
+ settings:
+ CPU: x86_64
+ - first:
+ Windows Store Apps: WindowsStoreApps
+ second:
+ enabled: 0
+ settings:
+ CPU: AnyCPU
+ - first:
+ iPhone: iOS
+ second:
+ enabled: 0
+ settings:
+ AddToEmbeddedBinaries: false
+ CPU: AnyCPU
+ CompileFlags:
+ FrameworkDependencies:
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Photon/Fusion/Plugins/NanoSockets/NanoSockets/Static.meta b/Assets/Photon/Fusion/Plugins/NanoSockets/NanoSockets/Static.meta
new file mode 100644
index 0000000..6e06585
--- /dev/null
+++ b/Assets/Photon/Fusion/Plugins/NanoSockets/NanoSockets/Static.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 380f693c255fff44981fcfbdffdbac8a
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Photon/Fusion/Plugins/NanoSockets/NanoSockets/Static/NanoSockets.dll b/Assets/Photon/Fusion/Plugins/NanoSockets/NanoSockets/Static/NanoSockets.dll
new file mode 100644
index 0000000..6e441f2
Binary files /dev/null and b/Assets/Photon/Fusion/Plugins/NanoSockets/NanoSockets/Static/NanoSockets.dll differ
diff --git a/Assets/Photon/Fusion/Plugins/NanoSockets/NanoSockets/Static/NanoSockets.dll.meta b/Assets/Photon/Fusion/Plugins/NanoSockets/NanoSockets/Static/NanoSockets.dll.meta
new file mode 100644
index 0000000..a1dccf2
--- /dev/null
+++ b/Assets/Photon/Fusion/Plugins/NanoSockets/NanoSockets/Static/NanoSockets.dll.meta
@@ -0,0 +1,104 @@
+fileFormatVersion: 2
+guid: d42594000bed8de429fd22c181be00ab
+PluginImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ iconMap: {}
+ executionOrder: {}
+ defineConstraints: []
+ isPreloaded: 0
+ isOverridable: 0
+ isExplicitlyReferenced: 0
+ validateReferences: 1
+ platformData:
+ - first:
+ : Any
+ second:
+ enabled: 0
+ settings:
+ Exclude Android: 1
+ Exclude Editor: 1
+ Exclude Linux64: 1
+ Exclude OSXUniversal: 1
+ Exclude PS4: 0
+ Exclude PS5: 0
+ Exclude Switch: 0
+ Exclude Win: 1
+ Exclude Win64: 1
+ Exclude iOS: 0
+ - first:
+ Android: Android
+ second:
+ enabled: 0
+ settings:
+ CPU: ARMv7
+ - first:
+ Any:
+ second:
+ enabled: 0
+ settings: {}
+ - first:
+ Editor: Editor
+ second:
+ enabled: 0
+ settings:
+ CPU: AnyCPU
+ DefaultValueInitialized: true
+ OS: AnyOS
+ - first:
+ Nintendo Switch: Switch
+ second:
+ enabled: 1
+ settings: {}
+ - first:
+ PS4: PS4
+ second:
+ enabled: 1
+ settings: {}
+ - first:
+ PS5: PS5
+ second:
+ enabled: 1
+ settings: {}
+ - first:
+ Standalone: Linux64
+ second:
+ enabled: 0
+ settings:
+ CPU: None
+ - first:
+ Standalone: OSXUniversal
+ second:
+ enabled: 0
+ settings:
+ CPU: None
+ - first:
+ Standalone: Win
+ second:
+ enabled: 0
+ settings:
+ CPU: None
+ - first:
+ Standalone: Win64
+ second:
+ enabled: 0
+ settings:
+ CPU: None
+ - first:
+ Windows Store Apps: WindowsStoreApps
+ second:
+ enabled: 0
+ settings:
+ CPU: AnyCPU
+ - first:
+ iPhone: iOS
+ second:
+ enabled: 1
+ settings:
+ AddToEmbeddedBinaries: false
+ CPU: AnyCPU
+ CompileFlags:
+ FrameworkDependencies:
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Photon/Fusion/Plugins/NanoSockets/Windows.meta b/Assets/Photon/Fusion/Plugins/NanoSockets/Windows.meta
new file mode 100644
index 0000000..091eeeb
--- /dev/null
+++ b/Assets/Photon/Fusion/Plugins/NanoSockets/Windows.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 5d310c8f675fbe94695191c753bcb583
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Photon/Fusion/Plugins/NanoSockets/Windows/nanosockets.dll b/Assets/Photon/Fusion/Plugins/NanoSockets/Windows/nanosockets.dll
new file mode 100644
index 0000000..1fc1e7f
Binary files /dev/null and b/Assets/Photon/Fusion/Plugins/NanoSockets/Windows/nanosockets.dll differ
diff --git a/Assets/Photon/Fusion/Plugins/NanoSockets/Windows/nanosockets.dll.meta b/Assets/Photon/Fusion/Plugins/NanoSockets/Windows/nanosockets.dll.meta
new file mode 100644
index 0000000..e566d03
--- /dev/null
+++ b/Assets/Photon/Fusion/Plugins/NanoSockets/Windows/nanosockets.dll.meta
@@ -0,0 +1,80 @@
+fileFormatVersion: 2
+guid: 7b3f94104f169cc4e84342c38a1da2e3
+PluginImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ iconMap: {}
+ executionOrder: {}
+ defineConstraints: []
+ isPreloaded: 0
+ isOverridable: 0
+ isExplicitlyReferenced: 0
+ validateReferences: 1
+ platformData:
+ - first:
+ : Any
+ second:
+ enabled: 0
+ settings:
+ Exclude Android: 1
+ Exclude Editor: 0
+ Exclude Linux64: 0
+ Exclude OSXUniversal: 0
+ Exclude Win: 0
+ Exclude Win64: 0
+ Exclude iOS: 1
+ - first:
+ Android: Android
+ second:
+ enabled: 0
+ settings:
+ CPU: ARMv7
+ - first:
+ Any:
+ second:
+ enabled: 0
+ settings: {}
+ - first:
+ Editor: Editor
+ second:
+ enabled: 1
+ settings:
+ CPU: AnyCPU
+ DefaultValueInitialized: true
+ OS: AnyOS
+ - first:
+ Standalone: Linux64
+ second:
+ enabled: 1
+ settings:
+ CPU: None
+ - first:
+ Standalone: OSXUniversal
+ second:
+ enabled: 1
+ settings:
+ CPU: None
+ - first:
+ Standalone: Win
+ second:
+ enabled: 1
+ settings:
+ CPU: x86
+ - first:
+ Standalone: Win64
+ second:
+ enabled: 1
+ settings:
+ CPU: x86_64
+ - first:
+ iPhone: iOS
+ second:
+ enabled: 0
+ settings:
+ AddToEmbeddedBinaries: false
+ CPU: AnyCPU
+ CompileFlags:
+ FrameworkDependencies:
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Photon/Fusion/Plugins/NanoSockets/iOS.meta b/Assets/Photon/Fusion/Plugins/NanoSockets/iOS.meta
new file mode 100644
index 0000000..4c1791e
--- /dev/null
+++ b/Assets/Photon/Fusion/Plugins/NanoSockets/iOS.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: dcab16d8fc28b504cba47b74be7a55e4
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Photon/Fusion/Plugins/NanoSockets/iOS/libnanosockets.a b/Assets/Photon/Fusion/Plugins/NanoSockets/iOS/libnanosockets.a
new file mode 100644
index 0000000..59d62c9
Binary files /dev/null and b/Assets/Photon/Fusion/Plugins/NanoSockets/iOS/libnanosockets.a differ
diff --git a/Assets/Photon/Fusion/Plugins/NanoSockets/iOS/libnanosockets.a.meta b/Assets/Photon/Fusion/Plugins/NanoSockets/iOS/libnanosockets.a.meta
new file mode 100644
index 0000000..7942b50
--- /dev/null
+++ b/Assets/Photon/Fusion/Plugins/NanoSockets/iOS/libnanosockets.a.meta
@@ -0,0 +1,80 @@
+fileFormatVersion: 2
+guid: ce1995280bfb011488cdf6e584ba46bc
+PluginImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ iconMap: {}
+ executionOrder: {}
+ defineConstraints: []
+ isPreloaded: 0
+ isOverridable: 0
+ isExplicitlyReferenced: 0
+ validateReferences: 1
+ platformData:
+ - first:
+ : Any
+ second:
+ enabled: 0
+ settings:
+ Exclude Android: 1
+ Exclude Editor: 1
+ Exclude Linux64: 1
+ Exclude OSXUniversal: 1
+ Exclude Win: 1
+ Exclude Win64: 1
+ Exclude iOS: 0
+ - first:
+ Android: Android
+ second:
+ enabled: 0
+ settings:
+ CPU: ARMv7
+ - first:
+ Any:
+ second:
+ enabled: 0
+ settings: {}
+ - first:
+ Editor: Editor
+ second:
+ enabled: 0
+ settings:
+ CPU: AnyCPU
+ DefaultValueInitialized: true
+ OS: AnyOS
+ - first:
+ Standalone: Linux64
+ second:
+ enabled: 0
+ settings:
+ CPU: None
+ - first:
+ Standalone: OSXUniversal
+ second:
+ enabled: 0
+ settings:
+ CPU: None
+ - first:
+ Standalone: Win
+ second:
+ enabled: 0
+ settings:
+ CPU: None
+ - first:
+ Standalone: Win64
+ second:
+ enabled: 0
+ settings:
+ CPU: None
+ - first:
+ iPhone: iOS
+ second:
+ enabled: 1
+ settings:
+ AddToEmbeddedBinaries: false
+ CPU: AnyCPU
+ CompileFlags:
+ FrameworkDependencies:
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Photon/Fusion/Plugins/NanoSockets/libnanosockets_LICENSE b/Assets/Photon/Fusion/Plugins/NanoSockets/libnanosockets_LICENSE
new file mode 100644
index 0000000..56ff400
--- /dev/null
+++ b/Assets/Photon/Fusion/Plugins/NanoSockets/libnanosockets_LICENSE
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2019 Stanislav Denisov (nxrighthere@gmail.com)
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
\ No newline at end of file
diff --git a/Assets/Photon/Fusion/Plugins/NanoSockets/libnanosockets_LICENSE.meta b/Assets/Photon/Fusion/Plugins/NanoSockets/libnanosockets_LICENSE.meta
new file mode 100644
index 0000000..2d5897c
--- /dev/null
+++ b/Assets/Photon/Fusion/Plugins/NanoSockets/libnanosockets_LICENSE.meta
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: 2007cbe994ec1441bb4dc0783ee8d1f5
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Photon/Fusion/Plugins/NanoSockets/macOS.meta b/Assets/Photon/Fusion/Plugins/NanoSockets/macOS.meta
new file mode 100644
index 0000000..d0ce67b
--- /dev/null
+++ b/Assets/Photon/Fusion/Plugins/NanoSockets/macOS.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: b007cf72c6354874e99e60a963804385
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Photon/Fusion/Plugins/NanoSockets/macOS/AppleSilicon.meta b/Assets/Photon/Fusion/Plugins/NanoSockets/macOS/AppleSilicon.meta
new file mode 100644
index 0000000..a9ba180
--- /dev/null
+++ b/Assets/Photon/Fusion/Plugins/NanoSockets/macOS/AppleSilicon.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 3e3e6364aaeb0d240920fab8da44dc6d
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Photon/Fusion/Plugins/NanoSockets/macOS/AppleSilicon/libnanosockets.dylib b/Assets/Photon/Fusion/Plugins/NanoSockets/macOS/AppleSilicon/libnanosockets.dylib
new file mode 100644
index 0000000..ac51d11
Binary files /dev/null and b/Assets/Photon/Fusion/Plugins/NanoSockets/macOS/AppleSilicon/libnanosockets.dylib differ
diff --git a/Assets/Photon/Fusion/Plugins/NanoSockets/macOS/AppleSilicon/libnanosockets.dylib.meta b/Assets/Photon/Fusion/Plugins/NanoSockets/macOS/AppleSilicon/libnanosockets.dylib.meta
new file mode 100644
index 0000000..1feff7e
--- /dev/null
+++ b/Assets/Photon/Fusion/Plugins/NanoSockets/macOS/AppleSilicon/libnanosockets.dylib.meta
@@ -0,0 +1,63 @@
+fileFormatVersion: 2
+guid: a2f5edea154374a25bfdffaf6f0d04f8
+PluginImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ iconMap: {}
+ executionOrder: {}
+ defineConstraints: []
+ isPreloaded: 0
+ isOverridable: 0
+ isExplicitlyReferenced: 0
+ validateReferences: 1
+ platformData:
+ - first:
+ : Any
+ second:
+ enabled: 0
+ settings:
+ Exclude Editor: 1
+ Exclude Linux64: 1
+ Exclude OSXUniversal: 0
+ Exclude Win: 1
+ Exclude Win64: 1
+ - first:
+ Any:
+ second:
+ enabled: 0
+ settings: {}
+ - first:
+ Editor: Editor
+ second:
+ enabled: 0
+ settings:
+ CPU: AnyCPU
+ DefaultValueInitialized: true
+ OS: OSX
+ - first:
+ Standalone: Linux64
+ second:
+ enabled: 0
+ settings:
+ CPU: None
+ - first:
+ Standalone: OSXUniversal
+ second:
+ enabled: 1
+ settings:
+ CPU: ARM64
+ - first:
+ Standalone: Win
+ second:
+ enabled: 0
+ settings:
+ CPU: x86
+ - first:
+ Standalone: Win64
+ second:
+ enabled: 0
+ settings:
+ CPU: x86_64
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Photon/Fusion/Plugins/NanoSockets/macOS/Intel.meta b/Assets/Photon/Fusion/Plugins/NanoSockets/macOS/Intel.meta
new file mode 100644
index 0000000..e150ffb
--- /dev/null
+++ b/Assets/Photon/Fusion/Plugins/NanoSockets/macOS/Intel.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 18dca813845fe194492e7f2294234b12
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Photon/Fusion/Plugins/NanoSockets/macOS/Intel/libnanosockets.dylib b/Assets/Photon/Fusion/Plugins/NanoSockets/macOS/Intel/libnanosockets.dylib
new file mode 100644
index 0000000..7a5a7f2
Binary files /dev/null and b/Assets/Photon/Fusion/Plugins/NanoSockets/macOS/Intel/libnanosockets.dylib differ
diff --git a/Assets/Photon/Fusion/Plugins/NanoSockets/macOS/Intel/libnanosockets.dylib.meta b/Assets/Photon/Fusion/Plugins/NanoSockets/macOS/Intel/libnanosockets.dylib.meta
new file mode 100644
index 0000000..8422777
--- /dev/null
+++ b/Assets/Photon/Fusion/Plugins/NanoSockets/macOS/Intel/libnanosockets.dylib.meta
@@ -0,0 +1,80 @@
+fileFormatVersion: 2
+guid: 1c04cb8f7ee84ea46b2b6832cefd8819
+PluginImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ iconMap: {}
+ executionOrder: {}
+ defineConstraints: []
+ isPreloaded: 0
+ isOverridable: 0
+ isExplicitlyReferenced: 0
+ validateReferences: 1
+ platformData:
+ - first:
+ : Any
+ second:
+ enabled: 0
+ settings:
+ Exclude Android: 1
+ Exclude Editor: 0
+ Exclude Linux64: 1
+ Exclude OSXUniversal: 0
+ Exclude Win: 1
+ Exclude Win64: 1
+ Exclude iOS: 1
+ - first:
+ Android: Android
+ second:
+ enabled: 0
+ settings:
+ CPU: ARMv7
+ - first:
+ Any:
+ second:
+ enabled: 0
+ settings: {}
+ - first:
+ Editor: Editor
+ second:
+ enabled: 1
+ settings:
+ CPU: AnyCPU
+ DefaultValueInitialized: true
+ OS: OSX
+ - first:
+ Standalone: Linux64
+ second:
+ enabled: 0
+ settings:
+ CPU: None
+ - first:
+ Standalone: OSXUniversal
+ second:
+ enabled: 1
+ settings:
+ CPU: x86_64
+ - first:
+ Standalone: Win
+ second:
+ enabled: 0
+ settings:
+ CPU: x86
+ - first:
+ Standalone: Win64
+ second:
+ enabled: 0
+ settings:
+ CPU: x86_64
+ - first:
+ iPhone: iOS
+ second:
+ enabled: 0
+ settings:
+ AddToEmbeddedBinaries: false
+ CPU: AnyCPU
+ CompileFlags:
+ FrameworkDependencies:
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Photon/Fusion/Resources.meta b/Assets/Photon/Fusion/Resources.meta
new file mode 100644
index 0000000..59ab9cd
--- /dev/null
+++ b/Assets/Photon/Fusion/Resources.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: ffd898ee95fa1ca4abc86e2cfbe13fe9
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Photon/Fusion/Resources/ConfigAssetsFolder.txt b/Assets/Photon/Fusion/Resources/ConfigAssetsFolder.txt
new file mode 100644
index 0000000..1760267
--- /dev/null
+++ b/Assets/Photon/Fusion/Resources/ConfigAssetsFolder.txt
@@ -0,0 +1 @@
+This file exists to maintain a .meta file that is used to locate this config folder.
\ No newline at end of file
diff --git a/Assets/Photon/Fusion/Resources/ConfigAssetsFolder.txt.meta b/Assets/Photon/Fusion/Resources/ConfigAssetsFolder.txt.meta
new file mode 100644
index 0000000..1d8b440
--- /dev/null
+++ b/Assets/Photon/Fusion/Resources/ConfigAssetsFolder.txt.meta
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: 65cf5f43e8c20f941b0bb130b392ec89
+TextScriptImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Photon/Fusion/Resources/FusionGraphShader.shader b/Assets/Photon/Fusion/Resources/FusionGraphShader.shader
new file mode 100644
index 0000000..4372253
--- /dev/null
+++ b/Assets/Photon/Fusion/Resources/FusionGraphShader.shader
@@ -0,0 +1,164 @@
+Shader "Fusion Graph Shader"
+{
+ Properties
+ {
+ _MainTex ("Sprite Texture", 2D) = "white" {}
+
+ _ColorMask("Color Mask", Float) = 15
+
+ _GoodColor("Good Color", Color) = (0,1,0,1)
+ _WarnColor("Warn Color", Color) = (.9,.6,0,1)
+ _BadColor("Bad Color", Color) = (1,0,0,1)
+ _FlagColor("Flag Color", Color) = (1,1,0,1)
+ _InvalidColor("Invalid Color", Color) = (0,1,1,1)
+ _NoneColor("Flag Color", Color) = (0,0,0,0)
+ _ZWrite("ZWrite", Int) = 0
+ }
+
+ SubShader
+ {
+ Tags
+ {
+ "Queue"="Geometry+1000"
+ "IgnoreProjector"="True"
+ "RenderType"="Transparent"
+ "PreviewType"="Plane"
+ }
+
+ //Cull Off
+ Lighting Off
+ ZWrite [_ZWrite]
+ ZTest LEqual
+ Blend One OneMinusSrcAlpha
+ //Blend SrcAlpha OneMinusSrcAlpha
+ ColorMask [_ColorMask]
+
+ Pass
+ {
+
+ CGPROGRAM
+ #pragma vertex vert
+ #pragma fragment frag
+ #include "UnityCG.cginc"
+
+ struct appdata_t
+ {
+ float4 vertex : POSITION;
+ float2 texcoord : TEXCOORD0;
+ };
+
+ struct v2f
+ {
+ float4 vertex : SV_POSITION;
+ half2 texcoord : TEXCOORD0;
+ };
+
+ //fixed4 _Color;
+ fixed4 _GoodColor;
+ fixed4 _WarnColor;
+ fixed4 _BadColor;
+ fixed4 _FlagColor;
+ fixed4 _InvalidColor;
+ fixed4 _NoneColor;
+
+ // data for bar graph
+ uniform float _Data[1024];
+ uniform float _Intensity[1024];
+ uniform float _Count;
+ uniform float _Height;
+
+ uniform float _ZeroCenter;
+
+ v2f vert(appdata_t IN)
+ {
+ v2f OUT;
+ OUT.vertex = UnityObjectToClipPos(IN.vertex);
+ OUT.texcoord = IN.texcoord;
+#ifdef UNITY_HALF_TEXEL_OFFSET
+ OUT.vertex.xy += (_ScreenParams.zw-1.0)*float2(-1,1);
+#endif
+ return OUT;
+ }
+
+ fixed4 frag(v2f IN) : SV_Target
+ {
+ const float i = floor(IN.texcoord.x * _Count);
+ const float fv = _Intensity[i];
+ const float v = max(_Data[i], 1 / _Count);
+ const float y = IN.texcoord.y;
+
+ float a;
+ float dim;
+
+ // All lines draw outward from zero.
+ if (_ZeroCenter > 0) {
+ if (v > _ZeroCenter) {
+ dim = 1;
+
+ if (y > _ZeroCenter) {
+ a = !(y > v);
+ }
+ else {
+ a = 0;
+ }
+ }
+ else {
+ dim = .5;
+ if (y > _ZeroCenter) {
+ a = 0;
+ }
+ else {
+ if (y > v) {
+ a = .5;
+ }
+ else {
+ a = 0;
+ }
+ }
+ }
+ }
+ else {
+ dim = 1;
+ a = !(y > v);
+ }
+
+
+ // calculate alpha and rgb
+ float4 c;
+ if (_Count == 0) {
+ c.a = 0.1;
+ c.rgb = _NoneColor.rgb;
+ }
+ else {
+ if (fv == 0) {
+ c.rgb = _GoodColor.rgb * dim * a;
+ }
+ else if (fv == .5) {
+ c.rgb = _WarnColor.rgb * dim * a;
+ }
+ else if (fv == 1) {
+ c.rgb = _BadColor.rgb * dim * a;
+ }
+ else if (fv == -2) {
+ c.rgb = _NoneColor.rgb * .1;
+ }
+ else if (fv < 0) {
+ c.rgb = _InvalidColor.rgb * dim * a;
+ }
+ else if (fv > 1) {
+ c.rgb = _FlagColor.rgb;
+ }
+ else if (fv < 0.5) {
+ c.rgb = lerp(_GoodColor.rgb, _WarnColor.rgb, max(0, fv * 2)) * dim * a;
+ }
+ else {
+ c.rgb = lerp(_WarnColor.rgb, _BadColor.rgb, min(1, fv - .5f) * 2) * dim * a;
+ }
+ c.a = a;
+ }
+ return c;
+ }
+ ENDCG
+ }
+ }
+}
diff --git a/Assets/Photon/Fusion/Resources/FusionGraphShader.shader.meta b/Assets/Photon/Fusion/Resources/FusionGraphShader.shader.meta
new file mode 100644
index 0000000..9a500b4
--- /dev/null
+++ b/Assets/Photon/Fusion/Resources/FusionGraphShader.shader.meta
@@ -0,0 +1,10 @@
+fileFormatVersion: 2
+guid: 191d95ce624abaa4ba0294fc7baa2845
+ShaderImporter:
+ externalObjects: {}
+ defaultTextures: []
+ nonModifiableTextures: []
+ preprocessorOverride: 0
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Photon/Fusion/Resources/NetworkProjectConfig.fusion b/Assets/Photon/Fusion/Resources/NetworkProjectConfig.fusion
new file mode 100644
index 0000000..7417674
--- /dev/null
+++ b/Assets/Photon/Fusion/Resources/NetworkProjectConfig.fusion
@@ -0,0 +1 @@
+{"Version":1,"TypeId":"NetworkProjectConfig","PeerMode":0,"PhysicsEngine":0,"ServerPhysicsMode":0,"UseLagCompensation":true,"LagCompensation":{"HitboxBufferSize":60,"ExpansionFactor":0.20000000298023225,"Optimize":false,"DebugBroadphase":false,"DebugHistory":false,"DebugColor":{"r":0.0,"g":1.0,"b":0.0,"a":0.5},"ClientDebugColor":{"r":0.0,"g":0.0,"b":1.0,"a":0.5},"HistoryDebugColor":{"r":0.0,"g":0.0,"b":1.0,"a":0.5}},"SceneLoadSpawnMode":0,"DeltaCompressor":0,"InvokeRenderInBatchMode":true,"MaxNetworkedObjectCount":8192,"NetworkIdIsObjectName":false,"EnableHostMigration":false,"HostMigrationSnapshotInterval":60,"Simulation":{"InputDataWordCount":0,"TickRate":60,"DefaultPlayers":10,"ReplicationMode":0,"ObjectInterest":false,"SimulationCulling":false,"ServerPacketInterval":1,"ClientPacketInterval":1},"Interpolation":{"DeltaAdjustment":1,"AllowedJitter":25,"SnapLimit":200,"MultiplierMin":1.25,"MultiplierMax":3.0},"Network":{"SocketSendBufferSize":256,"SocketRecvBufferSize":256,"ConnectAttempts":10,"ConnectInterval":0.5,"ConnectionDefaultRtt":0.1,"ConnectionTimeout":10.0,"ConnectionPingInterval":1.0,"ConnectionShutdownTime":1.0,"MtuDefault":1136,"ReliableDataTransferModes":3},"NetworkConditions":{"Enabled":false,"DelayShape":1,"DelayMin":0.01,"DelayMax":0.1,"DelayPeriod":3.0,"DelayThreshold":0.5,"AdditionalJitter":0.01,"LossChanceShape":1,"LossChanceMin":0.0,"LossChanceMax":0.02,"LossChanceThreshold":0.9,"LossChancePeriod":3.0,"AdditionalLoss":0.005},"Heap":{"PageShift":14,"PageCount":128,"GlobalsSize":0},"AccuracyDefaults":{"coreKeys":["Uncompressed","Default","Position","Rotation","NormalizedTime"],"coreDefs":[{"_value":0.0,"_inverse":Infinity,"_hash":-1382104104},{"_value":0.0010000000474974514,"_inverse":999.9999389648438,"_hash":-814817977},{"_value":0.0010000000474974514,"_inverse":999.9999389648438,"_hash":-194233199},{"_value":0.0010000000474974514,"_inverse":999.9999389648438,"_hash":-258202764},{"_value":0.00009999999747378752,"_inverse":10000.0,"_hash":1061325578}],"coreVals":[{"_value":0.0,"_inverse":Infinity,"_hash":-1382104104},{"_value":0.0010000000474974514,"_inverse":999.9999389648438,"_hash":-814817977},{"_value":0.0010000000474974514,"_inverse":999.9999389648438,"_hash":-194233199},{"_value":0.0010000000474974514,"_inverse":999.9999389648438,"_hash":-258202764},{"_value":0.00009999999747378752,"_inverse":10000.0,"_hash":1061325578}],"tags":[],"values":[]},"AssembliesToWeave":["Assembly-CSharp","Assembly-CSharp-firstpass"],"UseSerializableDictionary":true,"NullChecksForNetworkedProperties":true}
\ No newline at end of file
diff --git a/Assets/Photon/Fusion/Resources/NetworkProjectConfig.fusion.meta b/Assets/Photon/Fusion/Resources/NetworkProjectConfig.fusion.meta
new file mode 100644
index 0000000..9fba001
--- /dev/null
+++ b/Assets/Photon/Fusion/Resources/NetworkProjectConfig.fusion.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 66160f7e98c87b64baf1de58ebb07f12
+ScriptedImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 2
+ userData:
+ assetBundleName:
+ assetBundleVariant:
+ script: {fileID: 11500000, guid: 66a64a17d0b40f34f9224317a5a84bf2, type: 3}
+ PrefabAssetsContainerPath:
diff --git a/Assets/Photon/Fusion/Resources/PhotonAppSettings.asset b/Assets/Photon/Fusion/Resources/PhotonAppSettings.asset
new file mode 100644
index 0000000..10a6484
--- /dev/null
+++ b/Assets/Photon/Fusion/Resources/PhotonAppSettings.asset
@@ -0,0 +1,29 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!114 &11400000
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 1878438611, guid: 7de3b8b9e1263ad479e2d0c4261b7646, type: 3}
+ m_Name: PhotonAppSettings
+ m_EditorClassIdentifier:
+ AppSettings:
+ AppIdFusion: 9dc77937-8216-4732-b478-bebb2fd2ef86
+ AppIdChat:
+ AppIdVoice:
+ AppVersion:
+ UseNameServer: 1
+ FixedRegion:
+ Server:
+ Port: 0
+ ProxyServer:
+ Protocol: 0
+ EnableProtocolFallback: 1
+ AuthMode: 0
+ EnableLobbyStatistics: 0
+ NetworkLogging: 1
diff --git a/Assets/Photon/Fusion/Resources/PhotonAppSettings.asset.meta b/Assets/Photon/Fusion/Resources/PhotonAppSettings.asset.meta
new file mode 100644
index 0000000..38146b2
--- /dev/null
+++ b/Assets/Photon/Fusion/Resources/PhotonAppSettings.asset.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 272e58ac78140ee458df16cfb48052da
+NativeFormatImporter:
+ externalObjects: {}
+ mainObjectFileID: 11400000
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Photon/Fusion/Scripts.meta b/Assets/Photon/Fusion/Scripts.meta
new file mode 100644
index 0000000..7462f45
--- /dev/null
+++ b/Assets/Photon/Fusion/Scripts.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: b1a5cbf852da42e409850f07dffecb92
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Photon/Fusion/Scripts/BurstDeltaCompressor.cs b/Assets/Photon/Fusion/Scripts/BurstDeltaCompressor.cs
new file mode 100644
index 0000000..558d09d
--- /dev/null
+++ b/Assets/Photon/Fusion/Scripts/BurstDeltaCompressor.cs
@@ -0,0 +1 @@
+// deleted 28th may 2021
\ No newline at end of file
diff --git a/Assets/Photon/Fusion/Scripts/BurstDeltaCompressor.cs.meta b/Assets/Photon/Fusion/Scripts/BurstDeltaCompressor.cs.meta
new file mode 100644
index 0000000..a81ec3a
--- /dev/null
+++ b/Assets/Photon/Fusion/Scripts/BurstDeltaCompressor.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 95c90ab8ac9d71947a268a782c9523a7
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Photon/Fusion/Scripts/Editor.meta b/Assets/Photon/Fusion/Scripts/Editor.meta
new file mode 100644
index 0000000..51f1db2
--- /dev/null
+++ b/Assets/Photon/Fusion/Scripts/Editor.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 1b1d6621a2aef9d43ad2b1d47d5dc852
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Photon/Fusion/Scripts/Editor/Fusion.Editor.asmdef b/Assets/Photon/Fusion/Scripts/Editor/Fusion.Editor.asmdef
new file mode 100644
index 0000000..53f9f90
--- /dev/null
+++ b/Assets/Photon/Fusion/Scripts/Editor/Fusion.Editor.asmdef
@@ -0,0 +1,41 @@
+{
+ "name": "Fusion.Editor",
+ "rootNamespace": "",
+ "references": [
+ "GUID:142cc54f3f73e4dabac1c30b19afb51d",
+ "GUID:19e39f4cea842594788e0c7be4c044c8"
+ ],
+ "includePlatforms": [
+ "Editor"
+ ],
+ "excludePlatforms": [],
+ "allowUnsafeCode": true,
+ "overrideReferences": true,
+ "precompiledReferences": [
+ "Mono.Cecil.dll",
+ "Mono.Cecil.Pdb.dll",
+ "Mono.Cecil.Mdb.dll",
+ "Mono.Cecil.Rocks.dll",
+ "Fusion.Common.dll",
+ "Fusion.Runtime.dll",
+ "Fusion.Realtime.dll",
+ "Sirenix.OdinInspector.Editor.dll",
+ "Sirenix.Utilities.Editor.dll",
+ "Sirenix.Utilities.dll"
+ ],
+ "autoReferenced": true,
+ "defineConstraints": [],
+ "versionDefines": [
+ {
+ "name": "com.unity.nuget.mono-cecil",
+ "expression": "1",
+ "define": "FUSION_HAS_MONO_CECIL"
+ },
+ {
+ "name": "nuget.mono-cecil",
+ "expression": "0.1",
+ "define": "FUSION_HAS_MONO_CECIL"
+ }
+ ],
+ "noEngineReferences": false
+}
\ No newline at end of file
diff --git a/Assets/Photon/Fusion/Scripts/Editor/Fusion.Editor.asmdef.meta b/Assets/Photon/Fusion/Scripts/Editor/Fusion.Editor.asmdef.meta
new file mode 100644
index 0000000..42ebe57
--- /dev/null
+++ b/Assets/Photon/Fusion/Scripts/Editor/Fusion.Editor.asmdef.meta
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: 4d449a4732e064d26a3069f2cfd88917
+AssemblyDefinitionImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Photon/Fusion/Scripts/Editor/Fusion.Editor.cs b/Assets/Photon/Fusion/Scripts/Editor/Fusion.Editor.cs
new file mode 100644
index 0000000..bc1ce40
--- /dev/null
+++ b/Assets/Photon/Fusion/Scripts/Editor/Fusion.Editor.cs
@@ -0,0 +1,11056 @@
+#if !FUSION_DEV
+
+#region Assets/Photon/Fusion/Scripts/Editor/AssetObjectEditor.cs
+
+namespace Fusion.Editor {
+ using Fusion;
+ using UnityEditor;
+
+ [CustomEditor(typeof(AssetObject), true)]
+ public class AssetObjectEditor : UnityEditor.Editor {
+ public override void OnInspectorGUI() {
+ base.OnInspectorGUI();
+ }
+ }
+}
+
+
+#endregion
+
+
+#region Assets/Photon/Fusion/Scripts/Editor/AssetPipeline/INetworkPrefabSourceFactory.cs
+
+namespace Fusion.Editor {
+ using System;
+
+ public interface INetworkPrefabSourceFactory {
+ int Order { get; }
+ Type SourceType { get; }
+
+ NetworkPrefabSourceUnityBase TryCreate(string assetPath);
+ UnityEngine.GameObject EditorResolveSource(NetworkPrefabSourceUnityBase prefabAsset);
+ }
+}
+
+
+#endregion
+
+
+#region Assets/Photon/Fusion/Scripts/Editor/AssetPipeline/NetworkPrefabSourceFactory.cs
+
+namespace Fusion.Editor {
+ using System;
+ using System.Linq;
+
+ internal static class NetworkPrefabSourceFactory {
+
+ private static readonly Lazy _factories = new Lazy(() => {
+ return UnityEditor.TypeCache.GetTypesDerivedFrom()
+ .Select(x => (INetworkPrefabSourceFactory)Activator.CreateInstance(x))
+ .OrderBy(x => x.Order)
+ .ToArray();
+ });
+
+ public static NetworkPrefabSourceUnityBase Create(string assetPath) {
+ foreach (var factory in _factories.Value) {
+ var source = factory.TryCreate(assetPath);
+ if (source != null) {
+ if (source.GetType() != factory.SourceType) {
+ throw new InvalidOperationException($"Factory {factory} is expected to return {factory.SourceType}, returned {source.GetType()} instead");
+ }
+ if (source is INetworkPrefabSource == false) {
+ throw new InvalidOperationException($"Type {source.GetType()} does not implement {nameof(INetworkPrefabSource)}");
+ }
+ return source;
+ }
+ }
+
+ throw new InvalidOperationException($"No factory could create info for prefab {assetPath}");
+ }
+
+ public static NetworkObject ResolveOrThrow(NetworkPrefabSourceUnityBase source) {
+ foreach (var factory in _factories.Value) {
+ if (factory.SourceType == source.GetType()) {
+ var prefab = factory.EditorResolveSource(source);
+ if (prefab == null) {
+ throw new InvalidOperationException($"Factory {factory} returned null for {source}");
+ }
+ var networkObject = prefab.GetComponent();
+ if (networkObject == null) {
+ throw new InvalidOperationException($"Prefab {prefab} does not contain {nameof(NetworkObject)} component");
+ }
+ return networkObject;
+ }
+ }
+
+ throw new InvalidOperationException($"No factory could resolve {source}");
+ }
+ }
+}
+
+
+#endregion
+
+
+#region Assets/Photon/Fusion/Scripts/Editor/AssetPipeline/NetworkPrefabSourceFactoryResource.cs
+
+namespace Fusion.Editor {
+ using System;
+ using UnityEditor;
+ using UnityEngine;
+
+ public class NetworkPrefabAssetFactoryResource: INetworkPrefabSourceFactory {
+
+ public const int DefaultOrder = 1000;
+
+ Type INetworkPrefabSourceFactory.SourceType => typeof(NetworkPrefabSourceUnityResource);
+
+ int INetworkPrefabSourceFactory.Order => DefaultOrder;
+
+ NetworkPrefabSourceUnityBase INetworkPrefabSourceFactory.TryCreate(string assetPath) {
+ if (PathUtils.MakeRelativeToFolder(assetPath, "Resources", out var resourcesPath)) {
+ var result = ScriptableObject.CreateInstance();
+ result.ResourcePath = PathUtils.GetPathWithoutExtension(resourcesPath);
+ return result;
+ } else {
+ return null;
+ }
+ }
+
+ GameObject INetworkPrefabSourceFactory.EditorResolveSource(NetworkPrefabSourceUnityBase prefabAsset) {
+ var resource = (NetworkPrefabSourceUnityResource)prefabAsset;
+ return Resources.Load(resource.ResourcePath);
+ }
+ }
+}
+
+
+#endregion
+
+
+#region Assets/Photon/Fusion/Scripts/Editor/AssetPipeline/NetworkPrefabSourceFactoryStatic.cs
+
+namespace Fusion.Editor {
+ using System;
+ using UnityEditor;
+ using UnityEngine;
+
+ public class NetworkPrefabAssetFactoryStatic : INetworkPrefabSourceFactory {
+
+ public const int DefaultOrder = 2000;
+
+ Type INetworkPrefabSourceFactory.SourceType => typeof(NetworkPrefabSourceUnityStatic);
+
+ int INetworkPrefabSourceFactory.Order => DefaultOrder;
+
+ NetworkPrefabSourceUnityBase INetworkPrefabSourceFactory.TryCreate(string assetPath) {
+ var gameObject = AssetDatabase.LoadAssetAtPath(assetPath);
+ if (gameObject == null) {
+ throw new InvalidOperationException($"Unable to load {assetPath}");
+ }
+
+ var networkObject = gameObject.GetComponent();
+ if (networkObject == null) {
+ throw new InvalidOperationException($"Unable to get {nameof(NetworkObject)} from {assetPath}");
+ }
+
+ var result = ScriptableObject.CreateInstance();
+ result.PrefabReference = gameObject;
+ return result;
+ }
+
+ GameObject INetworkPrefabSourceFactory.EditorResolveSource(NetworkPrefabSourceUnityBase prefabAsset) {
+ return ((NetworkPrefabSourceUnityStatic)prefabAsset).PrefabReference;
+ }
+ }
+}
+
+
+#endregion
+
+
+#region Assets/Photon/Fusion/Scripts/Editor/BehaviourEditor.cs
+
+namespace Fusion.Editor {
+
+ using System;
+ using System.Collections.Generic;
+ using System.Linq;
+ using UnityEditor;
+
+ [CustomEditor(typeof(Fusion.Behaviour), true)]
+ [CanEditMultipleObjects]
+ public partial class BehaviourEditor :
+#if ODIN_INSPECTOR && !FUSION_ODIN_DISABLED
+ Sirenix.OdinInspector.Editor.OdinEditor
+#else
+ UnityEditor.Editor
+#endif
+ {
+ protected string _expandedHelpName;
+ protected BehaviourActionInfo[] behaviourActions;
+
+ public override void OnInspectorGUI() {
+ PrepareInspectorGUI();
+ base.DrawDefaultInspector();
+ DrawBehaviourActions();
+ }
+
+ protected void PrepareInspectorGUI() {
+ FusionEditorGUI.InjectPropertyDrawers(serializedObject);
+ }
+
+ protected void DrawBehaviourActions() {
+ // Draw any BehaviourActionAttributes for this Component
+ if (behaviourActions == null) {
+ behaviourActions = target.GetActionAttributes();
+ }
+
+ target.DrawAllBehaviourActionAttributes(behaviourActions, ref _expandedHelpName);
+ }
+ }
+}
+
+
+#endregion
+
+
+#region Assets/Photon/Fusion/Scripts/Editor/BehaviourEditorUtils.cs
+
+namespace Fusion.Editor {
+ using System;
+ using System.Collections.Generic;
+ using System.Reflection;
+ using UnityEditor;
+ using UnityEngine;
+
+ public class BehaviourActionInfo {
+ public string MemberName;
+ public string Summary;
+ public Attribute Attribute;
+ public Action Action;
+ public MemberInfo MemberInfo;
+ public Func