Advertisement
RadioNurshat

Spruce 1

Nov 25th, 2020
860
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pascal 2.87 KB | None | 0 0
  1. uses vcl, graphabc, system, ABCObjects;
  2. var Horizon:Point;
  3. var current:RegularPolygonABC;
  4. //СЕКЦИЯ ПАРАМЕТРОВ.
  5. //Горизонт
  6. const HORIZON_LOCK = true;//Блокировка на горизонт
  7. const PARALLAX_SIZE_DECAY = 0.8;//Коэффициент послойного уменьшения размера
  8. const PARALLAX_COLOR_DECAY = 0.7;
  9.  
  10. //Елка
  11. //ВОТ ЭТИ 2 ПАРАМЕТРА ЧЕТКО ПОДОБРАНЫ, но в принципе можешь поиграться
  12. const SPRUCE_DECAY_AMOUNT = 0.7; //Коэффицент падения ширины треугльников
  13. const SPRUCE_LAYER_COVER = 0.6; //Наложение треугольников
  14.  
  15.  
  16. const SPRUCE_SECTIONS_RANDOM = false; //Случайное количество треугольников
  17. const SPRUCE_SECTIONS = 3; //Количество треугольников
  18. const MIN_SPRUCE_SECTIONS = 3; //Минимальное количество треугольников
  19. const MAX_SPRUCE_SECTIONS = 5; //Максимальное количество треугольников
  20.  
  21.  
  22. //Основание
  23. const SPRUCE_BASE_HEIGHT_RELATION = 0.4;
  24. const SPRUCE_BASE_WIDTH_RELATION = 0.1;
  25. const BASEMENT_COLOR = Color.Brown;
  26.  
  27.  
  28. procedure drawTriangle(x:integer; y:integer; side:integer; color: System.Drawing.Color);
  29. begin
  30.   //LockDrawing;
  31.   setPenColor(color);
  32.   MoveTo(x,y);
  33.   LineTo(x+side, y);
  34.   LineTo(x+side div 2, round(y - side * sin(3.14/3)));
  35.   LineTo(x,y);
  36.   FloodFill(x + side div 2, round(y - side * sin(3.14/3)) + 1 ,color);
  37.   //Redraw;
  38. end;
  39.  
  40. procedure drawSpruce(x:integer; y: integer; size:integer; color:system.Drawing.Color);
  41. var baseHeight:integer = round(size * SPRUCE_BASE_HEIGHT_RELATION);
  42.     baseWidth: integer = round(size * SPRUCE_BASE_WIDTH_RELATION);
  43.     initialX:integer = x;
  44.     initialY: integer = y;
  45.     initialSize: integer = size;
  46.     sections:integer;
  47.     i:integer;
  48. begin
  49.   //Рисование ствола
  50.   setPenColor(BASEMENT_COLOR);
  51.   Rectangle(x + size div 2 - baseWidth div 2, y+1, x + size div 2 + baseWidth div 2, y + baseHeight);
  52.   FloodFill(x + size div 2, y + 2,BASEMENT_COLOR);
  53.  
  54.  
  55.  
  56.   //if (SPRUCE_SECTIONS_RANDOM) then
  57.      // sections:= random(MIN_SPRUCE_SECTIONS,MAX_SPRUCE_SECTIONS)
  58.   //else
  59.       sections:=3;
  60.      
  61.   for i:= 1 to sections do begin
  62.     drawTriangle(initialX, initialY, initialSize, color);
  63.     initialX:=initialX + round(initialSize * (1 - SPRUCE_DECAY_AMOUNT)) div 2;
  64.     initialY:=round(initialY - initialSize * SPRUCE_LAYER_COVER);
  65.     initialSize:=round(initialSize * SPRUCE_DECAY_AMOUNT);
  66.   end;
  67.  
  68. end;
  69.  
  70.  
  71. begin
  72.   randomize;
  73.   setSmoothingOff;
  74.   if(HORIZON_LOCK) then
  75.     Horizon := window.Center();  
  76.   //drawTriangle(100,100,30,clGreen);
  77.   drawSpruce(100,300,70,clGreen);
  78.  
  79.    //current := new RegularPolygonABC(200,200,50,3,clRed);
  80.    //current.BorderColor := clred;
  81. end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement