class menu_c_Zoner extends GUI2K4.MidGamePanel config(HideMut); //=================================================================Interface section /* var automated MOCheckBox var automated MoComboBox var automated moNumericEdit var automated moFloatEdit var Automated GUIListBox var Automated GUISectionBackground var automated moNumericEdit */ var automated GUIButton b_SetStart, b_SetEnd, b_SaveConfig, b_DrawZones, b_ShowZonedStaticMeshes; var automated GUISectionBackground sb_ZonerDraw; //=================================================================Interface section //=================================================================Structs start struct MyZone { var int ZoneKey; //zone key var string ZoneName; //Zone name var array VectorsCoord; //Coordinates of zone borders. Drawing from 0 to 1, 1 to 2 and etc. var float MinX, MinY, MaxX, MaxY; //Minimal coords for setting zoned actors var array PortalActorsRefs; //Actors that are visible through "portal" aka hole between neighbouring zones. Neighbouring zones may have same set of this var array DecorativeActorsRefs; //Decorative stuff between zones var bool IgnoreXAxis; //Ignore this axis when setting active zone var bool IgnoreYAxis; var bool IgnoreZAxis; var bool HideDecorativeActors; var bool HidePortalActors; }; // Struct for map zoning struct MyZonedMap { var string MapName; var array MyZoneRef; //reference to my zone structure var int MinVectorRef; //currently all vectors are 1 big array for all maps var int MaxVectorRef; }; var config array ZonedMaps; var config array MyZones; var PlayerController PC; var vector LineStart, LineEnd; var byte R, G, B; //colors for vectors var config array ZVectors; var config array ZZones; var config array SMAS; var int LinesCount, NextZone; //=================================================================Structs end simulated function InitComponent(GUIController MyController, GUIComponent MyOwner) { super.InitComponent(MyController,MyOwner); sb_ZonerDraw.ManageComponent(b_SetStart); sb_ZonerDraw.ManageComponent(b_SetEnd); sb_ZonerDraw.ManageComponent(b_SaveConfig); sb_ZonerDraw.ManageComponent(b_DrawZones); sb_ZonerDraw.ManageComponent(b_ShowZonedStaticMeshes); PC = PlayerOwner(); R = 255; //Line color G = 0; B = 0; } function ShowPanel(bool bShow) { super.ShowPanel(bShow); } event Opened(GUIComponent Sender) { super.Opened(Sender); } function StartDrawing() { LineStart = PC.Pawn.Location; } function DrawLine() { LineEnd = PC.Pawn.Location; PC.Pawn.DrawStayingDebugLine(LineStart, LineEnd, R, G, B); //Draw line for visual zone representation ZVectors[LinesCount] = LineStart; //Save our vectors LinesCount++; ZVectors[LinesCount] = LineEnd; LinesCount++; LineStart = LineEnd; //Next line } function SaveConfigStr() { local int i,k; //,l; ZonedMaps.length = ZonedMaps.length + 1; ZonedMaps[ZonedMaps.length-1].MapName = PC.Level.GetURLMap(); //save variables for (i=0; i<9;i++) { ZonedMaps[ZonedMaps.length-1].MyZoneRef[i] = i; } for (i=0; i MyZones[i].MaxX || MyZones[i].MaxX==0) MyZones[i].MaxX = MyZones[i].VectorsCoord[k].X; if (MyZones[i].VectorsCoord[k].Y > MyZones[i].MaxY || MyZones[i].MaxY==0) MyZones[i].MaxY = MyZones[i].VectorsCoord[k].Y; } } SaveConfig(); } function DrawZonesFromConfig() { local int i; PC.Pawn.ClearStayingDebugLines(); for (i=0; i MaxX || MaxX==0) MaxX = ZVectors[i].X; if (ZVectors[i].Y > MaxY || MaxY==0) MaxY = ZVectors[i].Y; if (ZVectors[i].X < MinX || MinX==0) MinX = ZVectors[i].X; if (ZVectors[i].Y < MinY || MinY==0) MinY = ZVectors[i].Y; } PC.ClientMessage(MaxX @ MaxY @ MinX @ MinY); forEach PC.AllActors(class'StaticMeshActor', SMA) { if((SMA.Location.X <= MaxX && SMA.Location.Y <= MaxY) && (SMA.Location.X >= MinX && SMA.Location.Y >= MinY)) { SMA.bHidden = false; SMA.ResetStaticFilterState(); } } } simulated function bool ButtonClicked(GUIComponent Sender) { switch (Sender) { case b_SetStart: StartDrawing(); break; case b_SetEnd: DrawLine(); break; case b_SaveConfig: SaveConfigStr(); break; case b_DrawZones: DrawZonesFromConfig(); break; case b_ShowZonedStaticMeshes: ShowZonedStaticMeshes(); break; default: return false; } return true; } simulated function InternalOnChange(GUIComponent Sender){} defaultproperties { Begin Object Class=GUIButton Name=bSetStart Caption="Set Start vector" OnClick=menu_c_Zoner.ButtonClicked OnKeyEvent=bSetStart.InternalOnKeyEvent End Object b_SetStart=GUIButton'HideMut.menu_c_Zoner.bSetStart' Begin Object Class=GUIButton Name=bSetEnd Caption="Set End vector" OnClick=menu_c_Zoner.ButtonClicked OnKeyEvent=bSetEnd.InternalOnKeyEvent End Object b_SetEnd=GUIButton'HideMut.menu_c_Zoner.bSetEnd' Begin Object Class=GUIButton Name=bSaveConfig Caption="Save config" OnClick=menu_c_Zoner.ButtonClicked OnKeyEvent=bSaveConfig.InternalOnKeyEvent End Object b_SaveConfig=GUIButton'HideMut.menu_c_Zoner.bSaveConfig' Begin Object Class=GUIButton Name=bDrawZones Caption="Draw zones" OnClick=menu_c_Zoner.ButtonClicked OnKeyEvent=bDrawZones.InternalOnKeyEvent End Object b_DrawZones=GUIButton'HideMut.menu_c_Zoner.bDrawZones' Begin Object Class=GUIButton Name=bShowZonedStaticMeshes Caption="Draw zoned static meshes" OnClick=menu_c_Zoner.ButtonClicked OnKeyEvent=bShowZonedStaticMeshes.InternalOnKeyEvent End Object b_ShowZonedStaticMeshes=GUIButton'HideMut.menu_c_Zoner.bShowZonedStaticMeshes' Begin Object Class=GUISectionBackground Name=BGZonerDraw bFillClient=True Caption="Zoner Draw" WinWidth=0.900000 WinHeight=0.900000 OnPreDraw=BGZonerDraw.InternalPreDraw End Object sb_ZonerDraw=GUISectionBackground'HideMut.menu_c_Zoner.BGZonerDraw' }