Changeset 77 for trunk/UEngine.pas
- Timestamp:
- May 19, 2021, 11:30:41 AM (3 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/UEngine.pas
r76 r77 9 9 {$IFDEF Darwin}MacOSAll, CocoaAll, CocoaUtils,{$ENDIF} 10 10 Classes, SysUtils, Graphics, Controls, ExtCtrls, Math, DateUtils, 11 UMetaCanvas, fgl, UMenu ;11 UMetaCanvas, fgl, UMenu, UControls; 12 12 13 13 type … … 278 278 FDarkMode: Boolean; 279 279 FOnDarkModeChange: TNotifyEvent; 280 FState: TGameState; 280 281 LastMousePos: TPoint; 281 282 LastFocusedStation: TMapStation; … … 294 295 MenuGame: TMenu; 295 296 LastState: TGameState; 297 TimePerSecond: TDateTime; 296 298 function GetServedDaysCount: Integer; 297 299 procedure ResizeView; … … 315 317 procedure SetDarkMode(AValue: Boolean); 316 318 procedure InitColors; 319 procedure SetState(AValue: TGameState); 317 320 procedure TrainMovement; 318 321 function GetUnusedLine: TMetroLine; … … 325 328 procedure MenuItemGameRestart(Sender: TObject); 326 329 procedure MenuItemBack(Sender: TObject); 330 procedure ButtonPlay(Sender: TObject); 331 procedure ButtonPause(Sender: TObject); 332 procedure ButtonFastForward(Sender: TObject); 327 333 procedure ButtonBackClick(Sender: TObject); 328 334 procedure DarkModeChanged(Sender: TObject); 329 335 procedure LanguageChanged(Sender: TObject); 330 336 procedure FullScreenChanged(Sender: TObject); 337 procedure UpdateInterface; 331 338 public 332 339 Colors: TColors; … … 343 350 TrackStationUp: TTrackPoint; 344 351 ServedPassengerCount: Integer; 345 State: TGameState;346 352 RedrawPending: Boolean; 347 ButtonBack: T MenuItemImage;353 ButtonBack: TImage; 348 354 ImagePassenger: TImage; 349 355 ImageLocomotive: TImage; 356 ImagePlay: TImage; 357 ImagePause: TImage; 358 ImageFastForward: TImage; 350 359 HighestServedPassengerCount: Integer; 351 360 HighestServedDaysCount: Integer; … … 365 374 property Time: TDateTime read FTime; 366 375 property DarkMode: Boolean read FDarkMode write SetDarkMode; 376 property State: TGameState read FState write SetState; 367 377 property ServedDaysCount: Integer read GetServedDaysCount; 368 378 property OnDarkModeChange: TNotifyEvent read FOnDarkModeChange … … 386 396 ImageLocomotiveName = 'Images/Locomotive.png'; 387 397 ImageLeftArrowName = 'Images/Left arrow.png'; 398 ImagePlayName = 'Images/Play.png'; 399 ImagePauseName = 'Images/Pause.png'; 400 ImageFastForwardName = 'Images/Fast forward.png'; 388 401 TrainPassengerCount = 6; 389 402 StationMinDistance = 100; … … 395 408 EndStationLength = 50; 396 409 ShowDistances = False; 397 TimePerSecond = 60 * OneMinute; 410 TimePerSecondNormal = 60 * OneMinute; 411 TimePerSecondFast = 2 * TimePerSecondNormal; 398 412 NewStationPeriod = 1; 399 413 NewShapePeriod = 10; … … 1692 1706 MenuItemBackgroundSelected := $f7bC61; 1693 1707 end; 1708 end; 1709 1710 procedure TEngine.SetState(AValue: TGameState); 1711 begin 1712 if FState = AValue then Exit; 1713 FState := AValue; 1714 UpdateInterface; 1694 1715 end; 1695 1716 … … 1949 1970 end; 1950 1971 1972 procedure TEngine.ButtonPlay(Sender: TObject); 1973 begin 1974 TimePerSecond := TimePerSecondNormal; 1975 if State = gsPaused then State := gsRunning; 1976 UpdateInterface; 1977 end; 1978 1979 procedure TEngine.ButtonPause(Sender: TObject); 1980 begin 1981 if State = gsRunning then State := gsPaused; 1982 UpdateInterface; 1983 end; 1984 1985 procedure TEngine.ButtonFastForward(Sender: TObject); 1986 begin 1987 TimePerSecond := TimePerSecondFast; 1988 if State = gsPaused then State := gsRunning; 1989 UpdateInterface; 1990 end; 1991 1951 1992 procedure TEngine.MenuItemGameContinue(Sender: TObject); 1952 1993 begin … … 1989 2030 FormMain.FullScreen := TMenuItemCheckBox(Sender).Checked; 1990 2031 FormMain.PersistentForm1.SetFullScreen(FormMain.FullScreen); 2032 end; 2033 2034 procedure TEngine.UpdateInterface; 2035 begin 2036 ImagePlay.Enabled := not ((State = gsRunning) and (TimePerSecond = TimePerSecondNormal)); 2037 ImageFastForward.Enabled := not ((State = gsRunning) and (TimePerSecond = TimePerSecondFast)); 2038 ImagePause.Enabled := FState = gsRunning; //not (State = gsPaused); 1991 2039 end; 1992 2040 … … 2095 2143 Angle: Double; 2096 2144 Text: string; 2097 Text2: string;2098 2145 I: Integer; 2146 Y: Integer; 2099 2147 const 2100 2148 ClockSize = 20; … … 2115 2163 ClockCenter.Y + Round(Sin(Angle) * ClockSize * 0.9)); 2116 2164 end; 2165 Y := ClockCenter.Y + ScaleY(5, 96); 2117 2166 2118 2167 Canvas.Font.Color := Colors.Text; 2119 2168 Text := FormatDateTime('ddd', Time + 2); 2120 Canvas.TextOut(ClockCenter.X - ClockSize - Canvas.TextWidth(Text) - 10, ClockCenter.Y - 2121 Canvas.TextHeight(Text) div 2, Text); 2122 2123 Text2 := SDay + ' ' + IntToStr(Trunc(Time)); 2124 Canvas.TextOut(ClockCenter.X - ClockSize - Canvas.TextWidth(Text) - 10, ClockCenter.Y - 2125 Canvas.TextHeight(Text2) div 2 + Trunc(Canvas.TextHeight(Text) * 1.1), Text2); 2169 Canvas.TextOut(ClockCenter.X - ClockSize - Canvas.TextWidth(Text) - 10, 2170 Y - Canvas.TextHeight(Text) div 2, Text); 2171 Y := Y + Canvas.TextHeight(Text) + ScaleY(5, 96); 2172 2173 Text := SDay + ' ' + IntToStr(Trunc(Time)); 2174 Canvas.TextOut(ClockCenter.X - ClockSize - Canvas.TextWidth(Text) - 10, 2175 Y - Canvas.TextHeight(Text) div 2, Text); 2176 Y := Y + Canvas.TextHeight(Text) + ScaleY(5, 96); 2177 2178 ImagePause.Canvas := Canvas; 2179 ImagePause.Bounds := Bounds(CanvasSize.X - ScaleX(20 + 10, 96), Y, ScaleX(20, 96), ScaleY(20, 96)); 2180 ImagePause.Paint; 2181 Y := Y + ImagePause.Bounds.Height + ScaleY(5, 96); 2182 2183 ImagePlay.Canvas := Canvas; 2184 ImagePlay.Bounds := Bounds(CanvasSize.X - ScaleX(20 + 10, 96) , Y, ScaleX(20, 96), ScaleY(20, 96)); 2185 ImagePlay.Paint; 2186 Y := Y + ImagePlay.Bounds.Height + ScaleY(5, 96); 2187 2188 ImageFastForward.Canvas := Canvas; 2189 ImageFastForward.Bounds := Bounds(CanvasSize.X - ScaleX(20 + 10, 96) , Y, ScaleX(20, 96), ScaleY(20, 96)); 2190 ImageFastForward.Paint; 2191 Y := Y + ImageFastForward.Bounds.Height + ScaleY(5, 96); 2126 2192 end; 2127 2193 … … 2394 2460 Text := IntToStr(Trains.GetUnusedCount); 2395 2461 Canvas.Draw(CanvasSize.X div 2 - Length(LineColors) div 2 * LineColorsDist - 100, 2396 CanvasSize.Y - LineColorsDist - ImageLocomotive. Picture.Bitmap.Height div 2, ImageLocomotive.Picture.Bitmap);2462 CanvasSize.Y - LineColorsDist - ImageLocomotive.Bitmap.Height div 2, ImageLocomotive.Bitmap); 2397 2463 Canvas.Brush.Style := bsClear; 2398 2464 Canvas.Font.Size := 14; … … 2403 2469 // Status interface 2404 2470 Text := IntToStr(ServedPassengerCount); 2405 Canvas.Draw(CanvasSize.X - 50, CanvasSize.Y - 60, ImagePassenger. Picture.Bitmap);2471 Canvas.Draw(CanvasSize.X - 50, CanvasSize.Y - 60, ImagePassenger.Bitmap); 2406 2472 Canvas.Brush.Style := bsClear; 2407 2473 Canvas.Font.Size := 14; … … 2415 2481 Canvas.Font.Size := 40; 2416 2482 Canvas.Font.Color := Colors.Text; 2417 ButtonBack.Paint(Canvas, Point(10, 10)); 2483 ButtonBack.Canvas := Canvas; 2484 ButtonBack.Bounds.Left := 10; 2485 ButtonBack.Bounds.Top := 10; 2486 ButtonBack.Paint; 2418 2487 2419 2488 // Show train grabbed by mouse … … 2441 2510 if State = gsRunning then begin 2442 2511 FTime := FTime + (Now - LastTickTime) / OneSecond * TimePerSecond; 2443 Redraw; // Redraw on every because engine time is changed so clock should be redrawn2512 Redraw; // Redraw on every tick because engine time is changed so clock should be redrawn 2444 2513 2445 2514 // Add new trains … … 2593 2662 end; 2594 2663 2664 // Pause button 2665 if ImagePause.Bounds.Contains(Position) then begin 2666 if Assigned(ImagePause.OnClick) then 2667 ImagePause.OnClick(ImagePause); 2668 end; 2669 2670 // Play button 2671 if ImagePlay.Bounds.Contains(Position) then begin 2672 if Assigned(ImagePlay.OnClick) then 2673 ImagePlay.OnClick(ImagePlay); 2674 end; 2675 2676 // Fast forward button 2677 if ImageFastForward.Bounds.Contains(Position) then begin 2678 if Assigned(ImageFastForward.OnClick) then 2679 ImageFastForward.OnClick(ImageFastForward); 2680 end; 2681 2595 2682 // Place selected train if focused track 2596 2683 if Assigned(SelectedTrain) then begin … … 2792 2879 constructor TEngine.Create; 2793 2880 begin 2794 ButtonBack := TMenuItemImage.Create; 2881 TimePerSecond := TimePerSecondNormal; 2882 ButtonBack := TImage.Create; 2795 2883 ButtonBack.OnClick := ButtonBackClick; 2796 ButtonBack.BackgroundColor := clNone;2797 2884 ButtonBack.Bounds := Bounds(0, 0, ScaleX(80, 96), ScaleY(80, 96)); 2798 2885 MenuMain := TMenu.Create; … … 2810 2897 View := TView.Create; 2811 2898 Trains := TMetroTrains.Create; 2812 ImagePassenger := TImage.Create(nil); 2813 ImageLocomotive := TImage.Create(nil); 2899 ImagePassenger := TImage.Create; 2900 ImageLocomotive := TImage.Create; 2901 ImagePlay := TImage.Create; 2902 ImagePlay.OnClick := ButtonPlay; 2903 ImagePause := TImage.Create; 2904 ImagePause.OnClick := ButtonPause; 2905 ImageFastForward := TImage.Create; 2906 ImageFastForward.OnClick := ButtonFastForward; 2814 2907 //if FileExists(ImagePassengerName) then 2815 2908 // ImagePassenger.Picture.LoadFromFile(ImagePassengerName); … … 2824 2917 FreeAndNil(MetaCanvas); 2825 2918 FreeAndNil(Trains); 2919 FreeAndNil(ImagePlay); 2920 FreeAndNil(ImageFastForward); 2921 FreeAndNil(ImagePause); 2826 2922 FreeAndNil(ImageLocomotive); 2827 2923 FreeAndNil(ImagePassenger);
Note:
See TracChangeset
for help on using the changeset viewer.