/// <summary>
    /// フェードアウト用コルーチン
    /// </summary>
    protected IEnumerator FadeOutCoroutine(float fadeTime)
    {
        if (label)
        {
            flagFade = true;

            float measureTime = fadeTime;
            while (true)
            {
                yield return(0);

                measureTime -= Time.deltaTime;
                float alpha = measureTime / fadeTime;
                //透明度設定
                label.color = FuncBox.SetColorAlpha(label.color, alpha);
                if (measureTime < 0)
                {
                    break;
                }
                //物理風挙動
                if (flagPhysics)
                {
                    Vector3 translate = new Vector3(xMove, yForce, 0f);
                    transform.position += translate * Time.deltaTime;
                    yForce             -= gravity * Time.deltaTime;
                }
            }
            label.color = FuncBox.SetColorAlpha(label.color, 0f);

            flagFade = false;
            //無効にする
            gameObject.SetActive(false);
        }
    }
    /// <summary>
    /// ターゲッティング
    /// </summary>
    protected void Targeting()
    {
        if (targets.Count <= 0)
        {
            return;
        }

        //ターゲットの作るバウンディングボックスを求める
        Vector3 min, max, pos;

        min = max = pos = targets[0].transform.position;

        for (int i = 1; i < targets.Count; i++)
        {
            pos = targets[i].transform.position;
            //x
            if (min.x > pos.x)
            {
                min.x = pos.x;
            }
            else if (max.x < pos.x)
            {
                max.x = pos.x;
            }
            //y
            if (min.y > pos.y)
            {
                min.y = pos.y;
            }
            else if (max.y < pos.y)
            {
                max.y = pos.y;
            }
        }

        //カメラ位置
        Vector3 cameraPos;
        float   width = 0f, height = 0f;

        if (targets.Count == 1)
        {
            cameraPos = pos;
            width     = height = defaultSize;
        }
        else
        {
            width     = (max.x - min.x) * 0.5f;
            height    = (max.y - min.y) * 0.5f;
            cameraPos = new Vector3(min.x + width, min.y + height);
        }
        cameraPos.z = camera.transform.position.z;
        camera.transform.position = FuncBox.Vector3Lerp(camera.transform.position, cameraPos, 5 * Time.deltaTime);

        //カメラサイズ
        targetSize = (width < height ? height : width) * spacePar;
        if (targetSize < minSize)
        {
            targetSize = minSize;
        }
    }
Beispiel #3
0
        /// <summary>
        /// エフェクトの生成
        /// </summary>
        private void EmitEffect(ParticleSystem particle, Vector2 p1, Vector2 p2, float density)
        {
            if (!particle)
            {
                return;
            }
            //方向と距離の取得
            Vector2 dir = p2 - p1;
            float   dis = dir.magnitude;

            dir.Normalize();

            //エフェクトの生成
            float tempDis = 0f;

            do
            {
                particle.Emit(
                    p1 + dir * tempDis,                                                 //座標
                    FuncBox.RandomVector2() * speed,                                    //速度
                    UnityEngine.Random.Range(width * 0.8f, width),                      //大きさ
                    UnityEngine.Random.Range(0.2f, 1f),                                 //時間
                    color                                                               //色
                    );
                tempDis += density;
            } while (tempDis < dis);

            particle.Emit(
                p1 + dir * dis,                                                 //座標
                FuncBox.RandomVector2() * speed,                                //速度
                UnityEngine.Random.Range(width * 0.8f, width),                  //大きさ
                UnityEngine.Random.Range(0.2f, 1f),                             //時間
                color                                                           //色
                );
        }
