-
Notifications
You must be signed in to change notification settings - Fork 0
motocalソース概要
結果タブの内容は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
: [自動更新]ボタンの状態
編成リストの各行は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
である。つまり現状の各入力タブの値を使って再計算する、という意味に他ならない。
calculateResult
からcalcOneCombination
-> calcBasedOneSummon
の順で呼ばれる。ダメージ計算を行っているのはこのcalcBasedOneSummon
メソッド。
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の行が足されている。
makeChartData
でチャート用データを生成している。背水渾身グラフではデータ生成のためにstoredList
のほか、最新のprofile
やsummon
、armlist
を必要としている。
チャート自身はChartコンポーネント (@react-google-charts) によって描画されている。チャートのdataにはmakeChartData
(=generateHaisuiData
(@global_logic.js) の戻り値) によって生成されたthis.state.chartDataが渡されている。
ちなみにチャートは式に基づき描画されているのではなくgenerateHaisuiData
で生成されるHP1%刻みのダメージ値100個をプロットすることで描画されている。(各100地点でダメージ計算処理を実行する必要があるため、冒頭で書いたようにprofile
やsummon
、armlist
が必要になっている)
上記より、ダメージ計算およびチャート描画には現状は最新のprofileやsummon、armslistを参照してチャート用データを生成している。武器などを変更すると背水渾身グラフがリセットされてしまうのはprofileなどが現在の値しか保持できないため。ピン留め機能を実現するには、ピン留めした時点のprofileやsummon、armslistも併せて保存するしかけが必要で、かつ計算時にそれを参照できるようにする必要があり、非常に多くの処理に影響する。