示例#1
0
    /// <summary>
    /// 穴に落ちて消える
    /// </summary>
    /// <param name="star">星</param>
    private void FallHoleAndDestory(GameObject star)
    {
        // 惑星と星の距離
        Vector3 range = planet.transform.position - star.transform.position;

        // 正規化する
        range.Normalize();

        // レイの中点
        Vector3 original = star.transform.position;
        // レイの向き
        Vector3 direction = range;
        // レイの長さ
        float length = (_Date.SmallStarRadius * 2) * 2;

        // レイを作成する
        Ray ray = new Ray(original, direction);
        // レイを可視化する
        //Debug.DrawRay(ray.origin, ray.direction, Color.white, 10.0f);

        // レイが当たったオブジェクトの情報
        RaycastHit hit;

        // レイとオブジェクトの当たり判定
        if (!Physics.Raycast(ray, out hit, length))
        {
            // 惑星の穴の奥まで落ちる設定をする
            star.GetComponent <StarDate>().IsFallHole = true;
        }
        else
        {
            // 石もしくは木の種類に当たった場合オブジェクトを消す
            if ((hit.collider.tag == "Tree") || (hit.collider.tag == "Rock"))
            {
                Destroy(star);
            }
            else
            {
                // 星のデータ
                StarDate stardate = star.GetComponent <StarDate>();

                // 音を鳴らす
                if (stardate.IsSound_HitPlanet)
                {
                    // プレイヤーと星の距離を求める
                    float len = Vector3.Distance(player.transform.position, star.transform.position);

                    // 星が画面内に存在する場合
                    if (len < _Date.Sound_PlayerStarDirection)
                    {
                        // 音を鳴らす
                        SoundManager.Instance.PlaySe("StarHitPlanet");
                    }

                    // 音が鳴らないように設定する
                    stardate.IsSound_HitPlanet = false;
                }
            }
        }
    }
示例#2
0
    /// <summary>
    /// 星を配置する
    /// </summary>
    /// <param name="star">星</param>
    private void SetPosition(GameObject star)
    {
        // 星のデータ
        StarDate starDate = star.GetComponent <StarDate>();

        // XZ軸方向に進む角度をデグリーからラジアンに変換
        float XZradian = starDate.DegreeXZ * Mathf.Deg2Rad;
        // Y軸方向に進む角度をデグリーからラジアンに変換
        float Yradian = starDate.DegreeY * Mathf.Deg2Rad;
        // 現在の星と惑星の距離
        float radius = starDate.Range;

        // 星の位置
        Vector3 starpos = new Vector3(radius * Mathf.Cos(Yradian) * Mathf.Sin(XZradian),
                                      radius * Mathf.Sin(Yradian),
                                      radius * Mathf.Cos(Yradian) * Mathf.Cos(XZradian));

#if false
        //  [現在の星の位置]    =       [惑星の位置]        + [星の位置]
        star.transform.position = planet.transform.position + starpos;
#else
        // 星が動く距離
        Vector3 dircmove = starpos - starDate.OncePos;
        star.transform.Translate(dircmove);
        // 以前の星の位置をもらう
        starDate.OncePos = starpos;
#endif
    }
示例#3
0
    /// <summary>
    /// 光を星に向かせる
    /// </summary>
    private void FaceLightStar()
    {
        // 光を惑星に向かせる
        foreach (GameObject star in GameObject.FindGameObjectsWithTag(_Date.StarTag))
        {
            // 星のデータ
            StarDate starDate = star.GetComponent <StarDate>();

            // [星のオブジェクト]の子に[光のオブジェクト]が含まれている
            foreach (Transform child in star.transform)
            {
                // 光のデータ
                Light light = child.GetComponent <Light>();

                // 光のデータが存在している場合
                if (light != null)
                {
                    // 星と惑星の距離と向き
                    Vector3 range = planet.transform.position - star.transform.position;
                    // その向きを正規化する
                    range.Normalize();

                    // 光を回転する
                    light.transform.localRotation = Quaternion.LookRotation(range);
                    // 光の位置をずらす
                    light.transform.position = star.transform.position - range * 20;//仮:20
                }
            }
        }
    }
