Recent

Author Topic: Z Index Demo  (Read 248 times)

Gigatron

  • Sr. Member
  • ****
  • Posts: 283
  • Amiga Rulez !!
Z Index Demo
« on: May 17, 2025, 02:04:17 am »
Hi,

Right now i don't know if i can make z index another way with lazarus.
So let me share another nice Red sector Amegas crack fx to change position of image
if this one reach top or bottom.
Have Fun

Code: Pascal  [Select][+][-]
  1. unit Unit1;
  2.  
  3. {$mode objfpc}{$H+}
  4.  
  5. interface
  6.  
  7. uses
  8.   Classes, SysUtils, Forms, Controls, Graphics, Dialogs, ExtCtrls, Menus,
  9.   BGRAVirtualScreen, BGRABitmap, BGRABitmapTypes, Math;
  10.  
  11. const
  12.   reach_TOP = 80;
  13.   rach_BOT = 250;
  14.   speed = 2;
  15.   copper_ww = 800;
  16.   copper_hh = 64;
  17.   col_change_time = 250;
  18.  
  19. type
  20.   { TForm1 }
  21.   TForm1 = class(TForm)
  22.     BGRAVirtualScreen1: TBGRAVirtualScreen;
  23.     MainMenu1: TMainMenu;
  24.     Timer1: TTimer;
  25.     procedure BGRAVirtualScreen1Redraw(Sender: TObject; Bitmap: TBGRABitmap);
  26.     procedure FormCreate(Sender: TObject);
  27.     procedure FormDestroy(Sender: TObject);
  28.     procedure Timer1Timer(Sender: TObject);
  29.   private
  30.     pause_count: Integer;
  31.     BaseR, BaseG, BaseB: Byte; // rgb base
  32.   public
  33.     LogoDir, LogoYPos1, LogoYPos2, LogoXPos: Integer;
  34.     gtr, laz, Galaxy, Copper: TBGRABitmap;
  35.  
  36.     procedure UpdateCopperBar;
  37.   end;
  38.  
  39. var
  40.   Form1: TForm1;
  41.  
  42. implementation
  43. {$R *.lfm}
  44.  
  45. procedure TForm1.UpdateCopperBar;
  46. var
  47.   i: Integer;
  48.   r, g, b: Byte;
  49.   y1, y2: Integer;
  50. begin
  51.  
  52.   // up colors
  53.   for i := 0 to 15 do
  54.   begin
  55.     r := Min(BaseR * i div 15, 255);
  56.     g := Min(BaseG * i div 15, 255);
  57.     b := Min(BaseB * i div 15, 255);
  58.     y1 := i * 2;
  59.     y2 := y1 + 4;
  60.     Copper.FillRect(0, y1, copper_ww, y2, BGRA(r, g, b, 255), dmSet);
  61.   end;
  62.   // down
  63.   for i := 0 to 15 do
  64.   begin
  65.     r := Max(BaseR - (BaseR * i div 15), 0);
  66.     g := Max(BaseG - (BaseG * i div 15), 0);
  67.     b := Max(BaseB - (BaseB * i div 15), 0);
  68.     y1 := 34 + i * 2;
  69.     y2 := y1 + 2;
  70.     Copper.FillRect(0, y1, copper_ww, y2, BGRA(r, g, b, 255), dmSet);
  71.   end;
  72. end;
  73.  
  74. procedure TForm1.FormCreate(Sender: TObject);
  75. begin
  76.   Randomize; // Une seule fois au démarrage
  77.  
  78.   try
  79.     gtr := TBGRABitmap.Create('gtr.png');
  80.     laz := TBGRABitmap.Create('laz.png');
  81.     Copper := TBGRABitmap.Create(copper_ww, copper_hh);
  82.   except
  83.     on E: Exception do
  84.       ShowMessage('load images error !! ' + E.Message);
  85.   end;
  86.  
  87.   LogoDir := 1;
  88.   LogoXPos := 80;
  89.   LogoYPos1 := reach_TOP;
  90.   LogoYPos2 := rach_BOT;
  91.  
  92.   BaseR := 55;
  93.   BaseG := 55;
  94.   BaseB := 55;
  95.  
  96.   pause_count := 0;
  97.  
  98.   UpdateCopperBar;
  99. end;
  100.  
  101. procedure TForm1.BGRAVirtualScreen1Redraw(Sender: TObject; Bitmap: TBGRABitmap);
  102. begin
  103.   // back image / galaxy
  104.  // Bitmap.PutImage(0, 0, Galaxy, dmSet);
  105.  
  106.   LogoYPos1 := LogoYPos1 + speed * LogoDir;
  107.   LogoYPos2 := LogoYPos2 - speed * LogoDir;
  108.  
  109.   if (LogoYPos1 > rach_BOT) then
  110.     LogoDir := -1
  111.   else if (LogoYPos1 < reach_TOP) then
  112.     LogoDir := 1;
  113.   // swap position order Z-index de M.rde !!
  114.   if (LogoDir = 1) then
  115.   begin
  116.     Bitmap.PutImage(0, 180-128, Copper, dmSet);
  117.     Bitmap.PutImage(LogoXPos, LogoYPos1, gtr, dmDrawWithTransparency);
  118.     Bitmap.PutImage(0, 180, Copper, dmSet);
  119.     Bitmap.PutImage(LogoXPos, LogoYPos2, laz, dmDrawWithTransparency);
  120.     Bitmap.PutImage(0, 180+128, Copper, dmSet);
  121.   end
  122.   else
  123.   begin
  124.     Bitmap.PutImage(0, 180-128, Copper, dmSet);
  125.     Bitmap.PutImage(LogoXPos, LogoYPos2, laz, dmDrawWithTransparency);
  126.     Bitmap.PutImage(0, 180, Copper, dmSet);
  127.     Bitmap.PutImage(LogoXPos, LogoYPos1, gtr, dmDrawWithTransparency);
  128.      Bitmap.PutImage(0, 180+128, Copper, dmSet);
  129.   end;
  130. end;
  131.  
  132. procedure TForm1.Timer1Timer(Sender: TObject);
  133. begin
  134.   Inc(pause_count, 2);
  135.   if (pause_count mod col_change_time = 0) then
  136.   begin
  137.     BaseR := 55 + Random(200);
  138.     BaseG := 55 + Random(200);
  139.     BaseB := 55 + Random(200);
  140.     pause_count := 0;
  141.     UpdateCopperBar;
  142.   end;
  143.  
  144.   BGRAVirtualScreen1.RedrawBitmap;
  145. end;
  146. procedure TForm1.FormDestroy(Sender: TObject);
  147. begin
  148.   gtr.Free;
  149.   laz.Free;
  150.  // Galaxy.Free;
  151.   Copper.Free;
  152. end;
  153. end.
« Last Edit: May 17, 2025, 03:45:25 am by Gigatron »
Sub Quantum Technology ! Pascal - C - C# - Java - Javascript - Glsl - Lua - Html5 - CSS - Amiga Rules !

 

TinyPortal © 2005-2018