Nasal スクリプト集

概要

rocking_nimitz.nas は空母 Nimitz のピッチ方向/ロール方向の揺れを再現することで、揺れる空母上での離着陸を体験する為のスクリプトです。あくまでも疑似体験的なものであるため、機体が甲板上に沈み込む等リアリティーに欠ける部分もありますが、とりあえず楽しんでみてください。

インストール方法

添付ファイルのソース (rocking_nimitz.nas) を ~/.fgfs/Nasal/rocking_nimitz.nas として保存してください (Windows の場合は C:/Documents and Settings/<ユーザ名>/Applciation Data/flightgear.org/Nasal/rokicing_nimitz.nas)。 あとは FlightGear を起動するだけで準備完了です。特に機体/空母側の変更は必要ありません。

使用方法

空母に Nimitz を指定して FlightGear を起動すれば Nimitz の揺れが有効になります。

処理概要

風速に応じて Nimitz のピッチ角度をピッチ周期 pitch_interval, ±ピッチ角 max_pitch のサインカーブで変化させます。ロールも同様に 周期 roll_interval, ロール角 ±max_roll のサインカーブで変化させます。1秒毎のタイマーで1秒後の角度を指定し、 interpolate で1秒間掛けてその角度に徐々に変化させるようにしています。最大ピッチを 0.5 以上にすると75%の確率で着陸時にクラッシュします。周期や最大角(limit_pitch, limit_roll)を変えてみるとどれだけ揺れるかが判ると思います。

更新履歴

  • 2008/08/02: wind_threshold を 40 に変更
  • 2008/07/31: 風速に応じて max_pitch, max_roll を計算する calc_angles を追加
  • 2008/07/30 : 初版

ソース

このソースは参考に表示しているものです。ダウンロードは下の添付ファイルをクリックして保存してください。

###############################################################################
# rocking_nimitz.nas by Tatsuhiro Nishioka
# - Simulates a brief pitching / rolling deck
#
# 2008/07/30
# Copyright (C) 2008 Tatsuhiro Nishioka (tat dot fgmacosx at gmail dot com)
# This file is licensed under the GPL license version 2 or later.
#
################################################################################

var limit_pitch = 0.45;
var limit_roll = 1.0;
var wind_threshold = 40;

var max_pitch = 0.45;
var max_roll = 0.9;
var pitch_cycle = 3;
var roll_cycle = 4;

var calc_angles = func {
    var wind_speed = getprop("/environment/wind-speed-kt");
    if (wind_speed > wind_threshold) {
      wind_speed = wind_threshold;
    }
    max_pitch = wind_speed / wind_threshold * limit_pitch;
    max_roll = wind_speed / wind_threshold * limit_roll;
}

var rock_nimitz = func {
    calc_angles();
    var sec = getprop("/sim/time/elapsed-sec");
    var pitch = math.sin(sec / pitch_cycle * 3.14) * max_pitch;
    var roll = math.sin(sec / roll_cycle * 3.14 ) * max_roll;
    interpolate("/ai/models/carrier[0]/orientation/pitch-deg", pitch, 1);
    interpolate("/ai/models/carrier[0]/orientation/roll-deg", roll, 1);
    settimer(func { rock_nimitz(); }, 1 );
}

_setlistener("/sim/signals/fdm-initialized", func { rock_nimitz(); });

添付ファイル: filerocking_nimitz.nas 1271件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2008-08-03 (日) 06:01:42 (5743d)