Xaumina
			  fév. 27, 2011 10:04:42
		 	 
			
				J'aimerai parler d'un problème qui ne doit pas m'embêter tout seul : et je sais que c'est un inconvénient des quatre composantes d'une case, mais j'aimerai savoir si on pourrait arranger le problème.
Je prends un exemple car je ne saurai décrire mon problème : mettons qu'un créateur de labyrinthes fasse une sorte de petit marché, avec des produits sur la table (qui sont donc soit des effets, soit des outils), la table étant un obstacle. La table cache les produits, et le joueur ne les voit pas, ce qui assez embêtant. Je demande donc : pourrait-t-on faire pour chaque types de composant (sauf pour les terrains) deux nouvelles propriétés, que le créateur règlent lui-même, par exemple : HideEffects, HideObjects et HideObstacles ?
Si le créateur décide qu'un obstacle ne cache pas l'effet en-dessous de lui, il règle un peu la propriété HideEffects, et voilà. Et s'il veut que le même obstacle ne cache pas les outils en-dessous de lui, il va aller voir la propriété HideObjects.
Je ne sais pas si c'est possible, par contre.
			
		 
		
			
			  intello
			  fév. 27, 2011 13:20:01
		 	 
			
				Edit : sjrd : désolé j'ai fait une fausse manip et j'ai perdu le texte de ce message. Voici le code que intello proposait :
uses
  FunLabyBase;
components
  Table: TTable;
obstacle TTable(TBlock)
  name 'Table';
  image 'Furniture/Table';
  on AfterConstruction do
  begin
    inherited;
    HideEffectAndTool := False;
  end;
  on Pushing do
  begin
    inherited;
    if Square.Tool <> nil then
      Square.Tool.Find(Context)
    else
      Player.ShowMessage('Il n''y a rien sur cette table.');
  end;
end;
end.
			 
		
			
			  sjrd
			  fév. 27, 2011 14:50:16
		 	 
			
				Je crois que c'est justement ce que Xaumina voulait : avoir les outils 
au-dessus de la table.
Voilà une idée possible :
uses
  FunLabyBase;
components
  Table: TTable;
obstacle TTable(TBlock)
  name 'Table';
  image 'Furniture/Table';
  on AfterConstruction do
  begin
    inherited;
    HideEffectAndTool := True;
  end;
  on DoDraw do
  begin
    inherited;
    if Map[Position].Tool <> nil then
      Map[Position].Tool.Draw(Context);
  end;
  on Pushing do
  begin
    inherited;
    if Square.Tool <> nil then
      Square.Tool.Find(Context)
    else
      Player.ShowMessage('Il n''y a rien sur cette table.');
  end;
end;
end.
			 
		
			
			  Xaumina
			  fév. 27, 2011 21:25:58
		 	 
			
				Merci, c'est ce que je voulais. mais la formule ne marche pas, le compilateur m'indique qu'il ne trouve pas l'indentificateur Position.
			
		 
		
			
			  sjrd
			  fév. 28, 2011 00:07:20
		 	 
			
				C'est c'est Pos à la place de Position.
			
		 
		
			
			  Xaumina
			  fév. 28, 2011 17:44:42
		 	 
			
				Merci encore (pour avoir fait LifeAndMonsters et MovingMonsters aussi).
Mais cette fois c'est mieux encore : l'ordinateur ne trouve plus Jouer à Funlabyrinthe.Ink et ne veut plus m'ouvrir mon labyrinthe.
C'est arrivé comme ça : j'ai modifié Position par Pos, et ensuite mis un point entre Square et Tool. Puis j'ai compilé, et il m'a fermé mon labyrinthe avec le message : "An error occurred in the application."
J'ai envoyé mon labyrinthe mais, maintenant que j'y pense, j'aurais surtout dû envoyer ma source.
			
		 
		
			
			  sjrd
			  fév. 28, 2011 19:01:14
		 	 
			
				Je crois que ça correspond à un bug que j'ai corrigé déjà, dans ma version de travail.
Mais il n'est pas bloquant : as-tu essayé de simplement cliquer sur Continuer puis utiliser le Ouvrir récent pour rouvrir ton labyrinthe ?
Ou encore relancer l'éditeur et ouvrir ton labyrinthe ?
Parce que ce bug n'apparaît que quand on utiliser le bouton Recharger tout (Ctrl+Maj+F9).
Edit : sinon oui je veux bien la source aussi, ça m'aidera à résoudre le problème, si ce n'est pas ça.
			
		 
		
			
			  Xaumina
			  fév. 28, 2011 22:08:28
		 	 
			
				Je la poste ici.
			
		 
		
			
			  sjrd
			  mars 1, 2011 00:43:30
		 	 
			
				Voici l'unité corrigée.
Pour info j'ai changé :
  on DoDraw do
  begin
    inherited;
    if Map[Pos].Tool <> nil then
      Map[Pos].Tool.Draw(Context);
  end;
en :
  on DoDraw do
  begin
    inherited;
    if (Map <> nil) and (Map[Pos].Tool <> nil) then
      Map[Pos].Tool.Draw(Context);
  end;
Donc c'était de ma faute, dans le code que je te proposais.
Il te suffit d'écraser ton source Namini.fnd, puis de faire Fichier|Tour recompiler, et tu pourras rouvrir ton labyrinthe.
			
 
		
			
			  Xaumina
			  mars 1, 2011 18:05:49
		 	 
			
				sjrd 
 Il te suffit d'écraser ton source Namini.fnd, puis...
L'ecraser ? Le supprimer ?
J'ai bien tout recompilé, mais le même message s'affiche.