Alle Glastüren in meinem Gebäude sollen sich öffnen, sobald ich in der Nähe einer der Türen bin und "space" drücke.
Die Glasscheiben erzeuge ich bei Spielstart an der Position der Fensterrahmen. Diese sollen sich nun inklusive Glasscheibe öffnen und schließen.
Da die Türbewegungen komplexer sind als eine einfache Drehung habe ich die Modelle animiert.
Bei Tür Nr.1 klappt's, bei der 2. bewegt sich nur das Glas, aber nicht der Rahmen.
Es wäre toll, wenn mal jemand drüberschauen könnte...
Vielen Dank vorab !
Hier der code:
//********************************************************************************
//Variablen, Definitionen, usw. hier:
var Tuerzustand; // Tür ist am Anfang zu, 0 = zu, 1 = auf
var Animationspeed = 0.10;
var Animationauf; //Prozentwert der animation "auf"
var Animationzu; //Prozentwert der animation "zu"
define In_Reichweite,Flag1;
entity* Rahmen;
entity* Glas_Rahmen;
FONT Eurostile_10, <Eurost10.bmp>, 17, 16;//definiert Eurstile als Font
text Schrift_Rahmen //Definition Schriftzug Glasfassade
{
font = Eurostile_10;
string = "Fassadenelemente"; //Wiederzugebender Text
flags = transparent;
}
material mat_Glas // Materialdefinition für das Glas
{
ambient_red = 170;
ambient_green = 190;
ambient_blue = 170;
diffuse_red = 190;
diffuse_green = 210;
diffuse_blue = 190;
specular_red = 255;
specular_green = 255;
specular_blue = 255;
power = 5;
}
//********************************************************************************
//Funktionen hier:
function Glasfassade
{
Glas_Rahmen = me;
my.material = mat_Glas; //Materialzuordnung Glas
my.transparent = on;
while(Rahmen)
{
my.frame=Rahmen.frame;
//vec_set(my.x, Rahmen.x);
vec_set(my.pan, Rahmen.pan); //Glas soll sich bewegen wie der Rahmen und an dessen Position erscheinen
wait(1);
}
}
function Fassadeauf() //Animation des Rahmens
{
Animationauf = 0;
while (Animationauf <= 100)
{
ent_animate(Rahmen,"Auf",Animationauf,100);
Animationauf = (Animationauf+Animationspeed*time);
wait (1);
}
Tuerzustand = 1;
}
function Fassadezu() //Animation des Rahmens
{
Animationzu = 0;
while (Animationzu <= 100)
{
ent_animate(Rahmen,"Zu",Animationzu,100);
Animationzu = (Animationzu+Animationspeed*time);
wait (1);
}
Tuerzustand = 0;
}
//********************************************************************************
//Aktionen usw. hier:
action Profile_Glasfassade
{
Rahmen = me;
my.passable = on;
ent_create ("Glasfassade.mdl", my.x, Glasfassade); //Erzeuge das Glas
trace_mode = ignore_me + ignore_models + ignore_passents;
while (1)
{
if (
(trace (my.x, camera.x) == 0) // Wenn der Objektschwerpunkt auf dem Bildschirm sichtbar ist
&& // und
(vec_dist(my.x,camera.x)) < 100 // die Entfernung zur Camera < 100 quants = 5,00m ist
)
{
Schrift_Rahmen.visible = on; // zeige den Text
Schrift_Rahmen.pos_x = screen_size.x - 274; //16 Buchstaben * 17 Pixel Buchstabenbreite
my.In_Reichweite = on;
}
else
{
Schrift_Rahmen.visible = off; // zeige den Text nicht
my.In_Reichweite = off;
}
if (key_space && my.In_Reichweite == on && Tuerzustand == 0)
{
Fassadeauf();
}
if (key_space && my.In_Reichweite == on && Tuerzustand == 1 )
{
Fassadezu();
}
wait (1);
}
}