From 2da89a94bfa8ee8d035231099643bf7dc433516d Mon Sep 17 00:00:00 2001 From: laurids Date: Thu, 21 Jan 2021 18:47:20 +0100 Subject: [PATCH] Multiplayer Fixes --- Assets/GWConquest/Scripts/BoltList.cs | 41 ++++++++++++++-- Assets/GWConquest/Scripts/Formation.cs | 30 ++++++++++-- Assets/GWConquest/Scripts/GameManager.cs | 21 +++++++-- Assets/GWConquest/Scripts/GlobalCallbacks.cs | 41 +++++++++++++++- Assets/GWConquest/Scripts/Inventory.cs | 27 +++++++---- Assets/GWConquest/Scripts/Planet.cs | 18 +++++-- Assets/GWConquest/Scripts/PlanetConnection.cs | 2 +- Assets/GWConquest/Scripts/Player.cs | 2 +- Assets/GWConquest/Scripts/ServerCallbacks.cs | 16 ++++++- Assets/GWConquest/Scripts/UI/BalanceUI.cs | 44 ++++++++++-------- Assets/GWConquest/Scripts/UI/FormationIcon.cs | 4 +- Assets/GWConquest/Scripts/UI/GarrisonUI.cs | 2 +- .../Scripts/UI/PlanetIndicatorUI.cs | 3 +- .../Scripts/UI/TransportUIEquipmentIcon.cs | 2 +- Assets/GWConquest/Scripts/UI/UnitInfoPanel.cs | 2 +- Assets/GWConquest/Scripts/Unit.cs | 7 +++ Assets/GWConquest/Scripts/Zone.cs | 15 +++--- .../PhotonBolt/assemblies/bolt.user.dll | Bin 70656 -> 74240 bytes .../PhotonBolt/assemblies/bolt.user.dll.mdb | Bin 30329 -> 32346 bytes Assets/Photon/PhotonBolt/project.json | 40 ++++++++++++++++ .../resources/BoltRuntimeSettings.asset | 2 +- 21 files changed, 257 insertions(+), 62 deletions(-) diff --git a/Assets/GWConquest/Scripts/BoltList.cs b/Assets/GWConquest/Scripts/BoltList.cs index 16741a5..b819411 100644 --- a/Assets/GWConquest/Scripts/BoltList.cs +++ b/Assets/GWConquest/Scripts/BoltList.cs @@ -46,7 +46,7 @@ namespace GWConquest set { Token.entries[index] = value; - Token = Token; + Token = new TokenClass().SetEntries(Token.entries) as TokenClass; } } @@ -117,6 +117,11 @@ namespace GWConquest { return new GenericListEnumerator(this); } + + public override string ToString() + { + return "BoltList " + Util.PrintEnumerable(this); + } } public abstract class BoltListToken : IProtocolToken @@ -136,25 +141,25 @@ namespace GWConquest public void Read(UdpPacket packet) { - BoltLog.Info("Reading Bolt list..."); + //BoltLog.Info("Reading Bolt list..."); int count = packet.ReadInt(); entries = new T[count]; for (int i = 0; i < count; i++) { entries[i] = ReadEntry(packet); } - BoltLog.Info("Finished reading Bolt list {0}", this); + //BoltLog.Info("Finished reading Bolt list {0}", this); } public void Write(UdpPacket packet) { - BoltLog.Info("Writing Bolt list..."); + //BoltLog.Info("Writing Bolt list..."); packet.WriteInt(entries.Length); foreach (T e in entries) { WriteEntry(packet, e); } - BoltLog.Info("Finished writing Bolt list {0}", this); + //BoltLog.Info("Finished writing Bolt list {0}", this); } public override string ToString() @@ -162,6 +167,32 @@ namespace GWConquest return "BoltList " + Util.PrintEnumerable(entries); } + public override bool Equals(object obj) + { + if(obj == null || !(obj is BoltListToken)) + return false; + + var other = obj as BoltListToken; + + if(entries.Length != other.entries.Length) + return false; + + for(int i = 0; i < entries.Length; i++) + { + if(entries[i] == null) + { + if(other.entries[i] != null) + return false; + } + else { + if(!entries[i].Equals(other.entries[i])) + return false; + } + } + + return true; + } + public abstract T ReadEntry(UdpPacket packet); public abstract void WriteEntry(UdpPacket packet, T entry); diff --git a/Assets/GWConquest/Scripts/Formation.cs b/Assets/GWConquest/Scripts/Formation.cs index dbb30fa..4d03062 100644 --- a/Assets/GWConquest/Scripts/Formation.cs +++ b/Assets/GWConquest/Scripts/Formation.cs @@ -8,6 +8,8 @@ namespace GWConquest { public class Formation : GWBoltBehaviour, IMovable { + public static List AllFormations = new List(); + private Zone lastZone; public Zone currentZone { @@ -120,7 +122,10 @@ namespace GWConquest public float movementSpeed = 1f; - public int formationNumber; + public int FormationNumber { + get => State.FormationNumber; + set => State.FormationNumber = value; + } public bool keepFormationName = false; [System.NonSerialized] @@ -404,6 +409,8 @@ namespace GWConquest PathQueue = new ZoneList(State, "PathQueue"); + AllFormations.Add(this); + if(entity.IsOwner) { State.CurrentZone = -1; @@ -411,7 +418,7 @@ namespace GWConquest CoveredDistance = 0; - formationNumber = UnityEngine.Random.Range(1, 100); + FormationNumber = UnityEngine.Random.Range(1, 100); } State.AddCallback("IsInTransit", OnTransitStateChanged); @@ -423,7 +430,15 @@ namespace GWConquest { if(entity.IsAttached) { - return UnitEntities.Sum(unit => unit.Entity.GetComponent().Class.UnitStrength); + return UnitEntities.Sum(unit => { + if(unit.Entity != null && unit.Entity.IsAttached) + { + return unit.Entity.GetComponent().Class.UnitStrength; + } + else { + return 0f; + } + }); } else { return 0f; @@ -525,7 +540,7 @@ namespace GWConquest public void ConstructName() { - string name = Util.GetOrdinalString(formationNumber) + " "; + string name = Util.GetOrdinalString(FormationNumber) + " "; name += FormationCategories.Instance.GetCategoryEntry(Category).Name + " "; @@ -581,6 +596,13 @@ namespace GWConquest State.FormationName = name; } + public override string ToString() + { + return string.Format("Formation {0} [{1}]", FormationName, Player); + } + + + } diff --git a/Assets/GWConquest/Scripts/GameManager.cs b/Assets/GWConquest/Scripts/GameManager.cs index c3cd6e1..1654559 100644 --- a/Assets/GWConquest/Scripts/GameManager.cs +++ b/Assets/GWConquest/Scripts/GameManager.cs @@ -1,4 +1,5 @@ using UnityEngine; +using System.Collections; namespace GWConquest { @@ -6,6 +7,10 @@ namespace GWConquest { public static int HostFactionIndex = 0; + public static bool EntitiesLoaded = false; + + public static int InitialEntityCount = -1; + public Faction[] Factions; public UnitClass[] UnitClasses; @@ -64,10 +69,11 @@ namespace GWConquest BoltLog.Info("Setup planet pathfinding."); } - public void OnSceneLoadLocalDone() + public void SceneLoadLocalDone() { if(SpawnAIPlayer) { + BoltLog.Info("Spawning AI players..."); for(int i = 0; i < Factions.Length; i++) { var faction = Factions[i]; @@ -80,10 +86,19 @@ namespace GWConquest playerEntity.GetComponent().AssignStartingPlanets(); } } - } - BoltLog.Info("Scene load done."); + } + + public void SetEntitiesLoaded() + { + StartCoroutine(EntitiesLoadedAsync()); + } + + private IEnumerator EntitiesLoadedAsync() + { + yield return new WaitForFixedUpdate(); + EntitiesLoaded = true; } } diff --git a/Assets/GWConquest/Scripts/GlobalCallbacks.cs b/Assets/GWConquest/Scripts/GlobalCallbacks.cs index 92607a0..041e394 100644 --- a/Assets/GWConquest/Scripts/GlobalCallbacks.cs +++ b/Assets/GWConquest/Scripts/GlobalCallbacks.cs @@ -1,4 +1,7 @@ -using UnityEngine; +using Bolt; +using UdpKit; +using UnityEngine; +using System.Linq; namespace GWConquest { @@ -15,9 +18,45 @@ namespace GWConquest public override void SceneLoadLocalDone(string scene) { + //BoltLog.Info("scene load token: {0}", token); + GameOptions.ApplyOptions(); GameManager.Instance.OnSceneLoadDoneAll(); } + + public override void SessionConnected(UdpSession session, IProtocolToken token) + { + BoltLog.Info("Session connected."); + } + + public override void OnEvent(ServerConfigEvent evnt) + { + if(BoltNetwork.IsClient) + { + GameManager.InitialEntityCount = evnt.EntityCount; + } + } + + public override void EntityReceived(BoltEntity entity) + { + if(BoltNetwork.IsClient && !GameManager.EntitiesLoaded) + { + var ecount = BoltNetwork.Entities.Count(); + if(ecount >= GameManager.InitialEntityCount) + { + BoltLog.Info("All entities retrieved!"); + GameManager.Instance.SetEntitiesLoaded(); + } + } + } + + + + + + + + } } \ No newline at end of file diff --git a/Assets/GWConquest/Scripts/Inventory.cs b/Assets/GWConquest/Scripts/Inventory.cs index ae264d6..ddb0b93 100644 --- a/Assets/GWConquest/Scripts/Inventory.cs +++ b/Assets/GWConquest/Scripts/Inventory.cs @@ -7,7 +7,7 @@ using UnityEngine; namespace GWConquest { [System.Serializable] - public class ItemStack : IIconObject, IProtocolToken + public struct ItemStack : IIconObject, IProtocolToken { public static int MaxStackSize { get => GameManager.Instance.MaxStackSize; @@ -15,7 +15,12 @@ namespace GWConquest public bool IsUnit; public string ItemName; - public Unit Unit; + public NetworkId UnitId; + + public Unit Unit + { + get => BoltNetwork.FindEntity(UnitId)?.GetComponent(); + } public bool Stackable; public int Amount; @@ -74,7 +79,7 @@ namespace GWConquest { return new ItemStack { IsUnit = true, - Unit = unit, + UnitId = unit.entity.NetworkId, Stackable = false, Amount = 1 }; @@ -83,7 +88,7 @@ namespace GWConquest public ItemStack Copy() { return new ItemStack() { IsUnit = IsUnit, - Unit = Unit, + UnitId = UnitId, ItemName = ItemName, Stackable = Stackable, Amount = Amount @@ -103,7 +108,7 @@ namespace GWConquest packet.WriteBool(IsUnit); if(IsUnit) { - packet.WriteULong(Unit.entity.NetworkId.PackedValue); + packet.WriteULong(UnitId.PackedValue); } else { packet.WriteString(ItemName); @@ -118,7 +123,7 @@ namespace GWConquest IsUnit = packet.ReadBool(); if(IsUnit) { - Unit = BoltNetwork.FindEntity(new NetworkId(packet.ReadULong()))?.GetComponent(); + UnitId = new NetworkId(packet.ReadULong()); } else { ItemName = packet.ReadString(); @@ -176,20 +181,24 @@ namespace GWConquest public bool AddItem(string item, int amount) { if(DoesItemFit(item, amount)) { - foreach(var stack in this) + for(int i = 0; i < Count; i++) { + var stack = this[i]; if(!stack.IsUnit && stack.ItemName == item) { int remainingRoom = ItemStack.MaxStackSize - stack.Amount; if(remainingRoom >= amount) { stack.Amount += amount; + this[i] = stack; return true; } else { amount -= remainingRoom; stack.Amount = ItemStack.MaxStackSize; + this[i] = stack; } + } } @@ -220,7 +229,9 @@ namespace GWConquest if(dict.ContainsKey(stack.ItemName)) { - dict[stack.ItemName].Amount += stack.Amount; + var s = dict[stack.ItemName]; + s.Amount += stack.Amount; + dict[stack.ItemName] = s; } else { dict[stack.ItemName] = stack.Copy(); diff --git a/Assets/GWConquest/Scripts/Planet.cs b/Assets/GWConquest/Scripts/Planet.cs index 321a5c6..ca0b997 100644 --- a/Assets/GWConquest/Scripts/Planet.cs +++ b/Assets/GWConquest/Scripts/Planet.cs @@ -174,13 +174,25 @@ namespace GWConquest public event Action FormationsChanged; + private bool formationsChangedSinceLastFrame = true; + public void OnFormationsChanged() { - FormationsChanged?.Invoke(); + formationsChangedSinceLastFrame = true; + } - if (indicatorUI != null) + private void FixedUpdate() + { + if(GameManager.EntitiesLoaded && formationsChangedSinceLastFrame) { - indicatorUI.UpdateIndicator(); + FormationsChanged?.Invoke(); + + if (indicatorUI != null) + { + indicatorUI.UpdateIndicator(); + } + + formationsChangedSinceLastFrame = false; } } diff --git a/Assets/GWConquest/Scripts/PlanetConnection.cs b/Assets/GWConquest/Scripts/PlanetConnection.cs index e0110c9..cd9b71f 100644 --- a/Assets/GWConquest/Scripts/PlanetConnection.cs +++ b/Assets/GWConquest/Scripts/PlanetConnection.cs @@ -29,7 +29,7 @@ namespace GWConquest private Color neutralColor; private void FixedUpdate() { - if(Application.isPlaying) + if(Application.isPlaying && GameManager.EntitiesLoaded) { Color color1 = neutralColor; Color color2 = neutralColor; diff --git a/Assets/GWConquest/Scripts/Player.cs b/Assets/GWConquest/Scripts/Player.cs index f96e72f..5eff173 100644 --- a/Assets/GWConquest/Scripts/Player.cs +++ b/Assets/GWConquest/Scripts/Player.cs @@ -100,7 +100,7 @@ namespace GWConquest public override string ToString() { - return string.Format("Player (ID {0}, Faction {1})", state.PlayerId, Faction.FactionName); + return string.Format("Player (ID {0}, Faction {1})", State.PlayerId, Faction.FactionName); } } diff --git a/Assets/GWConquest/Scripts/ServerCallbacks.cs b/Assets/GWConquest/Scripts/ServerCallbacks.cs index d0e487d..8189ddc 100644 --- a/Assets/GWConquest/Scripts/ServerCallbacks.cs +++ b/Assets/GWConquest/Scripts/ServerCallbacks.cs @@ -17,9 +17,23 @@ namespace GWConquest playerEntity.GetComponent().AssignStartingPlanets(); playerEntity.TakeControl(); + GameManager.Instance.SceneLoadLocalDone(); + foreach(GameObject go in FindObjectsOfType()) { go.SendMessage("OnSceneLoadLocalDone", SendMessageOptions.DontRequireReceiver); } + + var ecount = BoltNetwork.Entities.Count(); + + GameManager.InitialEntityCount = ecount; + + var configEvnt = ServerConfigEvent.Create(Bolt.GlobalTargets.AllClients); + configEvnt.EntityCount = ecount; + configEvnt.Send(); + + GameManager.EntitiesLoaded = true; + + BoltLog.Info("Server scene loading done."); } public override void SceneLoadRemoteDone(BoltConnection connection) @@ -55,7 +69,7 @@ namespace GWConquest } if(evnt.TargetFormation != null) { - formation.state.MovementTargetFormation = evnt.TargetFormation; + formation.State.MovementTargetFormation = evnt.TargetFormation; } } diff --git a/Assets/GWConquest/Scripts/UI/BalanceUI.cs b/Assets/GWConquest/Scripts/UI/BalanceUI.cs index 27d6819..28969ad 100644 --- a/Assets/GWConquest/Scripts/UI/BalanceUI.cs +++ b/Assets/GWConquest/Scripts/UI/BalanceUI.cs @@ -12,33 +12,37 @@ namespace GWConquest public MoneyDisplay FuelDisplay; private void FixedUpdate() { - var currentPlayer = Player.CurrentPlayer; - - if(currentPlayer != null) + if(GameManager.EntitiesLoaded) { - CreditsDisplay.Total = currentPlayer.Credits; - - int totalFood = 0; - int totalSupplies = 0; - int totalFuel = 0; + var currentPlayer = Player.CurrentPlayer; - foreach(var d in District.AllDistricts) + if(currentPlayer != null) { - if(d.ControllingPlayer == currentPlayer) + CreditsDisplay.Total = currentPlayer.Credits; + + int totalFood = 0; + int totalSupplies = 0; + int totalFuel = 0; + + foreach(var d in District.AllDistricts) { - totalFood += d.Inventory.GetItemAmount("Food"); - totalSupplies += d.Inventory.GetItemAmount("Supplies"); - totalFuel += d.Inventory.GetItemAmount("Fuel"); + if(d.ControllingPlayer == currentPlayer) + { + totalFood += d.Inventory.GetItemAmount("Food"); + totalSupplies += d.Inventory.GetItemAmount("Supplies"); + totalFuel += d.Inventory.GetItemAmount("Fuel"); + } } - } - //var query = Zone.AllZones.Select(z => z.GetComponent()) - // .Where(d => d != null && d.ControllingPlayer == currentPlayer) - // .SelectMany(d => d.Inventory); + //var query = Zone.AllZones.Select(z => z.GetComponent()) + // .Where(d => d != null && d.ControllingPlayer == currentPlayer) + // .SelectMany(d => d.Inventory); + + FoodDisplay.Total = totalFood; + SuppliesDisplay.Total = totalSupplies; + FuelDisplay.Total = totalFuel; + } - FoodDisplay.Total = totalFood; - SuppliesDisplay.Total = totalSupplies; - FuelDisplay.Total = totalFuel; } diff --git a/Assets/GWConquest/Scripts/UI/FormationIcon.cs b/Assets/GWConquest/Scripts/UI/FormationIcon.cs index 6c4923d..b5fb487 100644 --- a/Assets/GWConquest/Scripts/UI/FormationIcon.cs +++ b/Assets/GWConquest/Scripts/UI/FormationIcon.cs @@ -37,8 +37,8 @@ namespace GWConquest { FormationImage.sprite = category.Icon; FormationNumberText.gameObject.SetActive(true); - FormationNumberText.text = f.formationNumber.ToString(); - FormationNumberEnding.text = Util.GetOrdinalEnding(f.formationNumber); + FormationNumberText.text = f.FormationNumber.ToString(); + FormationNumberEnding.text = Util.GetOrdinalEnding(f.FormationNumber); for(int i = 0; i < StrengthGameObjects.Length; i++) { diff --git a/Assets/GWConquest/Scripts/UI/GarrisonUI.cs b/Assets/GWConquest/Scripts/UI/GarrisonUI.cs index 11fc14b..03c0937 100644 --- a/Assets/GWConquest/Scripts/UI/GarrisonUI.cs +++ b/Assets/GWConquest/Scripts/UI/GarrisonUI.cs @@ -76,7 +76,7 @@ namespace GWConquest var icons = new List(); icons.AddRange(f.Units); - icons.AddRange(f.AllItems); + //icons.AddRange(f.AllItems); int unitsPerRow = Mathf.FloorToInt(armyGroupWidth / (unitWidth + IconOffset)); int rowCount = Mathf.CeilToInt((float)icons.Count / unitsPerRow); diff --git a/Assets/GWConquest/Scripts/UI/PlanetIndicatorUI.cs b/Assets/GWConquest/Scripts/UI/PlanetIndicatorUI.cs index 50c4eae..773e94a 100644 --- a/Assets/GWConquest/Scripts/UI/PlanetIndicatorUI.cs +++ b/Assets/GWConquest/Scripts/UI/PlanetIndicatorUI.cs @@ -67,6 +67,7 @@ namespace GWConquest EnemyIndicatorGround.SetActive(true); EnemyIndicatorBarGround.fillAmount = Mathf.Clamp01(enemyStrengthGround / MaxFormationStrength) * MaxFillAmount; + enemyPlayer = formationsGround.FirstOrDefault(f => f.Player != Player.CurrentPlayer)?.Player; if(enemyPlayer != null) { EnemyIndicatorBarGround.color = EnemyIndicatorBarGround.color.UpdateColorRGB(enemyPlayer.Color); @@ -82,7 +83,7 @@ namespace GWConquest } private void FixedUpdate() { - if(Planet != null) + if(GameManager.EntitiesLoaded && Planet != null) { var controllingPlayer = Planet.ControllingPlayer; diff --git a/Assets/GWConquest/Scripts/UI/TransportUIEquipmentIcon.cs b/Assets/GWConquest/Scripts/UI/TransportUIEquipmentIcon.cs index e21e741..05555ca 100644 --- a/Assets/GWConquest/Scripts/UI/TransportUIEquipmentIcon.cs +++ b/Assets/GWConquest/Scripts/UI/TransportUIEquipmentIcon.cs @@ -13,7 +13,7 @@ namespace GWConquest { Stack = stack; - if(stack != null) + if(stack.Amount > 0) { Icon.gameObject.SetActive(true); Icon.sprite = Stack.Icon; diff --git a/Assets/GWConquest/Scripts/UI/UnitInfoPanel.cs b/Assets/GWConquest/Scripts/UI/UnitInfoPanel.cs index aad623b..2628b8f 100644 --- a/Assets/GWConquest/Scripts/UI/UnitInfoPanel.cs +++ b/Assets/GWConquest/Scripts/UI/UnitInfoPanel.cs @@ -183,7 +183,7 @@ namespace GWConquest int equipmentCount = CurrentUnit.Equipment.Count; for(int i = 0; i < EquipmentIconList.Count; i++) { - var item = i < equipmentCount ? CurrentUnit.Equipment[i] : null; + var item = i < equipmentCount ? CurrentUnit.Equipment[i] : default(ItemStack); EquipmentIconList[i].UpdateDisplay(item); } } diff --git a/Assets/GWConquest/Scripts/Unit.cs b/Assets/GWConquest/Scripts/Unit.cs index 43aa356..b6ff1ba 100644 --- a/Assets/GWConquest/Scripts/Unit.cs +++ b/Assets/GWConquest/Scripts/Unit.cs @@ -241,6 +241,13 @@ namespace GWConquest } } + public override string ToString() + { + return Class.ShortName; + } + + + diff --git a/Assets/GWConquest/Scripts/Zone.cs b/Assets/GWConquest/Scripts/Zone.cs index adbbc7e..d4aed9a 100644 --- a/Assets/GWConquest/Scripts/Zone.cs +++ b/Assets/GWConquest/Scripts/Zone.cs @@ -21,11 +21,12 @@ namespace GWConquest [SerializeField] private int zoneId; - private List formations = new List(); - - public List Formations + public IEnumerable Formations { - get => formations; + //get => formations; + get { + return Formation.AllFormations.Where(f => f.State.CurrentZone == zoneId); + } } private static Dictionary zoneDict = new Dictionary(); @@ -84,7 +85,6 @@ namespace GWConquest public void OnFormationArrived(Formation formation) { - formations.Add(formation); OnFormationChanged(formation); if (BoltNetwork.IsServer) @@ -100,7 +100,7 @@ namespace GWConquest var battleEntity = BoltNetwork.Instantiate(BoltPrefabs.Battle); CurrentBattle = battleEntity.GetComponent(); CurrentBattle.Zone = this; - foreach (Formation f in formations) + foreach (Formation f in Formations) { CurrentBattle.AddFormation(f); } @@ -113,12 +113,11 @@ namespace GWConquest public bool ShouldStartBattle() { - return formations.Select((f, i) => f.Player).Distinct().Count() > 1; + return Formations.Select((f, i) => f.Player).Distinct().Count() > 1; } public void OnFormationDeparting(Formation formation) { - formations.Remove(formation); OnFormationChanged(formation); if (BoltNetwork.IsServer) diff --git a/Assets/Photon/PhotonBolt/assemblies/bolt.user.dll b/Assets/Photon/PhotonBolt/assemblies/bolt.user.dll index 8c7134d7a676e769207de60ea866e6c4198cc590..0db92d1aa52d221abea3f568acdbf77023456497 100644 GIT binary patch delta 23444 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 delta 20784 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 diff --git a/Assets/Photon/PhotonBolt/assemblies/bolt.user.dll.mdb b/Assets/Photon/PhotonBolt/assemblies/bolt.user.dll.mdb index cf49b4faedf21d1888fe6766c0cc843334b1025b..4376ba601d3c699874e478d579338227f397dc08 100644 GIT binary patch literal 32346 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 L3xbt?v*G^-<7bsN literal 30329 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 diff --git a/Assets/Photon/PhotonBolt/project.json b/Assets/Photon/PhotonBolt/project.json index 24fe8e3..77eacd3 100644 --- a/Assets/Photon/PhotonBolt/project.json +++ b/Assets/Photon/PhotonBolt/project.json @@ -195,6 +195,24 @@ "SnapMagnitude": 10.0 } }, + { + "Name": "FormationNumber", + "Enabled": true, + "Expanded": true, + "ReplicationMode": 1, + "Priority": 1, + "PropertyType": { + "$type": "Bolt.Compiler.PropertyTypeInteger, bolt.compiler", + "MaxValue": 255 + }, + "AssetSettings": { + "$type": "Bolt.Compiler.PropertyStateSettings, bolt.compiler", + "ExtrapolationErrorTolerance": 0.25, + "_ExtrapolationCorrectionFrames": 6, + "ExtrapolationMaxFrames": 9, + "SnapMagnitude": 10.0 + } + }, { "Name": "MovementTargetFormation", "Enabled": true, @@ -1929,6 +1947,28 @@ "Name": "AssignLeaderEvent", "Guid": "19182fa7-e061-484b-8714-d5ddbdb8014b", "Groups": [] + }, + { + "$type": "Bolt.Compiler.EventDefinition, bolt.compiler", + "Properties": [ + { + "Name": "EntityCount", + "Enabled": true, + "Expanded": true, + "ReplicationMode": 1, + "Priority": 1, + "PropertyType": { + "$type": "Bolt.Compiler.PropertyTypeInteger, bolt.compiler", + "MaxValue": 255 + }, + "AssetSettings": { + "$type": "Bolt.Compiler.PropertyEventSettings, bolt.compiler" + } + } + ], + "Name": "ServerConfigEvent", + "Guid": "ee9e2713-bc29-4605-a500-6a6be50ae09c", + "Groups": [] } ], "ActiveGroup": "Everything" diff --git a/Assets/Photon/PhotonBolt/resources/BoltRuntimeSettings.asset b/Assets/Photon/PhotonBolt/resources/BoltRuntimeSettings.asset index bff8371..3c6e246 100644 --- a/Assets/Photon/PhotonBolt/resources/BoltRuntimeSettings.asset +++ b/Assets/Photon/PhotonBolt/resources/BoltRuntimeSettings.asset @@ -47,7 +47,7 @@ MonoBehaviour: debugClientCount: 1 debugStartPort: 50538 debugStartMapName: GalaxyMap - debugPlayAsServer: 1 + debugPlayAsServer: 0 showDebugInfo: 0 overrideTimeScale: 1 logUncaughtExceptions: 1