Skip to content

motocalソース概要

ymkn edited this page Jul 4, 2018 · 1 revision

motocalソース概要

編成リスト生成処理概要

content.js

結果タブの内容はRootコンポーネント (@content.js) のrenderで呼び出されているResultListコンポーネント (@result.js) によって計算/描画されている。

ResultListコンポーネントには下記パラメータが与えられている:

  • this.state.profile: [ジータ]タブのデータ
  • this.state.armlist: [武器]タブのデータ
  • this.state.chara: [キャラ]タブのデータ
  • this.state.summon: [召喚石]タブのデータ
  • this.state.sortKey: [優先項目]ドロップダウンの項目
  • this.state.simulator: [simulator.jsのstate]
  • this.state.noResultUpdate: [自動更新]ボタンの状態

result.js

編成リストの各行はrenderで呼び出されているResultコンポーネントで生成されている。

Resultコンポーネントには下記パラメータが与えられている:

  • summonindex: 召喚石リストのindex
  • result[summonindex]: 後述
  • switcher: 表示項目のリスト
  • arm: this.props.armlist = [武器]タブのデータ
  • prof: this.props.profile = [ジータ]タブのデータ

resultはResultList.calculateResultメソッドで作られている。メソッド内のres変数が実体。

calculateResultが呼ばれているのは

  • componentWillReceiveProps: Reactの仕掛け。新しいpropsを受け取ると呼ばれる
  • handleEvent: Javascriptの仕掛け。グローバルなイベントハンドラみたいなもの。
  • forceResultUpdate: 計算結果を強制的に更新したい場合に呼ばれる。

であるが、いずれも引数はthis.propsである。つまり現状の各入力タブの値を使って再計算する、という意味に他ならない。

攻撃力計算

global_logic.js

calculateResultからcalcOneCombination -> calcBasedOneSummonの順で呼ばれる。ダメージ計算を行っているのはこのcalcBasedOneSummonメソッド。

背水渾身グラフ

result.js

result.jsに背水渾身グラフのModalが定義されている。実体はHPChartコンポーネント (@chart.js) で描画される。HPChartに渡されているパラメータは上述したResultListコンポーネントに渡されているものとほぼ同じだが、storedListが特徴的である。

storedList: { "combinations": [], "armlist": [], "names": [] },

storedListとは背水渾身グラフに表示する対象として[追加]された編成データの組み合わせ情報が含まれる。[追加]ボタンを押下した際のイベントハンドラの実体addHaisuiDataメソッドにてcombinationsにthis.state.result.result[summonid][id].armNumbers armlistにthis.props.armlistとして新しいsotredListの行が足されている。

chart.js

makeChartDataでチャート用データを生成している。背水渾身グラフではデータ生成のためにstoredListのほか、最新のprofilesummonarmlistを必要としている。

チャート自身はChartコンポーネント (@react-google-charts) によって描画されている。チャートのdataにはmakeChartData (=generateHaisuiData (@global_logic.js) の戻り値) によって生成されたthis.state.chartDataが渡されている。

ちなみにチャートは式に基づき描画されているのではなくgenerateHaisuiDataで生成されるHP1%刻みのダメージ値100個をプロットすることで描画されている。(各100地点でダメージ計算処理を実行する必要があるため、冒頭で書いたようにprofilesummonarmlistが必要になっている)

編成のピン止め機能の実現方式案

上記より、ダメージ計算およびチャート描画には現状は最新のprofileやsummon、armslistを参照してチャート用データを生成している。武器などを変更すると背水渾身グラフがリセットされてしまうのはprofileなどが現在の値しか保持できないため。ピン留め機能を実現するには、ピン留めした時点のprofileやsummon、armslistも併せて保存するしかけが必要で、かつ計算時にそれを参照できるようにする必要があり、非常に多くの処理に影響する。