* Replaced fgl with heContnrs

* Fixed behavior of the undo packet list (fixes #88)
This commit is contained in:
2012-01-14 17:58:59 +01:00
parent aa37b1cf1d
commit 940e81f123
11 changed files with 7492 additions and 43 deletions

View File

@@ -138,6 +138,11 @@
<FormatVersion Value="1"/>
<LaunchingApplication PathPlusParams="/usr/X11R6/bin/xterm -T 'Lazarus Run Output' -e $(LazarusDir)/tools/runwait.sh $(TargetCmdLine)"/>
</local>
<environment>
<UserOverrides Count="1">
<Variable0 Name="HEAPTRC" Value="log=CentrED.trc"/>
</UserOverrides>
</environment>
</RunParams>
<RequiredPackages Count="6">
<Item1>
@@ -163,7 +168,7 @@
<MinVersion Major="4" Minor="5" Valid="True" Release="1"/>
</Item6>
</RequiredPackages>
<Units Count="46">
<Units Count="48">
<Unit0>
<Filename Value="CentrED.lpr"/>
<IsPartOfProject Value="True"/>
@@ -434,6 +439,16 @@
<ResourceBaseClass Value="Form"/>
<UnitName Value="UfrmLightlevel"/>
</Unit45>
<Unit46>
<Filename Value="../heContnrs.pas"/>
<IsPartOfProject Value="True"/>
<UnitName Value="heContnrs"/>
</Unit46>
<Unit47>
<Filename Value="../UContnrExt.pas"/>
<IsPartOfProject Value="True"/>
<UnitName Value="UContnrExt"/>
</Unit47>
</Units>
</ProjectOptions>
<CompilerOptions>
@@ -462,7 +477,6 @@
<Linking>
<Debugging>
<DebugInfoType Value="dsStabs"/>
<UseHeaptrc Value="True"/>
</Debugging>
</Linking>
<Other>
@@ -470,8 +484,7 @@
<IgnoredMessages idx4079="True" idx4080="True" idx4081="True" idx5024="True" idx5028="True"/>
<UseMsgFile Value="True"/>
</CompilerMessages>
<CustomOptions Value="-FE../bin/
-dNoLogging"/>
<CustomOptions Value="-FE../bin/"/>
<CompilerPath Value="$(CompPath)"/>
</Other>
</CompilerOptions>

View File

@@ -28,6 +28,7 @@ program CentrED;
{$mode objfpc}{$H+}
uses
{$IFNDEF NoLogging}heaptrc,{$ENDIF}
{$IFDEF UNIX}{$IFDEF UseCThreads}
cthreads,
{$ENDIF}{$ENDIF}
@@ -43,7 +44,12 @@ begin
end;
begin
{$IFNDEF NoLogging}
SetHeapTraceOutput('CentrED.trc');
{$ENDIF}
OnGetApplicationName := @GetApplicationName;
Application.Initialize;
Application.CreateForm(TdmNetwork, dmNetwork);
Application.Run;

View File

@@ -21,7 +21,7 @@
* CDDL HEADER END
*
*
* Portions Copyright 2011 Andreas Schneider
* Portions Copyright 2012 Andreas Schneider
*)
unit ULightManager;
@@ -31,8 +31,8 @@ interface
uses
Classes, SysUtils, Imaging, ImagingTypes, ImagingClasses, ImagingCanvases,
ImagingOpenGL, GL, GLu, GLext, fgl, ULandscape, UWorldItem, UCacheManager,
Math;
ImagingOpenGL, GL, GLu, GLext, Math, heContnrs, ULandscape, UWorldItem,
UCacheManager;
type
@@ -70,7 +70,7 @@ type
property Material: TLightMaterial read FMaterial;
end;
TLightSources = specialize TFPGObjectList<TLightSource>;
TLightSources = specialize TheObjectVector<TLightSource>;
{ TLightManager }

View File

