- Fixed typo in UMulManager

- Added array initialization to TAnimDataProvider
- Adjusted frmLogin
- Some code cleanups
This commit is contained in:
Andreas Schneider 2009-12-08 22:17:39 +01:00
parent 06c9c2c507
commit 1759e0763c
8 changed files with 288 additions and 118 deletions

View File

@ -31,7 +31,7 @@ interface
uses
Classes, SysUtils, UArtProvider, UTileDataProvider, UTexmapProvider,
ULandscape, UHueProvider;
ULandscape, UHueProvider, UAnimDataProvider;
type
@ -45,6 +45,7 @@ type
FDataDir: string;
FArtProvider: TArtProvider;
FTiledataProvider: TTiledataProvider;
FAnimdataProvider: TAnimdataProvider;
FTexmapProvider: TTexmapProvider;
FHueProvider: THueProvider;
FLandscape: TLandscape;
@ -54,6 +55,7 @@ type
property Hue: THueProvider read FHueProvider;
property Landscape: TLandscape read FLandscape;
property Tiledata: TTiledataProvider read FTiledataProvider;
property Animdata: TAnimDataProvider read FAnimdataProvider;
property Texmaps: TTexmapProvider read FTexmapProvider;
{ Methods }
@ -84,6 +86,7 @@ begin
FArtProvider := TArtProvider.Create(GetFile('art.mul'), GetFile('artidx.mul'), True);
FTiledataProvider := TTiledataProvider.Create(GetFile('tiledata.mul'), True);
FAnimdataProvider := TAnimDataProvider.Create(GetFile('animdata.mul'), True);
FTexmapProvider := TTexmapProvider.Create(GetFile('texmaps.mul'), GetFile('texidx.mul'), True);
FHueProvider := THueProvider.Create(GetFile('hues.mul'), True);
end;
@ -92,6 +95,7 @@ destructor TGameResourceManager.Destroy;
begin
FreeAndNil(FArtProvider);
FreeAndNil(FTiledataProvider);
FreeAndNil(FAnimdataProvider);
FreeAndNil(FTexmapProvider);
FreeAndNil(FHueProvider);
FreeAndNil(FLandscape);

View File

@ -22,7 +22,7 @@ object dmNetwork: TdmNetwork
Interval = 30000
OnTimer = tmNoOpTimer
OnStartTimer = tmNoOpStartTimer
left = 72
left = 112
top = 24
end
end

View File

@ -21,7 +21,7 @@
* CDDL HEADER END
*
*
* Portions Copyright 2007 Andreas Schneider
* Portions Copyright 2009 Andreas Schneider
*)
unit UdmNetwork;
@ -95,9 +95,9 @@ end;
procedure TdmNetwork.DataModuleDestroy(Sender: TObject);
begin
if FSendQueue <> nil then FreeAndNil(FSendQueue);
if FReceiveQueue <> nil then FreeAndNil(FReceiveQueue);
if PacketHandlers[$02] <> nil then FreeAndNil(PacketHandlers[$02]);
FreeAndNil(FSendQueue);
FreeAndNil(FReceiveQueue);
FreeAndNil(PacketHandlers[$02]);
end;
procedure TdmNetwork.TCPClientConnect(aSocket: TLSocket);
@ -290,28 +290,33 @@ procedure TdmNetwork.DoLogin;
begin
tmNoOp.Enabled := False;
frmLogin := TfrmLogin.Create(dmNetwork);
if frmInitialize = nil then frmInitialize := TfrmInitialize.Create(dmNetwork);
if frmTileInfo <> nil then FreeAndNil(frmTileInfo);
if frmEditAccount <> nil then FreeAndNil(frmEditAccount);
if frmAccountControl <> nil then FreeAndNil(frmAccountControl);
if frmConfirmation <> nil then FreeAndNil(frmConfirmation);
if frmDrawSettings <> nil then FreeAndNil(frmDrawSettings);
if frmMoveSettings <> nil then FreeAndNil(frmMoveSettings);
if frmElevateSettings <> nil then FreeAndNil(frmElevateSettings);
if frmHueSettings <> nil then FreeAndNil(frmHueSettings);
if frmBoundaries <> nil then FreeAndNil(frmBoundaries);
if frmFilter <> nil then FreeAndNil(frmFilter);
if frmVirtualLayer <> nil then FreeAndNil(frmVirtualLayer);
if frmAbout <> nil then FreeAndNil(frmAbout);
if frmRegionControl <> nil then FreeAndNil(frmRegionControl);
if frmLargeScaleCommand <> nil then FreeAndNil(frmLargeScaleCommand);
if frmRadarMap <> nil then FreeAndNil(frmRadarMap);
if frmInitialize = nil then
frmInitialize := TfrmInitialize.Create(dmNetwork);
FreeAndNil(frmTileInfo);
FreeAndNil(frmEditAccount);
FreeAndNil(frmAccountControl);
FreeAndNil(frmConfirmation);
FreeAndNil(frmDrawSettings);
FreeAndNil(frmMoveSettings);
FreeAndNil(frmElevateSettings);
FreeAndNil(frmHueSettings);
FreeAndNil(frmBoundaries);
FreeAndNil(frmFilter);
FreeAndNil(frmVirtualLayer);
FreeAndNil(frmAbout);
FreeAndNil(frmRegionControl);
FreeAndNil(frmLargeScaleCommand);
FreeAndNil(frmRadarMap);
if frmMain <> nil then
begin
frmMain.ApplicationProperties1.OnIdle := nil;
FreeAndNil(frmMain);
end;
if GameResourceManager <> nil then FreeAndNil(GameResourceManager);
FreeAndNil(GameResourceManager);
frmInitialize.Hide;
while frmLogin.ShowModal = mrOK do
begin

