Beispiel #1
0
 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_);
 }
Beispiel #2
0
    // 星座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);
    }
Beispiel #3
0
        // 問題を作成する
        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);
            }
        }