敵の発見
PlayersクラスのcanSeeEnemy等を用いる
Botのメインクラスのメンバ「players」を使う(正確には親クラスから継承してる)
※必要なのはArrayList<Player>の返値であるのに、上記のではboolean値を返すので違うのでは?
各種行動
getAct().act(対応するクラスのインスタンス)を用いる。
対応するクラスのインスタンスは以下の通り
撃つのをやめる:new StopShooting
撃つ :new Shoot().setTarget(エネミーのID)
※特殊攻撃の場合はsetAltする必要有り
止まる :new Stop()
回転 :new Rotate().setAmount(どれだけ回転するか)
※引数がプラスだと時計回り
アイテムに移動: new Move().setFirstLocation(行きたいアイテム.getLocation());
ジャンプ :new Jump()
※ダブルジャンプの場合はsetDoubleJumpをする事
ドッジ :new Dodge().setDirection(行きたい方向);
※方向は正規化
アイテムのリストを取る方法
1.空のLinkedListを用意する。
例) List<Item> healths = new LinkedList();
2.欲しいアイテムタイプのものを追加する
例)healths.addAll(items.getSpawnedItems(ItemType.HEALTH_PACK).values());
状況判断 (旧センサーの一部)
Sensesクラスを使用。Sensesがこれにあたる
衝突(敵、地形)に関する情報
ボットやプレーヤーの死亡
ダメージやその原因
アイテム取得
当たりそうな弾丸
アドレナリンの状態
Hitさせてるか(当ててるか)
撃っているか
※Onceがついているほうじゃないと一定期間trueが変える仕様になっているので注意。
Pogamut2004ではOnceに対応するのをこちらで作っていた。
※アドレナリンは旧バージョンでは非対応だったので今後入れます。
NavPointやアイテムのList作成
NavPointの場合以下のようにする
getWorldView().getAll(NavPoint.class).valueを使うCollectionクラスで帰ってくる。
navPoints.addAll(上のやつ);で作る
※ navPointsは最初、何も入っていない状態である事
※ アイテムの場合はItem.classにして中身を判断する必要があるかも?(調査中)
リストの中から一番(2番目に)近いものを取得する
この処理は計算量が多いので、注意
DistanceUtilsクラスを用いる。
(Staticなメソッドが多いのでいちいちインスタンスは作らなくて良い事が多い)
例)2番目に近いNavPointを探す場合
DistanceUtils.getNearestVisible(getWorldView().getAll(NavPoint.class).values(), self.getLocation());
※計算量を減らすため第一引数の部分はBotを生成した時にあらかじめ作っておく事
※2番目は使用するメソッドがgetsecondNearestVisibleとなる
※例外を入れたい場合はfiltered
とあるNavPointから行く事ができるNavPointを取得したい
現在地をnavとすると
1.nav.getOutgoingEdges()で
Mapクラス(UnrealIdとNavPointNeighbourLinkクラスが関連付けられている)で取得可能。
2.その後それぞれのNavPointNeighbourLinkクラスの部分に対してgetToNavPoint()をするとそれぞれのリンクの行き先=次のNavPointが取得できる
3.上の方法で次の行き先を示すLinkedList<NavPoint>に入れてやればいい
大体こんな感じだと思う
for (NavPointNeighbourLink link : probing.getOutgoingEdges().values()) {
neighnavs.add(link.getToNavPoint());
}
武器変更
weaponry(Weaponryクラス)のchangeWeapon()を使う
所持武器情報取得
weaponry(Weaponryクラス)のメソッドを使う
Ray(センサー)で壁との距離を知りたい
1.最初からついているセンサーが邪魔な場合は解除します。
getAct().act(new RemoveRay("All"));
2.センサーを追加します
raycasting.createRayを使用します。
引数は順にID,方向,長さ、fastTraceを使用するか、FloorCorrectionを追加するか、キャラクターから出るか)です。
3.センサーを取得します
raycasting.getRay(ID)でAutoTraceRayクラスのインスタンスを取得します
4.結果を取得します
ぶつかっているかは.isResult
場所はhitLocation
最終更新:2010年06月22日 11:36