Это лишь один из возможных способов. Другое дело, что в АГС есть методы и поудобнее.
пример можно?
КЛУБ из 1920 строк, внедряется в кабину десятью. Читай внимательнее.Клуб из 10 строчек
Команды не делал пока, т.к. не решено, нужно ли оно. Но можно сделать.Ну не верю я что Клуб из 10 строчек будет работать как реальный - К799/800 может?, К0? П, Л
Да. Мог видеть на скриншоте из ЭР2т, там 31км\ч горел, все по кривой.отработка кривой
Насколько я знаю, ДЛЛ только функции экспортирует. У тебя СОМ что ли?Никто с экспортированными ф-ями не работает - может поэтому все дико отреагировали на ДЛЛ?
Даю:давай
Hierarchical listing of all Trainz API classes:
AITrainScope
BrowserInterface
CabinControlSetting
CabinData
DefaultSteamCabinData
Command
Constructors
ControlSettingsManager
CustomCommand
AiHornMsg
DriverScheduleCommand
Flags
GSObject
Asset
GameObject
Browser
CabinControl
DriverCommand
DriverCommands
OnlineAccess
OnlineGroup
Scenario
Track
Train
TrainzGameObject
Library
MeshObject
Bogey
Cabin
DefaultLocomotiveCabin
DefaultSteamCabin
MapObject
SceneryWithTrack
Buildable
Industry
BaseIndustry
GenericPassengerStation
BasePortal
GenericIndustry
Crossing
Turntable
Trackside
Junction
Signal
TrackMark
Trigger
Vehicle
Locomotive
ModuleScript
DriverCharacter
ScenarioBehavior
ConditionalScenarioBehavior
HTMLPropertyHandler
BaseIndustryInfo
ConfigAssetHandler
AssetCheckListHandler
CheckListPropertyHandler
RadioButtonListHandler
EnumeratedAssetHandler
EnumeratedGameObjectHandler
EnumeratedPropertyHandler
EnumeratedMultiPropertyHandler
GenericBoolHandler
CheckBoxHandler
GenericIntNumberHandler
GenericStringHandler
ConsistHelperInfo
HTMLPropertyGroup
ConsistListHelper
ConfigAssetGroupHandler
CheckListGroupHandler
RadioButtonGroupHandler
GenericListHandler
TrainHelperInfo
VehicleHelperInfo
LoadHelperInfo
PassengerStationInfo
SpecificVehiclesInfo
DriversInfo
VehicleTypesInfo
VHISpecificVehiclesInfo
VHIDriversInfo
VHIVehicleTypesInfo
IndustryTrainController
KUID
KUIDList
LoadingReport
Menu
Permit
ProductFilter
ProductQueue
Soup
StringTable
TrainTimetable
GSTrackSearch
HTMLWindow
IndustryProcessInfo
IndustryProductInfo
IndustryProductInfoCollection
IndustryProductInfoComplete
IndustryProductInfoProcess
IndustryProductInfoQueues
IndustryProductInfoTracks
Interface
InterfaceAlert
InterfaceObjective
IPICProcess
IPICQueue
IPICTrack
ITCTrainCommand
JunctionBase
Junction
JunctionBaseGameObject
JunctionPermitInfo
LinkedData
LinkedList
Log
LogScope
Math
Message
Navigate
NumberValueInt
PropertyBrowser
PropertyObject
MeshObject
ScenarioBehavior
PropertyValue
Requirement
ResourceRequirement
Router
ScenarioStringTable
ScenarioSupport
Schedule
ScheduleHistoryRec
ShuntTrack
SignalBehaviour
StationBehaviour
Str
Timetable
TimetableState
TrackLoadInfo
TrainTimetableItem
TrainUtil
Trainz
VehicleDescriptor
World
World1
Это гипотетический пример. Когда с этой необходимостью реально столкнемся, будем искать более элегантный способ.И через 5 страниц выясняется что все спорили с тем же, чем сами пользуетесь.
У тебя я пока увидел только зайчатки физики. Широты возможностей по настройке объектов на карте, такой, какую я вижу в ТРС, пока не заметил.Давай по пунктам - это интересно!
Хорошо, такой пример. В АГС я запускаю поток, указав ключевое слово thread в объявлении функции, а в С++?Согласен.. Но это возможно при обоих подходах.
нехорошо так... Скорость ликвидации регулируется редуктором...else if (delta < -0.001) // ликвидация сверхзарядки постоянным темпом
m_pResEQ_Vol->setPressure( getEQ_P() - 150*fSec );
И через 5 страниц выясняется что все спорили с тем же, чем сами пользуетесь.
class positiont1
{
public int a;
public Vehicle VF;
public Vehicle VB;
};
positiont1 GetMyPosition(Train MyTrain)
{
//// Возвращет позицию вагона в составе в а
//// 0 - одиночный
//// 1 - Первый
//// 2 - В центре
//// 3 - Последний
//// Возвращает номер вагона в составе в b
//// обявляем переменные ////
Vehicle[] TrainVehiclesArray;
int ArraySize;
positiont1 result=new positiont1();
//// ------------------- ////
TrainVehiclesArray = MyTrain.GetVehicles(); //// получаем массив вагонов в составе
ArraySize = TrainVehiclesArray.size(); //// получаем количестово элементов массива(количество вагонгов в составе)
if (ArraySize == 1) //// вагон одиночный
{
result.a = 0;
}
else if (me == TrainVehiclesArray[0]) //// вагонов больше одного, этот вагон находиться первым в составе
{
result.a = 1;
result.VB=TrainVehiclesArray[1];
}
else if (me == TrainVehiclesArray[ArraySize-1]) //// вагонов больше одного, этот вагон находиться в конце состава
{
result.a = 3;
result.VF=TrainVehiclesArray[ArraySize-2];
}
else //// вагонов больше одного, этот вагон находиться в центре состава
{
result.a = 2;
int i=2;
while(i<(ArraySize-1) and me != TrainVehiclesArray[i])
i++;
result.VF=TrainVehiclesArray[i-1];
result.VB=TrainVehiclesArray[i+1];
}
return result;
}
thread void CouplerMonitor(void)
{
int pos;
Train MyTrain;
bool direction;
positiont1 position;
while (1) // чисто твой подход - перепроверяем каждые 3 секунды, сцеплены ли мсы с соседними вагонами
{
MyTrain = me.GetMyTrain();
if (MyTrain != null)
{
direction = me.GetDirectionRelativeToTrain();
position = GetMyPosition(MyTrain);
pos = position.a;
SetCoupler(pos, direction);
}
Sleep(3); //ожидание потоком своей очереди, 3 секунды
}
}
public void Init(void)
{
CouplerMonitor();// создание потока
}
void MyPosition(void)
{
Train MyTrain=me.GetMyTrain();
if(MyTrain!=null)
{
Vehicle[] TrainVehiclesArray = MyTrain.GetVehicles();
int a=me.GetMyNumber(TrainVehiclesArray);
int size_of_train=TrainVehiclesArray.size();
bool direction = (cast<Vehicle>me).GetDirectionRelativeToTrain();
if(size_of_train==1) //вагон одиночный
{
inFront=null;
inBack=null;
SetCoupler(0,direction);
}
else if(a==0) //// вагонов больше одного, этот вагон находиться первым в составе
{
inFront=null;
inBack=TrainVehiclesArray[1];
SetCoupler(1,direction);
}
else if(a<(size_of_train-1)) //// вагонов больше одного, этот вагон находиться в центре состава
{
inFront=TrainVehiclesArray[a-1];
inBack=TrainVehiclesArray[a+1];
SetCoupler(2,direction);
}
else //// вагонов больше одного, этот вагон находиться в конце состава
{
inFront=TrainVehiclesArray[size_of_train-2];
inBack=null;
SetCoupler(3,direction);
}
}
}
void CoupleHandler(Message msg) // обработчик сцепления
{
if(msg.src==me) //мы сцепились
{
me.MyPosition();
}
}
void DecoupleHandler(Message msg) // обработчик расцепления
{
if(msg.src==me or msg.src==inFront or msg.src==inBack) //мы, либо соседний вагон, расцепилсись
{
me.MyPosition();
}
}
public void Init(void)
{
me.AddHandler(me,"Vehicle","Coupled","CoupleHandler"); //добавление обработчика на сообщение (событие) "Coupled","CoupleHandler"
me.AddHandler(me,"Vehicle","Decoupled","DecoupleHandler"); //добавление обработчика на сообщение (событие) "Vehicle","Decoupled"
}
В АГС я запускаю поток, указав ключевое слово thread в объявлении функции, а в С++?
нехорошо так... Скорость ликвидации регулируется редуктором...
Так как истечение воздуха из уравнительного объема в атмосферу происходит все время при постоянном давлении в камере У3, то стабилизатор обеспечивает постоянный темп ликвидации сверхзарядного давления из уравнительного объема.
Темп ликвидации сверхзарядного давления из тормозной магистрали не зависит от наличия и величины утечки из нее.
// чисто твой подход - перепроверяем каждые 3 секунды, сцеплены ли мсы с соседними вагонами
под линуксом как-то так (год назад было, забыл уже...)
(некий поток)
{
fork();
if(ppId()!=0)
{
//инструкции наследнику
}
else
{
//инструкции родителю
}
free();
}
в трс:
объявление функции - "работа наследника"
thread void H(...)
{
//инструкции наследнику
}
(некая внешняя ф-ция либо поток-родитель)
{
H(...);
//инструкции родителю
}
Да, Вов, иди. Стабилизатором она регулируется. Без обид.нехорошо так... Скорость ликвидации регулируется редуктором...
иди уже читать книжки
break писал(а):Это лишь один из возможных способов. Другое дело, что в АГС есть методы и поудобнее.
пример можно?
Сообщения. Объект может подписаться на определенные сообщения. При его получении будет вызвана заданная функция. Также любой поток может остановить свое выполнение до получения определенного сообщения.
количество зубьев на валах
Если почитать форум и лицензионное соглашение к EU07, выяснится, что игра "полусвободная", т.е. на открытом движке, но из неё нельзя "воровать" модели, текстуры и т.п.
Вот этого нет, зато есть коэффициент отношения оборотов движков к оборотам КП.
Я в последнее время нахожу полином, описывающий тяговую характеристику, и силу считаю через него, очень удобно.Даже если умудриться сделать так (а не ломанными линиями как ты их назвал) то надежда на то что кто-то сделает дополнение - свой ПС - будет равна 0!
Вернуться в Другие ЖД симуляторы
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2