Files
Cyd 2b8ca921cb Initial full mirror of c:\VWE (source + assets + toolchain + outputs) via Git LFS
Complete disaster-recovery snapshot: engine/game source, game data assets,
VC6 toolchain + DX SDKs, build outputs, deployed game, and _UNUSED archive.
Large binaries in Git LFS; text preserved byte-for-byte (core.autocrlf=false,
no eol attributes). See RECOVERY.md for the one-clone rebuild procedure.
2026-06-24 21:28:16 -05:00

220 lines
5.1 KiB
C++

//===========================================================================//
// File: Dictionary.hpp
//---------------------------------------------------------------------------//
// Date Who Modification //
// -------- --- ---------------------------------------------------------- //
// 01/06/1999 JSE Inital coding
//---------------------------------------------------------------------------//
// Copyright (C) 1998, Microsoft Corp. //
// All Rights reserved worldwide //
// This unpublished sourcecode is PROPRIETARY and CONFIDENTIAL //
//===========================================================================//
#pragma once
#include "NetConstants.hpp"
#include "NetUpdateManager.hpp"
namespace MechWarrior4
{
//##########################################################################
//########################### Dictionary
//##########################################################################
class DictionaryParagraph:
public Stuff::Plug
{
public:
DictionaryParagraph();
DictionaryParagraph(Entity *entity, int message_type, int active_update_cycle, int inactive_update_cycle);
~DictionaryParagraph();
SlotOf<Entity*> entitySlot;
int messageType;
int activeUpdateCycle;
int inactiveUpdateCycle;
bool active;
int activeCycle;
// this is for the messages that use sizes
// based off of the entity.
// that way it doesn't need the entity to
// skip the message.
// We should never have to skip a message
// from a mech we haven't decoded at lease once.
int entityVariableMessageSize;
void Encode(Stuff::DynamicMemoryStream* memory_stream, int connection_to, int debug_level, int bandwidth);
void Decode(Stuff::MemoryStream* memory_stream, Time till, Scalar packet_latency, int connection_from, int debug_level, int bandwidth);
bool ReadyToUpdate(int cycles_to_update);
};
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
class DictionaryPage:
public Stuff::Plug
{
public:
DictionaryPage(int page_number);
~DictionaryPage();
ChainOf<DictionaryParagraph*>
dictionaryParagraphs;
int
pageNumber;
int
paragraphCount;
// Cycle support
int
CalculateCycles(Time till);
bool
MaintainCycles(Time till, int connection_id);
bool
RequireUpdate(Time new_time, int connection_id);
enum {
HalfhzBit = 0,
OneHzBit,
TwoHzBit,
ThreeHzBit,
FourHzBit,
SixHzBit,
EightHzBit,
NineHzBit,
TwelveHzBit,
SixteenHzBit,
UpdateCycleCount
};
enum {
HalfhzType = 1 << HalfhzBit,
OneHzType = 1 << OneHzBit,
TwoHzType = 1 << TwoHzBit,
ThreeHzType = 1 << ThreeHzBit,
FourHzType = 1 << FourHzBit,
SixHzType = 1 << SixHzBit,
EightHzType = 1 << EightHzBit,
NineHzType = 1 << NineHzBit,
TwelveHzType = 1 << TwelveHzBit,
SixteenHzType = 1 << SixteenHzBit
};
int
currentCycleCount[UpdateCycleCount];
Time
lastExecuted;
BYTE
lastPacketNumber;
Scalar
timeFromLastSlowestUpdate;
int usedUpdateCycle;
int cyclesToUpdate;
// active / inactive cycle support
int currentActiveCycle;
Time activeCycles[8];
// update support
DictionaryParagraph *
MakeDictionaryParagraph(Entity *entity, int message_type, UpdateRate update_cycle);
void Encode(Stuff::DynamicMemoryStream* memory_stream, int connection_to, int debug_level, int bandwidth);
void Decode(Stuff::MemoryStream* memory_stream, Time till, int connection_to, int debug_level, int bandwidth);
static Scalar CalculateSeconds(int type);
};
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
class Dictionary:
public Stuff::Plug
{
friend class DictionaryManager;
protected:
Dictionary(int version_number, int connection);
public:
Dictionary(int version_number, int connection, int debug_level, int bandwidth);
~Dictionary();
SortedChainOf<DictionaryPage*, int>
dictionaryPages;
int
versionNumber;
int
connectionID;
int
debugDictionaryLevel;
int
dictionaryBandwidth;
DictionaryPage *
MakeDictionaryPage(int page_number);
void Encode(Time till);
void Decode(int message_type, Stuff::MemoryStream* memory_stream, Time till);
};
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
class DictionaryManager:
public Stuff::Plug
{
public:
DictionaryManager(int connection);
~DictionaryManager();
Dictionary *MakeNewDictionary(int version_number, int debug_level, int bandwidth);
Dictionary *GetCurrentDictionary();
Dictionary *GetDictionary(int version);
void Encode(Time till);
void Decode(int message_type, Stuff::MemoryStream* memory_stream);
int GetNextDictionaryID();
protected:
int
connectionID;
int
activeDictionaryIndex;
Dictionary*
activeDictionary;
SortedChainOf<Dictionary*, int>
dictionaryIndex;
};
};