Exemplo n.º 1
0
        public void ReadFromStream(PacketStream stream)
        {
            GameStateID = stream.ReadUInt32();
            FullState   = new DreamFullState(GameStateID);

            ReadIconAppearancesSection(stream);
            ReadAtomsSection(stream);
            ReadMapSection(stream);
            ReadClientSection(stream);
        }
Exemplo n.º 2
0
        public void FinalizeCurrentDeltaState()
        {
            lock (_dreamStateManagerLock) {
                if (_currentDeltaState.ContainsChanges())
                {
                    if (FullState == null)
                    {
                        FullState       = new DreamFullState(0);
                        FullState.Turfs = new UInt32[Program.DreamMap.Width, Program.DreamMap.Height];
                    }

                    FullState.ApplyDeltaState(_currentDeltaState);
                    FullState.ID = _currentDeltaState.ID;

                    DeltaStateFinalized.Invoke(_currentDeltaState);
                    CreateNewDeltaState();
                }
            }
        }
Exemplo n.º 3
0
        public void FinalizeCurrentDeltaState()
        {
            lock (_dreamStateManagerLock) {
                if (_currentDeltaState.ContainsChanges())
                {
                    if (FullState == null)
                    {
                        FullState = new DreamFullState(0);

                        FullState.Levels = new List <DreamFullState.Level>(Program.DreamMap.Levels.Count);
                        for (int z = 0; z < Program.DreamMap.Levels.Count; z++)
                        {
                            FullState.Levels.Add(new DreamFullState.Level(Program.DreamMap.Width, Program.DreamMap.Height));
                        }
                    }

                    FullState.ApplyDeltaState(_currentDeltaState);
                    FullState.ID = _currentDeltaState.ID;

                    DeltaStateFinalized.Invoke(_currentDeltaState);
                    CreateNewDeltaState();
                }
            }
        }
Exemplo n.º 4
0
        public void HandlePacketFullGameState(PacketFullGameState pFullGameState)
        {
            DreamFullState fullState = pFullGameState.FullState;

            Program.OpenDream.IconAppearances.Clear();
            foreach (IconAppearance iconAppearance in fullState.IconAppearances)
            {
                Program.OpenDream.IconAppearances.Add(iconAppearance);
            }

            Program.OpenDream.ATOMs.Clear();
            foreach (KeyValuePair <UInt32, DreamFullState.Atom> stateAtom in fullState.Atoms)
            {
                ATOM atom = new ATOM(stateAtom.Key, stateAtom.Value.Type, stateAtom.Value.IconAppearanceID);

                atom.Icon.Appearance = Program.OpenDream.IconAppearances[stateAtom.Value.IconAppearanceID];

                atom.ScreenLocation = stateAtom.Value.ScreenLocation;

                if (stateAtom.Value.LocationID != UInt32.MaxValue)
                {
                    if (Program.OpenDream.ATOMs.ContainsKey(stateAtom.Value.LocationID))
                    {
                        atom.Loc = Program.OpenDream.ATOMs[stateAtom.Value.LocationID];
                    }
                    else
                    {
                        Console.WriteLine("Full game state packet gave an atom an invalid location, which was ignored (ID " + stateAtom.Value.AtomID + ")(Location ID " + stateAtom.Value.LocationID + ")");
                    }
                }
                else
                {
                    atom.Loc = null;
                }
            }

            ATOM[,] turfs = new ATOM[fullState.Turfs.GetLength(0), fullState.Turfs.GetLength(1)];
            for (int x = 0; x < turfs.GetLength(0); x++)
            {
                for (int y = 0; y < turfs.GetLength(1); y++)
                {
                    UInt32 turfAtomID = fullState.Turfs[x, y];

                    if (Program.OpenDream.ATOMs.ContainsKey(turfAtomID))
                    {
                        ATOM turf = Program.OpenDream.ATOMs[turfAtomID];

                        turf.X      = x;
                        turf.Y      = y;
                        turfs[x, y] = turf;
                    }
                    else
                    {
                        Console.WriteLine("Full game state packet defines a turf as an atom that doesn't exist, and was ignored (ID " + turfAtomID + ")(Location " + x + ", " + y + ")");
                    }
                }
            }

            Program.OpenDream.Map = new Map(turfs);

            if (pFullGameState.EyeID != UInt32.MaxValue)
            {
                if (Program.OpenDream.ATOMs.ContainsKey(pFullGameState.EyeID))
                {
                    Program.OpenDream.Eye = Program.OpenDream.ATOMs[pFullGameState.EyeID];
                }
                else
                {
                    Console.WriteLine("Full game state packet gives an invalid atom for the eye (ID " + pFullGameState.EyeID + ")");
                    Program.OpenDream.Eye = null;
                }
            }
            else
            {
                Program.OpenDream.Eye = null;
            }

            Program.OpenDream.ScreenObjects.Clear();
            foreach (UInt32 screenObjectAtomID in pFullGameState.ScreenObjects)
            {
                if (Program.OpenDream.ATOMs.ContainsKey(screenObjectAtomID))
                {
                    Program.OpenDream.ScreenObjects.Add(Program.OpenDream.ATOMs[screenObjectAtomID]);
                }
                else
                {
                    Console.WriteLine("Full games state packet defines a screen object that doesn't exist, and was ignored (ID " + screenObjectAtomID + ")");
                }
            }
        }
