トリガーの大きさでフェンスを自動生成するスクリプトのコード公開編
この記事で言ってたやつを今更公開
question-and-life.hateblo.jp
コード内のコメントアウトは気にしないで消してもらってOK。
相変わらずのスパゲティコード。
個人的な備忘録用。
トリガーの端に沿ってフェンスが作られる。
地雷原から保護するためにワイヤーフェンスを設置し、地雷注意の看板が設置される。
以上
トリガーのテキスト欄にGEN_MineFenceと書いて適当なサイズのトリガーを設置するだけ。
あとはこのsqfを実行させれば動く。
入り口とかはない。解説載せるほどじゃないからコード読んだらどんな処理かは概ね分かるはず。
入り口とか色々作りたかったら分かる人は色々編集してみて。
{ if (triggerText _x == "GEN_MineFence")then { _x spawn { _Trigger = (triggerArea _this); _TrgSizeX = _Trigger select 0; _TrgSizeY = _Trigger select 1; _TrgRad = _Trigger select 2; _TrgShape = _Trigger select 3;//True Square _CenterPos = getPos _this; _CenterPosX = _CenterPos select 0; _CenterPosY = _CenterPos select 1; if(_TrgRad < 0)then{_TrgRad = 360 + _TrgRad}; _MineSizeX = _TrgSizeX * 2; _MineSizeY = _TrgSizeY * 2; _TrgRPosX = _CenterPosX + _TrgSizeX; _TrgLPosX = _CenterPosX - _TrgSizeX; _TrgTPosY = _CenterPosY + _TrgSizeY; _TrgBPosY = _CenterPosY - _TrgSizeY; _cos = cos _TrgRad; _sin = sin _TrgRad; deleteVehicle _this; _MineMark = ["Land_Sign_MinesTall_English_F","Land_Sign_MinesDanger_English_F"]; _SetPosX = _TrgLPosX + 1.5; _SetPosY = _TrgBPosY + 1.5; _TrgFromDis = 1.8; _MarkPosR = _TrgRPosX + _TrgFromDis; _MarkPosL = _TrgLPosX - _TrgFromDis; _MarkPosT = _TrgTPosY + _TrgFromDis; _MarkPosB = _TrgBPosY - _TrgFromDis; _MarkRadR = _TrgRad + 90; _MarkRadL = _TrgRad + 270; _MarkRadT = _TrgRad + 180; _MarkRadB = _TrgRad + 0; {if(_x > 360)then{_x = 360 - _x}}forEach[_MarkRadR,_MarkRadL,_MarkRadT,_MarkRadB]; _YsinXcos = _CenterPosX - _CenterPosY * _sin + _CenterPosX * _cos; _YcosXsin = _CenterPosY - _CenterPosY * _cos - _CenterPosX * _sin; _BoardTPosRX = (_MarkPosT * _sin) - (_MarkPosR * _cos) + _YsinXcos; _BoardTPosRY = (_MarkPosT * _cos) + (_MarkPosR * _sin) + _YcosXsin; _BoardBPosRX = (_MarkPosB * _sin) - (_MarkPosR * _cos) + _YsinXcos; _BoardBPosRY = (_MarkPosB * _cos) + (_MarkPosR * _sin) + _YcosXsin; _BoardTPosR = [_BoardTPosRX ,_BoardTPosRY ,0]; _BoardBPosR = [_BoardBPosRX ,_BoardBPosRY ,0]; //_BoardT = (selectRandom _MineMark) createVehicle _BoardTPosR; //_BoardT setPosATL _BoardTPosR; //_BoardT setDir _MarkRadT; //_BoardB = (selectRandom _MineMark) createVehicle _BoardBPosR; //_BoardB setPosATL _BoardBPosR; //_BoardB setDir _MarkRadB; _countBoardX = Ceil (_TrgSizeX * 2 / 12); for [{ _i = 0 }, { _i < _countBoardX}, { _i = _i + 1 }] do { _BoardTPosLX = (_MarkPosT * _sin) - (_SetPosX * _cos) + _YsinXcos; _BoardTPosLY = (_MarkPosT * _cos) + (_SetPosX * _sin) + _YcosXsin; _BoardBPosLX = (_MarkPosB * _sin) - (_SetPosX * _cos) + _YsinXcos; _BoardBPosLY = (_MarkPosB * _cos) + (_SetPosX * _sin) + _YcosXsin; _BoardTPosX = [_BoardTPosLX ,_BoardTPosLY ,0]; _BoardBPosX = [_BoardBPosLX ,_BoardBPosLY ,0]; _BoardT = (selectRandom _MineMark) createVehicle _BoardTPosX; _BoardT setPosATL _BoardTPosX; _BoardT setDir _MarkRadT; _BoardB = (selectRandom _MineMark) createVehicle _BoardBPosX; _BoardB setPosATL _BoardBPosX; _BoardB setDir _MarkRadB; _SetPosX = _SetPosX + 12; }; _BoardRPosTX = (_MarkPosT * _sin) - (_MarkPosR * _cos) + _YsinXcos; _BoardRPosTY = (_MarkPosT * _cos) + (_MarkPosR * _sin) + _YcosXsin; _BoardLPosTX = (_MarkPosT * _sin) - (_MarkPosL * _cos) + _YsinXcos; _BoardLPosTY = (_MarkPosT * _cos) + (_MarkPosL * _sin) + _YcosXsin; _BoardYPosRT = [_BoardRPosTX ,_BoardRPosTY ,0]; _BoardYPosLT = [_BoardLPosTX ,_BoardLPosTY ,0]; //_BoardR = (selectRandom _MineMark) createVehicle _BoardYPosRT; //_BoardR setPosATL _BoardYPosRT; //_BoardR setDir _MarkRadR; //_BoardL = (selectRandom _MineMark) createVehicle _BoardYPosLT; //_BoardL setPosATL _BoardYPosLT; //_BoardL setDir _MarkRadL; _countBoardY = Ceil (_TrgSizeY * 2 / 12); for [{ _i = 0 }, { _i < _countBoardY}, { _i = _i + 1 }] do { _BoardRPosX = (_SetPosY * _sin) - (_MarkPosR * _cos) + _YsinXcos; _BoardRPosY = (_SetPosY * _cos) + (_MarkPosR * _sin) + _YcosXsin; _BoardLPosX = (_SetPosY * _sin) - (_MarkPosL * _cos) + _YsinXcos; _BoardLPosY = (_SetPosY * _cos) + (_MarkPosL * _sin) + _YcosXsin; _BoardYPosR = [_BoardRPosX ,_BoardRPosY ,0]; _BoardYPosL = [_BoardLPosX ,_BoardLPosY ,0]; _BoardR = (selectRandom _MineMark) createVehicle _BoardYPosR; _BoardR setPosATL _BoardYPosR; _BoardR setDir _MarkRadR; _BoardL = (selectRandom _MineMark) createVehicle _BoardYPosL; _BoardL setPosATL _BoardYPosL; _BoardL setDir _MarkRadL; _SetPosY = _SetPosY + 12; }; _Fenceobj = selectRandom ["Land_Razorwire_F"]; _FenceLeng = 8; _FenceHalfLeng = _FenceLeng / 2; _FencePosR = _TrgRPosX - _FenceHalfLeng; _FencePosX = _TrgLPosX + _FenceHalfLeng; _FencePosT = _TrgTPosY - _FenceHalfLeng; _FencePosY = _TrgBPosY + _FenceHalfLeng; _RotateTPosRX = (_TrgTPosY * _sin) - (_FencePosR * _cos) + _YsinXcos; _RotateTPosRY = (_TrgTPosY * _cos) + (_FencePosR * _sin) + _YcosXsin; _RotateBPosRX = (_TrgBPosY * _sin) - (_FencePosR * _cos) + _YsinXcos; _RotateBPosRY = (_TrgBPosY * _cos) + (_FencePosR * _sin) + _YcosXsin; _RotateTPosR = [_RotateTPosRX ,_RotateTPosRY ,0]; _RotateBPosR = [_RotateBPosRX ,_RotateBPosRY ,0]; _countX = ceil ((_TrgSizeX * 2 - _FenceLeng) / _FenceLeng); _countY = ceil ((_TrgSizeY * 2 - _FenceLeng) / _FenceLeng); { _Fence = _Fenceobj createVehicle _x; _Fence setPosATL _x; _Fence setDir _TrgRad; }forEach [_RotateTPosR,_RotateBPosR]; for [{ _i = 0 }, { _i < _countX}, { _i = _i + 1 }] do { _RotateTPosLX = (_TrgTPosY * _sin) - (_FencePosX * _cos) + _YsinXcos; _RotateTPosLY = (_TrgTPosY * _cos) + (_FencePosX * _sin) + _YcosXsin; _RotateBPosLX = (_TrgBPosY * _sin) - (_FencePosX * _cos) + _YsinXcos; _RotateBPosLY = (_TrgBPosY * _cos) + (_FencePosX * _sin) + _YcosXsin; _RotateTPosX = [_RotateTPosLX ,_RotateTPosLY ,0]; _RotateBPosX = [_RotateBPosLX ,_RotateBPosLY ,0]; { _Fence = _Fenceobj createVehicle _x; _Fence setPosATL _x; _Fence setDir _TrgRad; }forEach [_RotateTPosX,_RotateBPosX]; _FencePosX = _FencePosX + _FenceLeng; }; _TrgRad = _TrgRad + 90; _RotateRPosTX = (_FencePosT * _sin) - (_TrgRPosX * _cos) + _YsinXcos; _RotateRPosTY = (_FencePosT * _cos) + (_TrgRPosX * _sin) + _YcosXsin; _RotateLPosTX = (_FencePosT * _sin) - (_TrgLPosX * _cos) + _YsinXcos; _RotateLPosTY = (_FencePosT * _cos) + (_TrgLPosX * _sin) + _YcosXsin; _RotateYPosRT = [_RotateRPosTX ,_RotateRPosTY ,0]; _RotateYPosLT = [_RotateLPosTX ,_RotateLPosTY ,0]; { _Fence = _Fenceobj createVehicle _x; _Fence setPosATL _x; _Fence setDir _TrgRad; }forEach [_RotateYPosRT ,_RotateYPosLT]; for [{ _i = 0 }, { _i < _countY }, { _i = _i + 1 }] do { _RotateRPosX = (_FencePosY * _sin) - (_TrgRPosX * _cos) + _YsinXcos; _RotateRPosY = (_FencePosY * _cos) + (_TrgRPosX * _sin) + _YcosXsin; _RotateLPosX = (_FencePosY * _sin) - (_TrgLPosX * _cos) + _YsinXcos; _RotateLPosY = (_FencePosY * _cos) + (_TrgLPosX * _sin) + _YcosXsin; _RotateYPosR = [_RotateRPosX ,_RotateRPosY ,0]; _RotateYPosL = [_RotateLPosX ,_RotateLPosY ,0]; { _Fence = _Fenceobj createVehicle _x; _Fence setPosATL _x; _Fence setDir _TrgRad; }forEach [_RotateYPosR ,_RotateYPosL]; _FencePosY = _FencePosY + _FenceLeng; }; };//spawn End };//GEN Trigger End