Beispiel #4
0
    /// <summary>
    /// 頂点Push処理
    /// </summary>
    protected void PushVertex()
    {
        Vector3 p = FuncBox.GetMousePoint(targetCamera);

        if (grid.WorldToGridCrossPosition(out p, p))
        {
            //頂点の数が2つ以下(三角形を作れる最低の頂点数)
            Push(p);
            if (posList.Count > 2)
            {
                //始点と終点が同じか
                if (ContainStartEndPos())
                {
                    //イベント送信(被っている終点を取り除いてから)
                    Vector3 pos = Pop();
                    if (target)
                    {
                        target.SendMessage(functionName, posList, SendMessageOptions.DontRequireReceiver);
                    }
                    if (flagGridEndWithReset)
                    {
                        OnReset();
                    }
                    else
                    {
                        Push(pos);
                    }
                }
            }
        }
    }
    /// <summary>
    /// 設定ファイル読み込み
    /// </summary>
    protected void ReadSettingFile()
    {
        string path = Application.streamingAssetsPath + "/" + settingFile;

        //ファイル確認
        if (!File.Exists(path))
        {
            return;
        }
        string line;

        using (TextReader r = FuncBox.GetTextReader(path)) {
            while ((line = r.ReadLine()) != null)
            {
                switch (line)
                {
                case "<BGMVolume>":
                    bgmVolume = float.Parse(r.ReadLine());
                    break;

                case "<SEVolume>":
                    seVolume = float.Parse(r.ReadLine());
                    break;

                case "<End>":
                    return;
                }
            }
        }
    }
    protected List <ToolBox.Stage> ReadStageList(string folderPath)
    {
        if (!Directory.Exists(folderPath))
        {
            return(null);
        }
        //読み込み
        var list = new List <ToolBox.Stage>();

        string[] fileList;              //folderPath以下にあるファイルリスト(メタデータは抜く)
        string   fileName;

        fileList = Directory.GetFiles(folderPath);
        for (int i = 0; i < fileList.Length; i++)
        {
            fileName = Path.GetFileName(fileList[i]);
            //拡張子が3つ = メタデータ
            if (fileName.Split('.').Length != 3)
            {
                fileList[i] = folderPath + "/" + fileName;
                Debug.Log(folderPath + "/" + fileName);
                list.Add(ToolBox.Stage.Read(FuncBox.GetTextReader(fileList[i])));
            }
        }
        return(list);
    }
Beispiel #7
0
    //割り当てる(一括)
    public Dictionary <GameObject, int> GetMarker(List <Vector3> posList, GameObject target, string functionName, float z = 0f)
    {
        var gDic = new Dictionary <GameObject, int>();
        int j    = 0;

        for (int i = 0; i < posList.Count; i++)
        {
            UIButtonMessage g = null;
            for (; j < prefabPool.Count; j++)
            {
                if (!prefabPool[j].gameObject.activeInHierarchy)
                {
                    g = prefabPool[j];
                    break;
                }
            }
            if (g)
            {
                g.gameObject.SetActive(true);
                g.transform.localScale = Vector3.one;
                var pos = FuncBox.ViewPointTransform(worldCamera, posList[i], uiCamera);
                pos.z = z;
                g.transform.position = pos;
                g.target             = target;
                g.functionName       = functionName;

                gDic.Add(g.gameObject, i);
            }
        }

        return(gDic);
    }
Beispiel #8
0
    //パラメータセット
    public virtual void SetParameter(GameObject owner, float velocity, float damage, float barrelBonus, float caliberBonus, Color color)
    {
        //持ち主設定
        this.owner = owner;

        //パラメータ設定
        this.velocity     = velocity;
        this.damage       = damage;
        this.barrelBonus  = barrelBonus;
        this.caliberBonus = caliberBonus;
        //色設定
        sprite.color = color;

        //軌跡エフェクト生成
        if (trailEffectPrefab)
        {
            GameObject trail = (GameObject)Instantiate(trailEffectPrefab);
            trail.transform.parent        = transform;
            trail.transform.localPosition = Vector3.zero;
            trailEffect = trail.GetComponent <ParticleSystem>();
            if (trailEffect)
            {
                trailEffect.startColor = FuncBox.SetColorAlpha(color, 0.75f);
            }
            trail.AddComponent <ParticleEndWithDestroy>();
        }
        //ボーナス効果設定
        SetBonusEffect();
    }
Beispiel #9
0
    /// <summary>
    /// クイックブースト
    /// </summary>
    public void QuickBoost()
    {
        if (BreakCheck())
        {
            return;
        }
        //現在の速度の方向を確認
        float nowAngle      = FuncBox.TwoPointAngleD(Vector3.zero, transform.right);
        float velocityAngle = FuncBox.TwoPointAngleD(Vector3.zero, rBody.velocity);
        float diff          = Mathf.Abs(Mathf.DeltaAngle(nowAngle, velocityAngle));

        //差が一定以上なら速度をほぼにする
        if (diff >= 45f)
        {
            rBody.velocity *= 0.2f;
        }
        Vector3 v = transform.right * quickBoostOutput;                 //移動量
        float   e = quickBoostEnergy;                                   //使用エネルギー

        if (!AddVelocity(v, e))
        {
            return;
        }
        //エフェクト
        IndicateQuickBoostEffect(true);
    }