@@ -34,8 +34,9 @@ uses
ComCtrls, OpenGLContext, GL, GLu, UGameResources, ULandscape, ExtCtrls,
StdCtrls, Spin, UEnums, VirtualTrees, Buttons, UMulBlock, UWorldItem, math,
LCLIntf, UOverlayUI, UStatics, UEnhancedMemoryStream, ActnList,
XMLPropStorage, fgl, ImagingClasses, dateutils, UPlatformTypes, UMap, UPacket,
UGLFont, DOM, XMLRead, XMLWrite, strutils, ULightManager;
XMLPropStorage, ImagingClasses, dateutils, UPlatformTypes, UMap, UPacket,
UGLFont, DOM, XMLRead, XMLWrite, strutils, ULightManager, heContnrs,
UContnrExt;
type
TAccessChangedListener = procedure(AAccessLevel: TAccessLevel) of object;
@@ -43,12 +44,12 @@ type
TScreenBufferState = (sbsValid, sbsIndexed, sbsFiltered);
TScreenBufferStates = set of TScreenBufferState;
TBlockInfoList = specialize TFPGList<PBlockInfo>;
TBlockInfoList = specialize TheVector<PBlockInfo>;
TGhostTile = class(TStaticItem);
TPacketList = specialize TFPGObjectList<TPacket>;
TAccessChangedListeners = specialize TFPGList<TAccessChangedListener>;
TSelectionListeners = specialize TFPGList<TSelectionListener>;
TPacketList = specialize TheObjectVector<TPacket>;
TAccessChangedListeners = specialize TPointerVectorSet<TAccessChangedListener>;
TSelectionListeners = specialize TPointerVectorSet<TSelectionListener>;
TTileHintInfo = record
Name: String;
@@ -650,6 +651,7 @@ var
tileX, tileY, newX, newY: Word;
targetBlocks: TBlockInfoList;
targetTile: TWorldItem;
selectionListener: TSelectionListener;
begin
Logger.EnterMethod([lcClient, lcDebug], 'MouseUp');
if Button <> mbLeft then
@@ -677,8 +679,8 @@ begin
mnuGrabTileIDClick(nil);
end;
for i := FSelectionListeners.Count - 1 downto 0 do
FSelectionListeners[i](CurrentTile);
for selectionListener in FSelectionListeners.Reversed do
selectionListener(CurrentTile);
end;
if (not acSelect.Checked) and (targetTile <> nil) and (SelectedTile <> nil) then
@@ -1123,14 +1125,16 @@ end;
procedure TfrmMain.acUndoExecute(Sender: TObject);
var
i: Integer;
packet: TPacket;
begin
for i := FUndoList.Count - 1 downto 0 do
begin
dmNetwork.Send(FUndoList[i]);
FUndoList[i] := nil;
end;
FUndoList.Clear;
//Send each reversed action in reverse order.
for packet in FUndoList.Reversed do
dmNetwork.Send(packet);
//Cleanup without freeing the objects (this was already done by dmNetwork.Send)
FUndoList.Wipe;
//No Undo packets, nothing to undo.
acUndo.Enabled := False;
end;
@@ -1912,25 +1916,23 @@ end;
procedure TfrmMain.RegisterAccessChangedListener(
AListener: TAccessChangedListener);
begin
if FAccessChangedListeners.IndexOf(AListener) < 0 then
FAccessChangedListeners.Add(AListener);
FAccessChangedListeners.Include(AListener);
end;
procedure TfrmMain.RegisterSelectionListener(AListener: TSelectionListener);
begin
if FSelectionListeners.IndexOf(AListener) < 0 then
FSelectionListeners.Add(AListener);
FSelectionListeners.Include(AListener);
end;
procedure TfrmMain.UnregisterAccessChangedListener(
AListener: TAccessChangedListener);
begin
FAccessChangedListeners.Remove(AListener);
FAccessChangedListeners.Exclude(AListener);
end;
procedure TfrmMain.UnregisterSelectionListener(AListener: TSelectionListener);
begin
FSelectionListeners.Remove(AListener);
FSelectionListeners.Exclude(AListener);
end;
procedure TfrmMain.SetCurrentTile(const AValue: TWorldItem);
@@ -3057,6 +3059,7 @@ var
sender, msg: string;
i: Integer;
accessLevel: TAccessLevel;
accessChangedListener: TAccessChangedListener;
begin
case ABuffer.ReadByte of
$01: //client connected
@@ -3111,8 +3114,8 @@ begin
end;
end;
for i := FAccessChangedListeners.Count - 1 downto 0 do
FAccessChangedListeners[i](accessLevel);
for accessChangedListener in FAccessChangedListeners.Reversed do
accessChangedListener(accessLevel);
end;
end;
end;