static public Table_asterism_star_hip getInstance() { if (table_ == null) { table_ = new Table_asterism_star_hip(); table_.create("tables/asterism_star_hip.tsv"); } return(table_); }
// 星座Idからデータ取得 static public Asterism getData(int astId) { if (astId < 1 || astId > 89) { return(null); } var data = new Asterism(); int astIndex = astId - 1; var ast = Table_asterism_ast.getInstance().getData(astIndex); data.id_ = astId; data.shortName_ = ast.shortName_; data.name_ = ast.name_; data.jpName_ = ast.jpName_; var posTable = Table_asterism_star_pos.getInstance(); var lineHipTable = Table_asterism_line_hip.getInstance(); var starHipTable = Table_asterism_star_hip.getInstance(); // 恒星 var starHipIndices = lineHipTable.getStarHipIndicesFromShortName(data.shortName_); data.starNum_ = starHipIndices.Count; foreach (var i in starHipIndices) { // ヒッパルコスIdに対応する恒星データを取得 Star star = new Star(); var posData = posTable.getDataFromHipId(i); star.hipId_ = i; star.magnitude_ = posData.magnitude_; star.name_ = starHipTable.getName(star.hipId_); star.pos_ = new Vector2(posData.lat_, posData.long_); star.color_ = new Vector3(posData.r_, posData.g_, posData.b_); data.stars_.Add(star); } // 恒星間ライン var linePair = lineHipTable.getLinesFromShortName(data.shortName_); foreach (var pair in linePair) { var line = new Line(); var start = posTable.getDataFromHipId(pair.startHipId_); var end = posTable.getDataFromHipId(pair.endHipId_); line.start_ = new Vector2(start.lat_, start.long_); line.end_ = new Vector2(end.lat_, end.long_); line.startHipId_ = pair.startHipId_; line.endHipId_ = pair.endHipId_; data.lines_.Add(line); } return(data); }
// 問題を作成する void createAsterism() { parent_.createAsterism(dataSet_.astId_, dataSet_.radius_, parent_.starUnitPrefab_, parent_.linePrefab_, ref dataSet_.stars_, ref dataSet_.lines_, true, 1.0f, 1.0f, 1.0f); dataSet_.root_ = new GameObject("root"); dataSet_.root_.transform.parent = parent_.transform; dataSet_.root_.transform.position = dataSet_.getCenter(); dataSet_.toRoot(); // 恒星名があれば表示 foreach (var star in dataSet_.stars_) { int hipId = star.getHipId(); string name = Table_asterism_star_hip.getInstance().getName(hipId); if (name != "") { star.setName(name); } } // 星座のルートをランダムに回転 dataSet_.answerQ_ = dataSet_.root_.transform.rotation; var q = Quaternion.Euler(Random.Range(-180.0f, 180.0f), Random.Range(-180.0f, 180.0f), Random.Range(-180.0f, 180.0f)); dataSet_.root_.transform.rotation = q; float ang = Quaternion.Angle(q, dataSet_.answerQ_); dataSet_.curAngle_ = ang; float t = 1.0f - ang / 180.0f; // 星座線をランダムに回転 foreach (var line in dataSet_.lines_) { line.backupRotation(); line.transform.localRotation = Quaternion.Euler(Random.Range(-180.0f, 180.0f), Random.Range(-180.0f, 180.0f), Random.Range(-180.0f, 180.0f)); line.backupQuestionRotation(); var lq = line.getBackupRotation(); var ansLQ = line.getQuestionRotation(); line.transform.localRotation = Quaternion.Lerp(ansLQ, lq, t); } // 天球のラインを有効に foreach (var line in dataSet_.sky_.asterisms_[dataSet_.astId_ - 1].lines_) { line.gameObject.SetActive(true); } }