Beispiel #10
0
 /// <summary>
 /// パスを指定してウェーブエネミー情報を読み込み
 /// </summary>
 public void ReadWaveInfo(string filePath)
 {
     waveInfoList = new List <List <WaveEnemyInfo> >();
     if (!File.Exists(filePath))
     {
         return;
     }
     //読み込み
     using (TextReader r = FuncBox.GetTextReader(filePath)) {
         string               line = "";
         string[]             split;
         List <WaveEnemyInfo> enemyInfoList = new List <WaveEnemyInfo>();
         //ファイル走査
         while ((line = r.ReadLine()) != null)
         {
             split = line.Split(',');
             if (split[0] == "<Wave>")
             {
                 enemyInfoList = new List <WaveEnemyInfo>();
                 waveInfoList.Add(enemyInfoList);
             }
             else
             {
                 Debug.Log(split[0]);
                 enemyInfoList.Add(WaveEnemyInfo.ReadString(split));
             }
         }
     }
 }
Beispiel #11
0
 protected void Update()
 {
     if (flagRandom)
     {
         rotateVector = FuncBox.Vector3Lerp(rotateVector, targetAngle, t * Time.deltaTime);
     }
     transform.Rotate(rotateVector * rotatevelocity * Time.deltaTime);
 }
Beispiel #12
0
 /// <summary>
 /// ランキングレコードを書き込む
 /// </summary>
 public void WriteRankingRecords(string filePath)
 {
     using (TextWriter w = FuncBox.GetTextWriter(filePath)) {
         for (int i = 0; i < _rankingRecords.Count; i++)
         {
             w.WriteLine(_rankingRecords[i].GetWriteString());
         }
     }
 }
Beispiel #13
0
 //始点からの角度を求める(スワイプ中のみ)
 public float GetAngle()
 {
     if (flagSwipe)
     {
         return(FuncBox.TwoPointAngleD(currentPosition, startPosition));
     }
     else
     {
         return(-1f);
     }
 }
Beispiel #14
0
 /// <summary>
 /// 頂点を動かす(マウス)
 /// </summary>
 public void MoveVertex(int index)
 {
     if (0 <= index || index < posList.Count)
     {
         var p = FuncBox.GetMousePoint(targetCamera);
         if (grid.WorldToGridCrossPosition(out p, p))
         {
             posList[index] = p;
         }
     }
 }
Beispiel #15
0
    /// <summary>
    /// 機体の有効化
    /// </summary>
    protected void Activate_Ship(ToolBox.ShipData shipData)
    {
        //機体パーツを結合したMeshを取得
        Mesh m = shipData.GetConnectedMesh();

        FuncBox.SetMesh(gameObject, m, gm.shipMaterial);
        //半径を求める
        Vector3 size   = m.bounds.size / 2f;
        Vector3 center = FuncBox.Vector3Abs(m.bounds.center);

        collisionRadius = Vector3.Distance(Vector3.zero, center + size);
    }
Beispiel #16
0
 /// <summary>
 /// 方向表示の更新
 /// </summary>
 protected void UpdateDirectionIndicator()
 {
     //自身の
     playerDirection.transform.eulerAngles = player.transform.eulerAngles;
     //ロック対象の
     if (player.lockObject)
     {
         Vector3 angles = Vector3.zero;
         angles.z = FuncBox.TwoPointAngleD(player.transform.position, player.lockObject.transform.position);
         lockObjectDirection.transform.eulerAngles = angles;
     }
 }
Beispiel #17
0
 private void Test_Click(object sender, RoutedEventArgs e)
 {
     if (FuncBox.IsPlaceholderNow())
     {
         MessageBox.Show("Сначала введите функцию в поле ввода.", "Невозможно провести тест!");
         return;
     }
     if (Compiler.CompileMathFunc(FuncBox.Text) is var f && f != null)
     {
         MessageBox.Show("Функция работоспособна.", "Успешный тест!");
     }
 }
 /// <summary>
 /// 新しいターゲットの設定
 /// </summary>
 protected void SetNewTarget(GameObject newTarget)
 {
     //ターゲットにイベント送信
     FuncBox.Notify(nowTarget, "OnHover", false);
     //ターゲット切り替え
     if (newTarget)
     {
         nowTarget = newTarget;
     }
     //ターゲットにイベント送信
     FuncBox.Notify(nowTarget, "OnHover", true);
 }
