コード例 #1
0
    private void calculateDistanceFromBullet()
    {
        foreach (var item in PlayerToBulletObservation)
        {
            for (int i = 0; i < outputSectionSize; i++)
            {
                item.Value[i] = 0;
            }
        }

        for (int i = 0; i < players.Count; i++)
        {
            int p1id = players[i].id;
            foreach (var item in bullets)
            {
                if (item.GetComponent <BulletData>().playerScript.id != players[i].id)
                {
                    double currDistance = Vector2.Distance(item.transform.position, players[i].transform.position);
                    if (currDistance < maxObservationDistance)
                    {
                        AngleQuant currAngle = CalculateAngle(players[i].transform.position, item.transform.position);

                        double p2bDist = (maxObservationDistance - currDistance) / maxObservationDistance;
                        PlayerToBulletObservation[p1id][(int)currAngle - 1] = Math.Max(p2bDist, PlayerToBulletObservation[p1id][(int)currAngle - 1]);
                    }
                }
            }
        }
    }
コード例 #2
0
    private AngleQuant oppositeAngle(AngleQuant currAngle)
    {
        switch (currAngle)
        {
        case AngleQuant.Right:
            return(AngleQuant.Left);

        case AngleQuant.UpRight:
            return(AngleQuant.DownLeft);

        case AngleQuant.Up:
            return(AngleQuant.Down);

        case AngleQuant.UpLeft:
            return(AngleQuant.DownRight);

        case AngleQuant.Left:
            return(AngleQuant.Right);

        case AngleQuant.DownLeft:
            return(AngleQuant.UpRight);

        case AngleQuant.Down:
            return(AngleQuant.Up);

        case AngleQuant.DownRight:
            return(AngleQuant.UpLeft);

        case AngleQuant.None:
        default:
            return(AngleQuant.None);
        }
    }
コード例 #3
0
    //private void OnGUI()
    //{
    //    for (int i = 0; i < 8; i++)
    //    {
    //        GUI.Label(new Rect(10, 10 + i * 20, 100, 20), PlayerToPlayerObservation[0][i].ToString(), new GUIStyle { fontSize = 20 });
    //    }
    //    for (int i = 0; i < 8; i++)
    //    {
    //        GUI.Label(new Rect(300, 10 + i * 20, 100, 20), PlayerToBulletObservation[0][i].ToString(), new GUIStyle { fontSize = 20 });
    //    }
    //}

    private void calculateDistanceFromPlayers()
    {
        foreach (var item in PlayerToPlayerObservation)
        {
            for (int i = 0; i < outputSectionSize; i++)
            {
                item.Value[i] = 0;
            }
        }

        for (int i = 0; i < players.Count; i++)
        {
            int p1id = players[i].id;
            for (int j = i + 1; j < players.Count; j++)
            {
                int p2id = players[j].id;

                double currDistance = Vector2.Distance(players[i].transform.position, players[j].transform.position);
                if (currDistance < maxObservationDistance)
                {
                    AngleQuant currAngle = CalculateAngle(players[i].transform.position, players[j].transform.position);
                    AngleQuant opAngle   = oppositeAngle(currAngle);
                    double     p2pDist   = (maxObservationDistance - currDistance) / maxObservationDistance;
                    PlayerToPlayerObservation[p1id][(int)currAngle - 1] = p2pDist;
                    PlayerToPlayerObservation[p2id][(int)opAngle - 1]   = p2pDist;
                }
            }
        }
    }