File: mainf.pas

package info (click to toggle)
castle-game-engine 6.4%2Bdfsg1-2
  • links: PTS, VCS
  • area: main
  • in suites: buster
  • size: 194,520 kB
  • sloc: pascal: 364,585; ansic: 8,606; java: 2,851; objc: 2,601; cpp: 1,412; xml: 851; makefile: 725; sh: 563; php: 26
file content (133 lines) | stat: -rw-r--r-- 4,623 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
unit MainF;

{$mode objfpc}{$H+}

interface

uses
  Classes, SysUtils, FileUtil, LResources, Forms, Controls, Graphics, Dialogs,
  CastleControl, CastleControls, CastleOnScreenMenu;

type
  TForm1 = class(TForm)
    Browser: TCastleControl;
    OnScreenMenu1: TCastleOnScreenMenu;
    SampleButton: TCastleButton;
    SampleImage: TCastleImageControl;
    SampleImageAlpha: TCastleImageControl;
    ButtonImageFixSize1: TCastleButton;
    ButtonImageFixSize2: TCastleButton;
    ButtonImageFixSize3: TCastleButton;
    ButtonImageFixSize4: TCastleButton;
    ButtonImage1: TCastleButton;
    ButtonImage2: TCastleButton;
    ButtonImage3: TCastleButton;
    ButtonImage4: TCastleButton;
    procedure FormCreate(Sender: TObject);
    procedure BrowserResize(Sender: TObject);
    procedure OnScreenMenu1Click(Sender: TObject);
    procedure SampleButtonClick(Sender: TObject);
  end;

var
  Form1: TForm1;

implementation

uses CastleSceneCore, CastleUtils, CastleImages, CastleVectors,
  CastleControlsImages, CastleUIControls;

{ TForm1 --------------------------------------------------------------------- }

procedure TForm1.FormCreate(Sender: TObject);
var
  Edit: TCastleEdit;
begin
  { For simplicity, we just load 3D model from hardcoded path. }
  Browser.Load('../../3d_rendering_processing/data/bridge_final.x3dv');
  Browser.MainScene.Spatial := [ssRendering, ssDynamicCollisions];
  Browser.MainScene.ProcessEvents := true;

  { We can customize the look of all standard 2D controls by changing Theme.
    Below we change the tooltip image to have rounded corners,
    using a predefined TooltipRounded image from CastleControlsImages
    unit. You could also use load and use your own image,
    e.g. by LoadImage. }
  Theme.Images[tiTooltip] := TooltipRounded;
  Theme.Corners[tiTooltip] := Vector4Integer(9, 9, 9, 9);

  { Thanks to using this button as a TUIControl descendant
    (placing it on Browser.Controls list), VRML scene sensors
    (like TouchSensor) will not intercept mouse clicks. That is, button
    obscures anything clickable on VRML scene (like TouchSensor) underneath.

    (If you would like to change this, you can set SampleButton.ExlusiveEvents
    to false.)

    (Images (TCastleImageControl) actually also obscure scene underneath, but since
    they do not handle any keys or mouse by default, they let themn through
    to 3d scene. This could be changed by overriding their
    TCastleImageControl.Press etc.) }

  Browser.Controls.InsertFront(SampleButton);
  Browser.Controls.InsertFront(SampleImage);
  Browser.Controls.InsertFront(SampleImageAlpha);
  Browser.Controls.InsertFront(ButtonImageFixSize1);
  Browser.Controls.InsertFront(ButtonImageFixSize2);
  Browser.Controls.InsertFront(ButtonImageFixSize3);
  Browser.Controls.InsertFront(ButtonImageFixSize4);
  Browser.Controls.InsertFront(ButtonImage1);
  Browser.Controls.InsertFront(ButtonImage2);
  Browser.Controls.InsertFront(ButtonImage3);
  Browser.Controls.InsertFront(ButtonImage4);
  Browser.Controls.InsertFront(OnScreenMenu1);

  { load button's images. Actually, load it only once, and use the same
    reference (leaving OwnsImage = false) on other buttons. }
  ButtonImageFixSize1.Image := LoadImage('sample_button_icon.png');
  ButtonImageFixSize1.OwnsImage := true;
  ButtonImageFixSize2.Image := ButtonImageFixSize1.Image;
  ButtonImageFixSize3.Image := ButtonImageFixSize1.Image;
  ButtonImageFixSize4.Image := ButtonImageFixSize1.Image;

  ButtonImage1.Image := ButtonImageFixSize1.Image;
  ButtonImage2.Image := ButtonImageFixSize1.Image;
  ButtonImage3.Image := ButtonImageFixSize1.Image;
  ButtonImage4.Image := ButtonImageFixSize1.Image;

  { Load images. We do not set URL at design-time,
    as we want to use relative paths, which may be invalid at design-time
    (depends on Lazarus current dir). }
  SampleImage.URL := 'sample_image.png';
  SampleImageAlpha.URL := 'sample_image_with_alpha.png';

  OnScreenMenu1.Add('one', @OnScreenMenu1Click);
  OnScreenMenu1.Add('two', @OnScreenMenu1Click);
  OnScreenMenu1.Add('three', @OnScreenMenu1Click);

  Edit := TCastleEdit.Create(Self);
  Edit.Anchor(vpTop, -10);
  Edit.Anchor(hpRight, -10);
  Edit.Width := 200;
  Browser.Controls.InsertFront(Edit);
end;

procedure TForm1.BrowserResize(Sender: TObject);
begin
  SampleButton.Width := Browser.Width - 20;
end;

procedure TForm1.OnScreenMenu1Click(Sender: TObject);
begin
  ShowMessage(Format('Clicked menu item %d.', [OnScreenMenu1.CurrentItem]));
end;

procedure TForm1.SampleButtonClick(Sender: TObject);
begin
  ShowMessage('Button clicked !');
end;

initialization
  {$I mainf.lrs}
end.