Exemplo n.º 5
0
        public void HandlePacketFullGameState(PacketFullGameState pFullGameState)
        {
            DreamFullState fullState = pFullGameState.FullState;

            Program.OpenDream.IconAppearances.Clear();
            foreach (IconAppearance iconAppearance in fullState.IconAppearances)
            {
                Program.OpenDream.IconAppearances.Add(iconAppearance);
            }

            Program.OpenDream.ATOMs.Clear();
            Dictionary <ATOM, UInt32> atomLocations = new();

            foreach (KeyValuePair <UInt32, DreamFullState.Atom> stateAtom in fullState.Atoms)
            {
                ATOM atom = new ATOM(stateAtom.Key, stateAtom.Value.Type, stateAtom.Value.IconAppearanceID);

                atom.Icon.Appearance = Program.OpenDream.IconAppearances[stateAtom.Value.IconAppearanceID];
                atom.ScreenLocation  = stateAtom.Value.ScreenLocation;
                atomLocations.Add(atom, stateAtom.Value.LocationID);
            }

            foreach (KeyValuePair <ATOM, UInt32> atomLocation in atomLocations)
            {
                UInt32 locationId = atomLocation.Value;

                if (locationId != UInt32.MaxValue)
                {
                    if (Program.OpenDream.ATOMs.ContainsKey(locationId))
                    {
                        atomLocation.Key.Loc = Program.OpenDream.ATOMs[locationId];
                    }
                    else
                    {
                        Console.WriteLine("Full game state packet gave an atom an invalid location, which was ignored (ID " + atomLocation.Key.ID + ")(Location ID " + locationId + ")");
                    }
                }
                else
                {
                    atomLocation.Key.Loc = null;
                }
            }

            Program.OpenDream.Map = new Map();
            for (int z = 0; z < fullState.Levels.Count; z++)
            {
                DreamFullState.Level level = fullState.Levels[z];
                int levelWidth             = level.Turfs.GetLength(0);
                int levelHeight            = level.Turfs.GetLength(1);

                ATOM[,] turfs = new ATOM[levelWidth, levelHeight];
                for (int x = 0; x < levelWidth; x++)
                {
                    for (int y = 0; y < levelHeight; y++)
                    {
                        UInt32 turfAtomID = level.Turfs[x, y];

                        if (Program.OpenDream.ATOMs.ContainsKey(turfAtomID))
                        {
                            ATOM turf = Program.OpenDream.ATOMs[turfAtomID];

                            turf.X      = x;
                            turf.Y      = y;
                            turf.Z      = z;
                            turfs[x, y] = turf;
                        }
                        else
                        {
                            Console.WriteLine("Full game state packet defines a turf as an atom that doesn't exist, and was ignored (ID " + turfAtomID + ")(Location " + x + ", " + y + ", " + z + ")");
                        }
                    }
                }

                Program.OpenDream.Map.Levels.Add(new Map.Level()
                {
                    Turfs = turfs
                });
            }

            if (pFullGameState.EyeID != UInt32.MaxValue)
            {
                if (Program.OpenDream.ATOMs.ContainsKey(pFullGameState.EyeID))
                {
                    Program.OpenDream.Eye = Program.OpenDream.ATOMs[pFullGameState.EyeID];
                }
                else
                {
                    Console.WriteLine("Full game state packet gives an invalid atom for the eye (ID " + pFullGameState.EyeID + ")");
                    Program.OpenDream.Eye = null;
                }
            }
            else
            {
                Program.OpenDream.Eye = null;
            }

            Program.OpenDream.ScreenObjects.Clear();
            foreach (UInt32 screenObjectAtomID in pFullGameState.ScreenObjects)
            {
                if (Program.OpenDream.ATOMs.ContainsKey(screenObjectAtomID))
                {
                    Program.OpenDream.ScreenObjects.Add(Program.OpenDream.ATOMs[screenObjectAtomID]);
                }
                else
                {
                    Console.WriteLine("Full games state packet defines a screen object that doesn't exist, and was ignored (ID " + screenObjectAtomID + ")");
                }
            }
        }
Exemplo n.º 6
0
 public PacketFullGameState(DreamFullState fullState)
 {
     FullState = fullState;
 }