示例#4
0
        public void TimeStartsAtYearZero()
        {
            var startYear = new StarDate();
            var yearZero  = new StarDate(0, 0);

            Assert.Equal(yearZero, startYear);
        }
        /// <summary>
        /// 轉換where條件 by 西元年日期
        /// </summary>
        /// <param name="dtStart">開始日期</param>
        /// <param name="dtEnd">結束日期</param>
        /// <param name="columnName">欄位行稱</param>
        /// <param name="formatDate">格式化日期  傳入 yyyy/MM/dd 這種</param>
        /// <param name="where">ref SqlParameters</param>
        public void appendCriteriaDate(string dtStart, string dtEnd, string columnName, string formatDate, ref string where)
        {
            if (string.IsNullOrEmpty(dtStart) && string.IsNullOrEmpty(dtEnd))
            {
                return;
            }

            DateTime StarDate;
            DateTime EndDate;
            DateTime tempDate;

            //判斷是否為日期格式
            DateTime.TryParse(dtStart, out StarDate);
            DateTime.TryParse(dtEnd, out EndDate);

            if (!string.IsNullOrEmpty(dtStart) && !string.IsNullOrEmpty(dtEnd))
            {
                if (StarDate.CompareTo(EndDate) == 1)  //前後日期大小轉換
                {
                    tempDate = StarDate;
                    StarDate = EndDate;
                    EndDate  = tempDate;
                }

                where += string.Format(" AND {0} between '{1}' and '{2}'", columnName, StarDate.ToString(formatDate), EndDate.ToString(formatDate));
            }
            else if (string.IsNullOrEmpty(dtEnd))
            {
                where += string.Format(" AND  {0} >= '{1}'", columnName, StarDate.ToString(formatDate));
            }
            else if (string.IsNullOrEmpty(dtStart))
            {
                where += string.Format(" AND {0} <= '{1}'", columnName, EndDate.ToString(formatDate));
            }
        }
示例#6
0
    // ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー

    /// <summary>
    /// 星を作成する
    /// </summary>
    private void CreateMain(Kind starkind)
    {
        // 星のデータが存在していない場合は何もしない
        if (starPrefab == null)
        {
            return;
        }

        // 星を新しく作成する
        GameObject newstar = Instantiate(starPrefab) as GameObject;

        // 星のオブジェクトを1箇所にまとめる
        newstar.transform.parent = starParentObj.transform;

        // 星のデータ
        StarDate starDate = newstar.GetComponent <StarDate>();

        // 星の種類
        starDate.StarKind = starkind;

        // 回って落ちる星
        if (starkind == Kind.MOVEANDFALL)
        {
            // 星が宇宙上に動く時間
            starDate.TimeMove = Random.Range(_Date.TimeMove_Miu, _Date.TimeMove_Max);
            // 星が宇宙から惑星に落ちる時間
            starDate.TimeFalling = Random.Range(_Date.TimeFall_Miu, _Date.TimeFall_Max);
        }

        // 回って落ちる星 もしくは すぐに落ちる星
        if (starkind == Kind.MOVEANDFALL || starkind == Kind.JUSTFALL)
        {
            // 星が惑星上に滞在する時間
            starDate.TimeState = Random.Range(_Date.TimeState_Miu, _Date.TimeState_Miu);
        }
        // 星と惑星の距離 と 現在の星と惑星の距離
        starDate.Direction = starDate.Range = Random.Range(_Date.Direction_Miu, _Date.Direction_Max);
        // 1フレームに縮む半径の長さを求める
        starDate.RadiusShrinkage = (starDate.Direction - _Date.BigStarRadius) / (float)starDate.TimeFalling;

        // 1フレームにX軸(もしくはZ軸)に進む角速度
        starDate.AngularVelocity_DegreeXZ = Random.Range(_Date.DegreeXZ_Miu, _Date.DegreeXZ_Max); //1.0f
        // 1フレームにY軸に進む角速度
        starDate.AngularVelocity_DegreeY = Random.Range(_Date.DegreeXZ_Miu, _Date.DegreeXZ_Max);  //3.0f
        // 現在X軸(もしくはZ軸)による角度
        starDate.DegreeXZ = Random.Range(0, 360);
        // 現在Y軸による角度
        starDate.DegreeY = Random.Range(0, 360);

        // 名前を変える
        starDate.name = (starkind == Kind.ALWAYSMOVE) ?  "TheStarAlwaysMove" :
                        (starkind == Kind.MOVEANDFALL) ? "TheStarMoveAndFall":
                        "TheStarJustFall";

        // 星を配置する
        SetPosition(newstar);
    }
