Oui, et même avec ça, tu ne pourrais pas encore passer depuis de l'Herbe vers un Mon herbe !
Pour ça il faut jouer sur Kind = pmkArriveAt en plus de pmkLeaveFrom, en remplaçant Dest par Src dans les tests de la première ligne.
unit AAA;
uses
FunLabyBase;
components
MyGrass: TMyGrass;
field TMyGrass
name 'Mon herbe';
image 'GreenGrass';
on message Plank do
var
Map: TMap;
begin
Map := Master.Map['MainMap'];
if Kind = pmkLeaveFrom then
begin
Result := ((Map[Dest].Field is TMyGrass) or (Map[Dest].Field is TGround)) and
(Map[Src].Obstacle = nil) and (Map[Dest].Obstacle = nil);
end;
if Kind = pmkArriveAt then
begin
Result := ((Map[Src].Field is TMyGrass) or (Map[Src].Field is TGround)) and
(Map[Src].Obstacle = nil) and (Map[Dest].Obstacle = nil);
end;
end;
end;
end.
unit AAA;
uses
FunLabyBase;
components
MyWall: TMyWall;
field TMyWall
name 'Mon mur';
image 'Fields/FireWall';
on Entering do
begin
inherited;
Cancel;
end;
end;
end.
on Entering do
begin
inherited;
Player.ShowMessage('Tu n''es pas un fantôme, impossible de traverser ce mur !');
Cancel;
end;
if KeyPressed then
Player.ShowMessage('...');
DerF_44Oui, je suis d'accord. FunLabyrinthe 5 a été un énorme progrès par rapport aux versions 1-4, en matière de possibilités. Et les choses qui extrêmement difficiles (mais possibles et faites) à faire ont reçus un support dédié dans FL 5, ce qui les rend assez simples à réaliser.
C'est d'ailleurs un petit paradoxe de FunDelphi :
Avec quelques notions, ce language permet de faire des choses relativement complexes avec du code relativement simple,
mais là, pour le coup, afin de juste supprimer une carctéristique particulière (les fondus entre terrain et eau)
il est nécessaire d'écrire 15 lignes !!!
unit AAA;
uses
FunLabyBase;
components
MyWall: TMyWall;
field TMyWall
name 'Mon mur';
image 'Fields/FireWall';
on Entering do
begin
inherited;
if KeyPressed then
Player.ShowMessage('Tu n''es pas un fantôme, impossible de traverser ce mur !');
Cancel;
end;
end;
end.
field TMyWall
name 'Mon mur';
image 'Fields/FireWall';
property NbOfTouched: Integer;
on Entering do
begin
inherited;
if KeyPressed then
begin
if NbOfTouched = 0 then
Player.ShowMessage('Tu n''es pas un fantôme, impossible de traverser ce mur !');
NbOfTouched := NbOfTouched + 1;
end;
Cancel;
end;
end;
on Entering do
begin
inherited;
if KeyPressed then
begin
if NbOfTouched = 0 then
Player.ShowMessage('Tu n''es pas un fantôme, impossible de traverser ce mur !');
NbOfTouched := NbOfTouched + 1;
if NbOfTouched = 5 then
NbOfTouched := 0;
end;
Cancel;
end;
if LaCondition then
Une seule ligne de code exécutée si LaCondition est vraie;
if LaCondition then
begin
Plusieurs lignes de code exécutées si LaCondition est vraie;
Plusieurs lignes de code exécutées si LaCondition est vraie;
end;
unit AAA;
uses
FunLabyBase;
components
MagicGrass: TMagicGrass;
field TMagicGrass
name 'Herbe magique';
image 'Fields/Meadow';
on Exited do
begin
Square := Water;
end;
end;
end.
unit AAA;
uses
FunLabyBase;
components
SecretGoldenBlock: TSecretGoldenBlock;
obstacle TSecretGoldenBlock
name 'Bloc or caché';
image 'Fields/Wall';
on AfterConstruction do
begin
inherited;
EditVisualTag := 'or';
end;
on Pushing do
begin
inherited;
if not KeyPressed then
Exit;
Square.Obstacle := nil;
Square.Obstacle := GoldenBlock;
end;
end;