View File

@ -1,14 +1,14 @@
object frmLogin: TfrmLogin
Left = 290
Height = 265
Height = 246
Top = 171
Width = 489
ActiveControl = edHost
Width = 481
ActiveControl = btnOK
BorderIcons = [biSystemMenu]
BorderStyle = bsDialog
Caption = 'UO CentrED'
ClientHeight = 265
ClientWidth = 489
ClientHeight = 246
ClientWidth = 481
Font.Height = -11
OnClose = FormClose
OnCreate = FormCreate
@ -16,53 +16,85 @@ object frmLogin: TfrmLogin
ShowInTaskBar = stAlways
LCLVersion = '0.9.29'
object lblCopyright: TLabel
AnchorSideLeft.Control = Owner
AnchorSideRight.Control = Owner
AnchorSideRight.Side = asrBottom
AnchorSideBottom.Control = Owner
AnchorSideBottom.Side = asrBottom
Left = 0
Height = 14
Top = 251
Width = 489
Align = alBottom
Height = 15
Top = 231
Width = 481
Alignment = taCenter
Anchors = [akLeft, akRight, akBottom]
ParentColor = False
end
object gbConnection: TGroupBox
AnchorSideLeft.Control = Owner
AnchorSideTop.Control = Owner
AnchorSideRight.Control = gbActions
AnchorSideBottom.Side = asrCenter
Left = 8
Height = 128
Top = 8
Width = 321
Top = 4
Width = 314
Anchors = [akTop, akLeft, akRight]
AutoSize = True
BorderSpacing.Left = 8
BorderSpacing.Top = 4
Caption = 'Connection'
ClientHeight = 110
ClientWidth = 317
ClientHeight = 114
ClientWidth = 312
TabOrder = 0
object lblHost: TLabel
Left = 30
AnchorSideLeft.Control = imgHost
AnchorSideLeft.Side = asrBottom
AnchorSideTop.Control = edHost
AnchorSideTop.Side = asrCenter
Left = 32
Height = 14
Top = 9
Top = 10
Width = 28
BorderSpacing.Left = 8
Caption = 'Host:'
ParentColor = False
end
object lblUsername: TLabel
Left = 30
AnchorSideLeft.Control = imgUsername
AnchorSideLeft.Side = asrBottom
AnchorSideTop.Control = edUsername
AnchorSideTop.Side = asrCenter
Left = 32
Height = 14
Top = 43
Width = 55
Top = 46
Width = 58
BorderSpacing.Left = 8
Caption = 'Username:'
ParentColor = False
end
object lblPassword: TLabel
Left = 30
AnchorSideLeft.Control = imgPassword
AnchorSideLeft.Side = asrBottom
AnchorSideTop.Control = edPassword
AnchorSideTop.Side = asrCenter
Left = 32
Height = 14
Top = 77
Width = 53
Top = 81
Width = 54
BorderSpacing.Left = 8
Caption = 'Password:'
ParentColor = False
end
object imgHost: TImage
Left = 6
AnchorSideLeft.Control = gbConnection
AnchorSideTop.Control = lblHost
AnchorSideTop.Side = asrCenter
Left = 8
Height = 16
Top = 9
Width = 16
AutoSize = True
BorderSpacing.Left = 8
Picture.Data = {
07545069786D61702E0A00002F2A2058504D202A2F0A73746174696320636861
72202A64756D6D795B5D3D7B0A223136203136203132342032222C0A22517420
@ -150,9 +182,12 @@ object frmLogin: TfrmLogin
Transparent = True
end
object imgUsername: TImage
Left = 6
AnchorSideLeft.Control = imgHost
AnchorSideTop.Control = lblUsername
AnchorSideTop.Side = asrCenter
Left = 8
Height = 16
Top = 43
Top = 45
Width = 16
AutoSize = True
Picture.Data = {
@ -242,9 +277,12 @@ object frmLogin: TfrmLogin
Transparent = True
end
object imgPassword: TImage
Left = 6
AnchorSideLeft.Control = imgUsername
AnchorSideTop.Control = lblPassword
AnchorSideTop.Side = asrCenter
Left = 8
Height = 16
Top = 77
Top = 80
Width = 16
AutoSize = True
Picture.Data = {
@ -324,34 +362,66 @@ object frmLogin: TfrmLogin
Transparent = True
end
object edHost: TEdit
Left = 101
Height = 21
Top = 5
Width = 137
AnchorSideLeft.Control = lblUsername
AnchorSideLeft.Side = asrBottom
AnchorSideTop.Control = gbConnection
AnchorSideRight.Control = edPort
Left = 98
Height = 19
Top = 8
Width = 143
Anchors = [akTop, akLeft, akRight]
BorderSpacing.Left = 8
BorderSpacing.Top = 8
TabOrder = 0
Text = 'localhost'
end
object edUsername: TEdit
Left = 101
Height = 21
Top = 39
Width = 201
AnchorSideLeft.Control = edHost
AnchorSideTop.Control = edHost
AnchorSideTop.Side = asrBottom
AnchorSideRight.Control = edPort
AnchorSideRight.Side = asrBottom
Left = 98
Height = 19
Top = 44
Width = 206
Anchors = [akTop, akLeft, akRight]
BorderSpacing.Top = 17
TabOrder = 2
end
object edPassword: TEdit
Left = 101
Height = 21
Top = 73
Width = 201
AnchorSideLeft.Control = edUsername
AnchorSideTop.Control = edUsername
AnchorSideTop.Side = asrBottom
AnchorSideRight.Control = edUsername
AnchorSideRight.Side = asrBottom
Left = 98
Height = 19
Top = 79
Width = 206
Anchors = [akTop, akLeft, akRight]
BorderSpacing.Top = 16
BorderSpacing.Bottom = 16
EchoMode = emPassword
PasswordChar = '*'
TabOrder = 3
end
object edPort: TSpinEdit
Left = 246
Height = 21
Top = 5
Width = 56
AnchorSideLeft.Control = edHost
AnchorSideLeft.Side = asrBottom
AnchorSideTop.Control = edHost
AnchorSideRight.Control = gbConnection
AnchorSideRight.Side = asrBottom
AnchorSideBottom.Control = edHost
AnchorSideBottom.Side = asrBottom
Left = 249
Height = 19
Top = 8
Width = 55
Anchors = [akTop, akRight, akBottom]
BorderSpacing.Left = 8
BorderSpacing.Right = 8
MaxValue = 65565
MinValue = 1024
TabOrder = 1
@ -359,18 +429,33 @@ object frmLogin: TfrmLogin
end
end
object gbActions: TGroupBox
Left = 336
Height = 96
Top = 8
Width = 145
ClientHeight = 78
AnchorSideLeft.Control = gbConnection
AnchorSideLeft.Side = asrBottom
AnchorSideTop.Control = gbConnection
AnchorSideRight.Control = Owner
AnchorSideRight.Side = asrBottom
Left = 330
Height = 76
Top = 12
Width = 143
Anchors = [akTop, akLeft, akRight]
BorderSpacing.Left = 8
BorderSpacing.Top = 8
BorderSpacing.Right = 8
ClientHeight = 74
ClientWidth = 141
TabOrder = 2
object btnOK: TButton
Left = 6
AnchorSideLeft.Control = gbActions
AnchorSideTop.Control = gbActions
AnchorSideRight.Control = gbActions
AnchorSideRight.Side = asrBottom
Left = 8
Height = 25
Top = 5
Width = 128
Top = 8
Width = 125
Anchors = [akTop, akLeft, akRight]
BorderSpacing.Around = 8
BorderSpacing.InnerBorder = 4
Caption = '&OK'
Default = True
@ -378,10 +463,17 @@ object frmLogin: TfrmLogin
TabOrder = 0
end
object btnCancel: TButton
Left = 6
AnchorSideLeft.Control = btnOK
AnchorSideTop.Control = btnOK
AnchorSideTop.Side = asrBottom
AnchorSideRight.Control = btnOK
AnchorSideRight.Side = asrBottom
Left = 8
Height = 25
Top = 39
Width = 128
Top = 41
Width = 125
Anchors = [akTop, akLeft, akRight]
BorderSpacing.Bottom = 8
BorderSpacing.InnerBorder = 4
Caption = '&Cancel'
ModalResult = 2
@ -390,51 +482,83 @@ object frmLogin: TfrmLogin
end
end
object gbData: TGroupBox
AnchorSideLeft.Control = gbConnection
AnchorSideTop.Control = gbConnection
AnchorSideTop.Side = asrBottom
AnchorSideRight.Control = gbConnection
AnchorSideRight.Side = asrBottom
Left = 8
Height = 97
Top = 144
Width = 321
Height = 95
Top = 136
Width = 314
Anchors = [akTop, akLeft, akRight]
AutoSize = True
BorderSpacing.Top = 4
Caption = 'Data files'
ClientHeight = 79
ClientWidth = 317
ClientHeight = 81
ClientWidth = 312
TabOrder = 1
object lblData: TLabel
Left = 7
Height = 32
Top = 8
Width = 304
AutoSize = False
Caption = 'Select the directory containing art.mul, artidx.mul, hues.mul, tiledata.mul, texmaps.mul and texidx.mul.'
AnchorSideLeft.Control = gbData
AnchorSideTop.Control = gbData
AnchorSideRight.Control = gbData
AnchorSideRight.Side = asrBottom
Left = 8
Height = 46
Top = 4
Width = 296
Anchors = [akTop, akLeft, akRight]
BorderSpacing.Left = 8
BorderSpacing.Top = 4
BorderSpacing.Right = 8
Caption = 'Select the directory containing art.mul, artidx.mul, hues.mul, tiledata.mul, animdata.mul, texmaps.mul and texidx.mul.'
ParentColor = False
WordWrap = True
end
object edData: TDirectoryEdit
Left = 7
Height = 21
Top = 48
Width = 280
AnchorSideLeft.Control = lblData
AnchorSideTop.Control = lblData
AnchorSideTop.Side = asrBottom
Left = 8
Height = 19
Top = 54
Width = 272
ShowHidden = False
ButtonWidth = 23
NumGlyphs = 1
BorderSpacing.Top = 4
BorderSpacing.Bottom = 8
MaxLength = 0
TabOrder = 0
end
end
object GroupBox1: TGroupBox
Left = 336
Height = 88
Top = 112
Width = 145
object gbProfiles: TGroupBox
AnchorSideLeft.Control = gbActions
AnchorSideTop.Control = gbActions
AnchorSideTop.Side = asrBottom
AnchorSideRight.Control = gbActions
AnchorSideRight.Side = asrBottom
Left = 330
Height = 85
Top = 96
Width = 143
Anchors = [akTop, akLeft, akRight]
AutoSize = True
BorderSpacing.Top = 8
Caption = 'Profiles'
ClientHeight = 70
ClientHeight = 71
ClientWidth = 141
TabOrder = 3
object btnSaveProfile: TSpeedButton
Left = 86
AnchorSideTop.Control = btnDeleteProfile
AnchorSideRight.Control = btnDeleteProfile
Left = 81
Height = 22
Hint = 'Save profile'
Top = 40
Width = 23
Top = 41
Width = 22
Anchors = [akTop, akRight]
BorderSpacing.Right = 8
Color = clBtnFace
Glyph.Data = {
36040000424D3604000000000000360000002800000010000000100000000100
@ -479,11 +603,18 @@ object frmLogin: TfrmLogin
ParentShowHint = False
end
object btnDeleteProfile: TSpeedButton
AnchorSideTop.Control = cbProfile
AnchorSideTop.Side = asrBottom
AnchorSideRight.Control = cbProfile
AnchorSideRight.Side = asrBottom
Left = 111
Height = 22
Hint = 'Delete profile'
Top = 40
Width = 23
Top = 41
Width = 22
Anchors = [akTop, akRight]
BorderSpacing.Top = 8
BorderSpacing.Bottom = 8
Color = clBtnFace
Glyph.Data = {
36040000424D3604000000000000360000002800000010000000100000000100
@ -528,11 +659,19 @@ object frmLogin: TfrmLogin
ParentShowHint = False
end
object cbProfile: TComboBox
Left = 6
Height = 21
Top = 8
Width = 128
ItemHeight = 13
AnchorSideLeft.Control = gbProfiles
AnchorSideTop.Control = gbProfiles
AnchorSideRight.Control = gbProfiles
AnchorSideRight.Side = asrBottom
Left = 8
Height = 29
Top = 4
Width = 125
Anchors = [akTop, akLeft, akRight]
BorderSpacing.Left = 8
BorderSpacing.Top = 4
BorderSpacing.Right = 8
ItemHeight = 0
OnChange = cbProfileChange
Style = csDropDownList
TabOrder = 0

View File

@ -21,7 +21,7 @@
* CDDL HEADER END
*
*
* Portions Copyright 2007 Andreas Schneider
* Portions Copyright 2009 Andreas Schneider
*)
unit UfrmLogin;
@ -48,7 +48,7 @@ type
gbConnection: TGroupBox;
gbData: TGroupBox;
gbActions: TGroupBox;
GroupBox1: TGroupBox;
gbProfiles: TGroupBox;
imgHost: TImage;
imgUsername: TImage;
imgPassword: TImage;
@ -108,12 +108,13 @@ begin
(not FileExists(path + 'artidx.mul')) or
(not FileExists(path + 'hues.mul')) or
(not FileExists(path + 'tiledata.mul')) or
(not FileExists(path + 'animdata.mul')) or
(not FileExists(path + 'texmaps.mul')) or
(not FileExists(path + 'texidx.mul')) then
begin
MessageDlg('Incorrect directory', 'The data path you specified does not seem to be correct.', mtWarning, [mbOK], 0);
MessageDlg('Incorrect directory', 'The data path you specified does not '
+ 'seem to be correct.', mtWarning, [mbOK], 0);
edData.SetFocus;
Exit;
end else
ModalResult := mrOK;
end;
@ -168,9 +169,11 @@ procedure TfrmLogin.FormCreate(Sender: TObject);
var
searchRec: TSearchRec;
begin
lblCopyright.Caption := Format('UO CentrED Client Version %s (c) %s', [ProductVersion, Copyright]);
lblCopyright.Caption := Format('UO CentrED Client Version %s (c) %s',
[ProductVersion, Copyright]);
FProfilePath := IncludeTrailingPathDelimiter(ExtractFilePath(Application.ExeName)) + 'Profiles' + PathDelim;
FProfilePath := IncludeTrailingPathDelimiter(ExtractFilePath(Application.ExeName))
+ 'Profiles' + PathDelim;
ForceDirectories(FProfilePath);
if FindFirst(FProfilePath + '*.ini', faAnyFile, searchRec) = 0 then
begin

View File

@ -48,6 +48,7 @@ type
FAnimData: TAnimDataArray;
function CalculateOffset(AID: Integer): Integer; override;
function GetData(AID, AOffset: Integer): TAnimData; override;
procedure InitArray;
procedure SetData(AID, AOffset: Integer; ABlock: TMulBlock); override;
public
property AnimData: TAnimDataArray read FAnimData;
@ -61,15 +62,22 @@ implementation
constructor TAnimDataProvider.Create(AData: TStream; AReadOnly: Boolean);
begin
inherited Create(AData, AReadOnly);
InitArray;
end;
constructor TAnimDataProvider.Create(AData: string; AReadOnly: Boolean);
begin
inherited Create(AData, AReadOnly);
InitArray;
end;
destructor TAnimDataProvider.Destroy;
var
i: Integer;
begin
for i := 0 to Length(FAnimData) - 1 do
FreeAndNil(FAnimData[i]);
inherited Destroy;
end;
@ -83,6 +91,17 @@ begin
Result := FAnimData[AID];
end;
procedure TAnimDataProvider.InitArray;
var
i: Integer;
begin
for i := 0 to Length(FAnimData) - 1 do
begin
FData.Position := GetAnimDataOffset(i);
FAnimData[i] := TAnimData.Create(FData);
end;
end;
procedure TAnimDataProvider.SetData(AID, AOffset: Integer; ABlock: TMulBlock);
begin
FreeAndNil(FAnimData[AID]);

View File

@ -123,7 +123,7 @@ procedure TMulManager.RegisterAnimDataProvider(
AAnimDataProvider: TAnimDataProvider);
begin
FreeAndNil(FAnimDataProvider);
FTileDataProvider := AAnimDataProvider;
FAnimDataProvider := AAnimDataProvider;
end;
end.

View File

@ -69,16 +69,16 @@ type
property Unknown: LongInt read FUnknown write FUnknown;
end;
function GetAnimDataOffset(Block: Integer): Integer;
function GetAnimDataOffset(AID: Integer): Integer;
implementation
function GetAnimDataOffset(Block: Integer): Integer;
function GetAnimDataOffset(AID: Integer): Integer;
var
group, tile: Integer;
begin
group := Block div 8;
tile := Block mod 8;
group := AID div 8;
tile := AID mod 8;
Result := group * AnimDataGroupSize + 4 + tile * AnimDataSize;
end;