Понедельник, 21.07.2025, 23:15

Мой блог

Главная | Регистрация | Вход
Приветствую Вас Гость
RSS
Форма входа
Календарь
«  Ноябрь 2010  »
Пн Вт Ср Чт Пт Сб Вс
1234567
891011121314
15161718192021
22232425262728
2930
Поиск
Друзья сайта
Статистика

Дневник


Главная » 2010 » Ноябрь » 21 » Скрипт для дверей
Скрипт для дверей
14:39

Простейший скрипт для дверей:

float openingTime=2.0; // время открытия

float openingAngle=90.0; // угол поворота

float autocloseTime=5.0; // автоматически закроется через

integer steps=4; // колличество шагов при открытии


float omega=0.0;

vector axis;
rotation closedRot;
rotation openRot;

integer swinging;
integer open;

openDoor(integer yes)
{
vector useAxis=axis;
open=yes;

if(!yes)
useAxis=-axis;

llSetTimerEvent(openingTime/(float) steps);
llTargetOmega(useAxis,omega,1.0);
}

go()
{
if(swinging==0)
{
if(!open)
{
axis=llRot2Up(llGetLocalRot());
closedRot=llGetLocalRot();
openRot=llEuler2Rot(<0.0,0.0,openingAngle>*DEG_TO_RAD)*closedRot;
}
swinging=steps;
openDoor(!open);
}
}

rotation slerp(rotation source,rotation target,float amount)
{
return llAxisAngle2Rot(llRot2Axis(target/=source),amount*llRot2Angle(target))*source;
}

default
{
state_entry()
{
swinging=0;
open=FALSE;
omega=TWO_PI/360*openingAngle/openingTime;
llTargetOmega(ZERO_VECTOR,1.0,1.0);
}

touch_start(integer dummy)
{
go();
}

collision_start(integer dummy)
{
go();
}

timer()
{
if(swinging>0)
{
swinging--;
if(swinging!=0)
{
float amount=(float) swinging/(float) steps;
if(open)
amount=1.0-amount;
llSetLocalRot(slerp(closedRot,openRot,amount));
return;
}

llTargetOmega(axis,0.0,0.0);
if(open)
{
llSetLocalRot(openRot);
llSetTimerEvent(autocloseTime);
}
else
{
llSetLocalRot(closedRot);
llSetTimerEvent(0.0);
}
}
  else // автоматически закрываем
{
llSetTimerEvent(0.0);
openDoor(!open);
swinging=steps;
}
}
}
Просмотров: 2879 | Добавил: volldemar | Рейтинг: 5.0/1 |
Всего комментариев: 2
2 volldemar  
0
Самый простой вариант это 2 прима. 1- сама дверь. 2 - ось вращения, с которой потом слинковать дверь. получается что дверь будет вращаться вместе с осью.

P.S. Сначала выделяем ось вращения, потом дверь "с шифтом".  Жмем Ctrl + L

1 ГостьЯ  
0
Центра вращения по центру проема. Подскажите, как же его сместить к краю (чтобы дверь открывалась, как дверь).

Имя *:
Email *:
Код *:
Copyright MyCorp © 2025
Сайт управляется системой uCoz