示例#7
0
        public void XPlusNonZeroIsNotX()
        {
            var start = new StarDate();
            var one   = new Duration(0, 1);

            StarDate future = start + one;

            Assert.NotEqual(start, future);
        }
示例#8
0
        public void XPlusZeroEqualsX()
        {
            var start = new StarDate();
            var zero  = new Duration(0, 0);

            StarDate same = start + zero;

            Assert.Equal(start, same);
        }
示例#9
0
        public void YearHasTenMonths()
        {
            var start    = new StarDate(1, 9);
            var oneMonth = new Duration(0, 1);
            var expected = new StarDate(2, 0);

            StarDate future = start + oneMonth;

            Assert.Equal(expected, future);
        }
示例#10
0
        public void ItAddsUp()
        {
            var start    = new StarDate();
            var delta    = new Duration(0, 2);
            var expected = new StarDate(0, 2);

            StarDate future = start + delta;

            Assert.Equal(expected, future);
        }
示例#11
0
    /// <summary>
    /// 円に沿って星が動く
    /// </summary>
    private void ParallelToCircle(GameObject star)
    {
        // 星のデータ
        StarDate starDate = star.GetComponent <StarDate>();

        // XZ軸方向に進む
        starDate.DegreeXZ += starDate.AngularVelocity_DegreeXZ;
        // Y軸方向に進む
        starDate.DegreeY += starDate.AngularVelocity_DegreeY;

        // 星を配置する
        SetPosition(star);
    }
示例#12
0
    /// <summary>
    /// 投げられた星が地面に当たって消える
    /// </summary>
    public void ThrowAndDleate()
    {
        // 複数の星を探す
        GameObject[] stars = GameObject.FindGameObjectsWithTag(date.StarTag);

        // 一つ一つの星
        foreach (GameObject star in stars)
        {
            // 星のデータ
            StarDate stardate = star.GetComponent <StarDate>();

            // 指定された星が投げられ地面に接触した場合、星を消す
            if ((stardate.IsThrow) && (HitStarPlanet(star)))
            {
                // エフェクトを作成する
                GameObject newEffect = Instantiate(effectPrefab_starhitplanet, Vector3.zero, Quaternion.identity) as GameObject;

                // エフェクトに名前を付ける
                newEffect.name = "Effect_StarHitPlanet";

                // 位置や向きを決める
                newEffect.GetComponent <StarEffect_HitPlanet>().DecideDirection(star, planet);

                // ----------------------------------------------------------------------------------------------------------------

                // 惑星上に光るスポットライトを作成する
                GameObject newSpotLight = Instantiate(Star_SpotLight, Vector3.zero, Quaternion.identity) as GameObject;

                // そのライトに名前を付ける
                newSpotLight.name = "ThrowStar_SpotLight";

                // 位置や向きを決める
                DecideDirection(newSpotLight, star, planet);

                // ----------------------------------------------------------------------------------------------------------------
                // 星を消す
                Destroy(star);
            }
        }
    }
示例#13
0
    void InstanceThrowStar(Vector3 targetPos)
    {
        GameObject star = Instantiate(starPrefab);

        // 追加--------------------------------------------------------

        // 星のデータ
        StarDate stardate = star.GetComponent <StarDate>();

        // 星を投げるフラグを付ける
        stardate.IsThrow = true;

        //--------------------------------------------------------------


        Vector3 pos = this.transform.position + this.transform.right;

        star.transform.position = pos;
        Vector3 vec = targetPos - pos;

        star.GetComponent <Rigidbody>().velocity = vec.normalized * speed;
        Debug.Log(vec.normalized * speed);
    }