Beispiel #19
0
    /// <summary>
    /// 入力確認
    /// </summary>
    private void CheckInput()
    {
        if (cam == null)
        {
            return;
        }
        Vector3 mousePos = FuncBox.GetMousePosition(cam);

        //スナップ判定
        bool snaped = false;

        if (additionalLine != null)
        {
            Vector2 snapPos;
            if (additionalLine.Snap(mousePos, out snapPos))
            {
                mousePos = snapPos;
                snaped   = true;
                draw     = true;
            }
        }

        //頂点追加
        if (Input.GetMouseButtonDown(addButton))
        {
            draw |= AddVertex(mousePos);
            if (additionalLine != null && snaped)
            {
                additionalLine.SnapCallback();
            }
        }

        //頂点削除
        if (Input.GetMouseButtonDown(removeButton))
        {
            draw |= RemoveAtLastVertex();
        }

        //マウスの移動量
        Vector2 md = new Vector2(Input.GetAxis("Mouse X"), Input.GetAxis("Mouse Y"));

        if (md.magnitude > MDEPSILON)
        {
            draw |= UpdateNoticeLine(mousePos);
        }

        //全消し
        if (Input.GetKeyDown(clearButton))
        {
            FlushVertices();
        }
    }
Beispiel #20
0
    /// <summary>
    /// マウス移動処理
    /// </summary>
    protected void OnMouseMove()
    {
        var p = FuncBox.GetMousePoint(targetCamera);

        if (grid.WorldToGridCrossPosition(out p, p))
        {
            Push(p);
            //ラインレンダラに座標を設定
            line.CreateLine(posList);
            //FuncBox.SetLineRenderer(lineRenderer, posList, true);
            Pop();
        }
    }
    /// <summary>
    /// アイテムをランダムに複数生成する
    /// </summary>
    public void InstantiateRandomItem(Vector3 pos, int num)
    {
        float angle = 360f / (float)num;

        for (int i = 0; i < num; i++)
        {
            int        randNum = Random.Range(0, dropItemList.Length);
            GameObject g       = Instantiate(dropItemList[randNum]);
            g.transform.parent   = transform;
            g.transform.position = pos;
            Rigidbody r = g.GetComponent <Rigidbody>();
            r.AddForce(FuncBox.DegreeToVector3(angle * i) * 1000f);
        }
    }
Beispiel #22
0
 protected void Update()
 {
     if (measureTime > 0)
     {
         measureTime -= Time.deltaTime;
         //徐々に透明に
         sprite.color = FuncBox.SetColorAlpha(sprite.color, measureTime / time);
         if (measureTime <= 0)
         {
             Destroy(gameObject);
             return;
         }
     }
 }
Beispiel #23
0
 protected override void SubUpdate()
 {
     base.SubUpdate();
     subUpdateCount++;
     //数回に一度行う
     if (Random.Range(2, 5) == subUpdateCount)
     {
         //ランダムな方向を向いてクイックブースト
         Vector3 randDir = FuncBox.GetRandomVector2(-1, 1);
         ship.MoveAngle(randDir);
         ship.QuickBoost();
         //カウントを0に
         subUpdateCount = 0;
     }
 }
Beispiel #24
0
        /// <summary>
        /// 図形の総面積を求める
        /// </summary>
        public float GetTotalSize()
        {
            float total = 0;
            float size  = 0;

            for (int i = 0; i < triangles.Length; i += 3)
            {
                size = FuncBox.TriangleSize(vertices[triangles[i + 0]].vertex,
                                            vertices[triangles[i + 1]].vertex,
                                            vertices[triangles[i + 2]].vertex);
                total += size;
            }
            //裏表貼っているので半分にする
            return(totalSize = total * 0.5f);
        }
