예제 #1
0
        public RtsClient(UnitySyncContext syncContext)
        {
            mSyncContext = syncContext;
            mWorkerCreationStateListener            = new WorkerCreationStateListener(syncContext);
            mWorkerCreationStateListener.Created   += (orders, info) => WorkerCreated?.Invoke(orders, info);
            mWorkerCreationStateListener.Destroyed += info => ObjectDestroyed?.Invoke(info);

            mBuildingTemplateCreationStateListener            = new BuildingTemplateCreationStateListener(syncContext);
            mBuildingTemplateCreationStateListener.Created   += (orders, info) => BuildingTemplateCreated?.Invoke(orders, info);
            mBuildingTemplateCreationStateListener.Destroyed += info => ObjectDestroyed?.Invoke(info);

            mCentralBuildingCreationStateListener            = new CentralBuildingCreationListener(syncContext);
            mCentralBuildingCreationStateListener.Created   += (orders, info) => CentralBuildingCreated?.Invoke(orders, info);
            mCentralBuildingCreationStateListener.Destroyed += info => ObjectDestroyed?.Invoke(info);

            mMiningCampCreationListener            = new MiningCampCreationListener(syncContext);
            mMiningCampCreationListener.Created   += (orders, info) => MiningCampCreated?.Invoke(orders, info);
            mMiningCampCreationListener.Destroyed += info => ObjectDestroyed?.Invoke(info);

            mBarrakCreationListener            = new BarrakCreationListener(syncContext);
            mBarrakCreationListener.Created   += (orders, info) => BarrakCreated?.Invoke(orders, info);
            mBarrakCreationListener.Destroyed += info => ObjectDestroyed?.Invoke(info);

            mRangedWarriorCreationStateListener            = new RangedWarriorCreationStateListener(syncContext);
            mRangedWarriorCreationStateListener.Created   += (orders, info) => RangedWarriorCreated?.Invoke(orders, info);
            mRangedWarriorCreationStateListener.Destroyed += info => ObjectDestroyed?.Invoke(info);

            mMeeleeWarriorCreationStateListener            = new MeeleeWarriorCreationStateListener(syncContext);
            mMeeleeWarriorCreationStateListener.Created   += (orders, info) => MeeleeWarriorCreated?.Invoke(orders, info);
            mMeeleeWarriorCreationStateListener.Destroyed += info => ObjectDestroyed?.Invoke(info);
        }
예제 #2
0
        private void OnReceivedPacket(Packet packet)
        {
            // Record.Log($"Receiving packet: {packet.TypeCase}");
            switch (packet.TypeCase)
            {
            case Packet.TypeOneofCase.UpdateObject:
                ObjectUpdated?.Invoke(packet.UpdateObject);
                break;

            case Packet.TypeOneofCase.UpdatePosition:
                ObjectMoved?.Invoke(packet.UpdatePosition);
                break;

            case Packet.TypeOneofCase.UpdateRotation:
                ObjectRotated?.Invoke(packet.UpdateRotation);
                break;

            case Packet.TypeOneofCase.DestroyObject:
                ObjectDestroyed?.Invoke(packet.DestroyObject);
                break;

            case Packet.TypeOneofCase.CreatePlayer:
                PlayerCreated?.Invoke(packet.CreatePlayer);
                Record.Log($"Creating player {packet.CreatePlayer}");
                break;

            default:
                // TODO: https://docs.microsoft.com/en-us/dotnet/standard/exceptions/how-to-create-user-defined-exceptions
                Record.Log($"Unimplemented packet handler ! {packet.TypeCase}", LogLevel.Error);
                break;
            }
        }
예제 #3
0
 private void DestroyInteractableObject()
 {
     ObjectDestroyed?.Invoke(this);
     Destroy(gameObject);
 }
예제 #4
0
 public void OnObjectDestroyed(GameObject @object) => ObjectDestroyed?.Invoke(@object, EventArgs.Empty);
예제 #5
0
 public static void NotifyObjectDestroyed(ICharacter character, IStaticWorldObject worldObject)
 {
     Api.SafeInvoke(() => ObjectDestroyed?.Invoke(character, worldObject));
 }
예제 #6
0
 public void DestroyView(ObjectDestroyed notification)
 {
     Panel.Dispatcher.Invoke(new Action(() =>
         {
             if(Views.ContainsKey(notification.GameObject))
             {
                 var view = Views[notification.GameObject];
                 Panel.Children.Remove(view);
                 Views.Remove(notification.GameObject);
             }
         }));
 }