示例#14
0
    /// <summary>
    /// 星が動く
    /// </summary>
    private void Move()
    {
        // 複数の星を呼ぶ
        foreach (GameObject star in GameObject.FindGameObjectsWithTag(_Date.StarTag))
        {
            // 星のデータ
            StarDate starDate = star.GetComponent <StarDate>();

            // 惑星の穴の奥まで進まない場合
            if (!starDate.IsFallHole)
            {
                // 星の生存時間
                float startime = starDate.Time;

                // 星が宇宙上に動く時間
                float timeMove = starDate.TimeMove;
                // 星が宇宙上に動き始めてから惑星上に落ちるまでの時間
                float timeMoveFalling = timeMove + starDate.TimeFalling;
                // 星が宇宙上に動き始めてから惑星上に生存するまでの時間
                float timeMoveState = timeMoveFalling + starDate.TimeState;

                // 星が宇宙上に動き始めてから惑星上に落ちるまで もしくは 永遠に消えない星
                if (((starDate.StarKind == Kind.MOVEANDFALL) && (startime < timeMoveFalling)) ||
                    (starDate.StarKind == Kind.ALWAYSMOVE))
                {
                    // 円に沿って星が動く
                    ParallelToCircle(star);

                    // 星が落ち始める準備 かつ 今後消える星
                    if ((startime >= timeMove) && (starDate.StarKind == Kind.MOVEANDFALL))
                    {
                        // 1フレームに星の軌道が縮む半径  ※1秒間にRadiusShrinkage分縮む
                        float radius = starDate.RadiusShrinkage * Time.deltaTime;

                        // 星が軌道する半径を縮む
                        starDate.Range -= radius;
                    }
                }
                else
                // すぐに惑星上に落ちる星
                if (starDate.StarKind == Kind.JUSTFALL)
                {
                    // 星と惑星の距離
                    Vector3 range = star.transform.position - planet.transform.position;
                    // 星と惑星の長さ
                    float length = range.magnitude;
                    // 惑星の半径の長さ
                    float radius = _Date.BigStarRadius;

                    if (length > radius)
                    {
                        // 距離を正規化する
                        range.Normalize();
                        // 移動する
                        star.transform.position += -range;
                    }
                    else
                    {
                        // 星が穴に落ちて消すか判断する
                        FallHoleAndDestory(star);
                    }
                }

                // 星が穴に落ちて消すか判断する
                if (((startime > timeMoveFalling) && (starDate.StarKind == Kind.MOVEANDFALL)))
                {
                    FallHoleAndDestory(star);
                }

                // 星を消す
                if ((startime > timeMoveState) && ((starDate.StarKind == Kind.MOVEANDFALL) || (starDate.StarKind == Kind.MOVEANDFALL)))
                {
                    Destroy(star);
                }
                else
                {
                    // 星の生存時間を計る
                    starDate.Time += Time.deltaTime;
                }
            }
            else
            // 小さい星が惑星の穴の奥まで進む
            {
                // 星と惑星の距離
                Vector3 range = planet.transform.position - star.transform.position;
                range.Normalize();

                // 長さ
                float length = (_Date.SmallStarRadius * 2) * 2;

                // 小さい星が進む
                star.transform.position += range;

                // レイが当たったオブジェクトの情報
                RaycastHit hit;

                // レイとオブジェクトの当たり判定
                if (Physics.Raycast(new Ray(star.transform.position, range), out hit, length))
                {
                    Destroy(star);
                }
            }
        }
    }
示例#15
0
 public WakePoint(StarDate time, Position position)
 {
     Time     = time;
     Position = position;
 }
示例#16
0
 /// <summary>
 /// Returns the stardate as a string with two decimal places
 /// </summary>
 /// <returns>Approximate string representation of stardate</returns>
 /// <remarks>Saves you some work, and gives you the date as it would normally be spoken.</remarks>
 public override string ToString()
 {
     return(StarDate.ToString("F2"));
 }