Beispiel #25
0
        public MainWindow()
        {
            InitializeComponent();

            FuncBox.SetPlaceholder("Введите вашу функцию здесь...");

            A_Box.SetPlaceholder("0");
            A_Box.AllowOnlyDouble();

            B_Box.SetPlaceholder("10");
            B_Box.AllowOnlyDouble();

            PointerBox.SetPlaceholder("0.25");
            PointerBox.AllowOnlyDouble();
        }
Beispiel #26
0
 /// <summary>
 /// 機体マーカーの更新
 /// </summary>
 protected void UpdateShipMarker()
 {
     if (flagLongRange)
     {
         Vector3 pos = FuncBox.ViewPointTransform(playerCamera.camera, player.transform.position, uiCamera);
         shipMarker.transform.position    = pos;
         shipMarker.transform.eulerAngles = player.transform.eulerAngles;
         if (player.lockObject)
         {
             pos = FuncBox.ViewPointTransform(playerCamera.camera, player.lockObject.transform.position, uiCamera);
             lockObjectMarker.transform.position    = pos;
             lockObjectMarker.transform.eulerAngles = player.lockObject.transform.eulerAngles;
         }
     }
 }
    /// <summary>
    /// 設定ファイル書き込み
    /// </summary>
    protected void WriteSettingFile()
    {
        string path = Application.streamingAssetsPath + "/" + settingFile;

        using (TextWriter w = FuncBox.GetTextWriter(path)) {
            //書き込み文字列の生成
            StringBuilder sb = new StringBuilder();
            sb.AppendLine("<BGMVolume>");
            sb.AppendLine(bgmVolume.ToString());
            sb.AppendLine("<SEVolume>");
            sb.AppendLine(seVolume.ToString());
            sb.AppendLine("<End>");
            //書き込み
            w.Write(sb.ToString());
        }
    }
Beispiel #28
0
 /// <summary>
 /// マウス座標の取得。指定したEventStstemに被る場合はfalseを返す
 /// </summary>
 public bool GetMousePoint(out Vector2 point)
 {
     point = FuncBox.GetMousePosition(cam);
     if (!uiEventSystem)
     {
         return(true);
     }
     else if (uiEventSystem.IsPointerOverGameObject())
     {
         return(false);
     }
     else
     {
         return(true);
     }
 }
    public UISprite background;         //テキストバックグラウンド
    #region 関数
    /// <summary>
    /// ポップアップのテキスト、位置を設定する
    /// </summary>
    public void SetPopup(Camera sourceCam, Vector3 worldPos, string text)
    {
        //ポップアップの位置
        Vector3 pos = FuncBox.ViewPointTransform(sourceCam, worldPos, targetCamera);

        popup.transform.position = pos;
        //テキスト
        label.text = text;
        //背景
        Vector2 size  = label.relativeSize;
        Vector2 scale = label.transform.localScale;

        size.x *= scale.x;
        size.y *= scale.y;
        background.transform.localScale = size;
    }
Beispiel #30
0
	//サークルUIの生成
	public void InstantiateCircle() {
		//割合計算と生成
		contentsList = new List<CircleUIContents>();;
		float t = 0f;
		GameObject s;
		foreach (CircleValue p in circleValue) {
			//生成
			s = (GameObject)Instantiate(prefab.gameObject);
			s.transform.parent = transform;
			s.transform.localPosition = Vector3.zero;
			s.transform.localScale = Vector3.one;
			contentsList.Add(s.GetComponent<CircleUIContents>());

			//割合の母数を計算
			t += p.per;
		}

		//正規化
		float per = 0f;	
		float addPer = 0f;
		float angle;
		float direction;
		Vector3 vec;
		normalizedPer = new List<float>();
		for(int i = 0; i < circleValue.Count; i++) {
			//正規
			per = circleValue[i].per / t;

			//角度
			angle = 360 * addPer;
			addPer += per;
			normalizedPer.Add(addPer);	//正規化リストに追加

			//ずらす角度
			direction = angle + (per * 360 / 2) + 90f;
			//座標をずらす
			vec = FuncBox.DegreeToVector3(direction);
			contentsList[i].transform.localPosition = vec * vecScale;

			//角度と割合
			contentsList[i].transform.eulerAngles = new Vector3(0f, 0f, angle);
			contentsList[i].SetContents(per, circleValue[i].text);

			//名前
			contentsList[i].name = "[" + i + "]";
		}
	}