示例#1
0
    void LoadStaticSpawnPoints()
    {
        if (Application.loadedLevelName.Equals(GameConfig.MainSceneName))
        {
            GameObject obj = new GameObject("StaticPoints");
            obj.transform.parent = transform;

            foreach (KeyValuePair <int, AISpawnPoint> pair in AISpawnPoint.s_spawnPointData)
            {
                AISpawnPoint point = pair.Value;
                point.spPoint = SPPoint.InstantiateSPPoint <SPPoint>(point.Position,
                                                                     Quaternion.Euler(point.euler),
                                                                     IntVector4.Zero,
                                                                     obj.transform,
                                                                     0,
                                                                     point.resId,
                                                                     point.isActive,
                                                                     false,
                                                                     false,
                                                                     false,
                                                                     false,
                                                                     null,
                                                                     point.OnSpawned);

                point.spPoint.name = ("Static id = " + point.id + " , " + "path id = " + point.resId + " : ") + point.spPoint.name;
            }
        }
    }
    protected override SPPoint Spawn(AISpawnData spData)
    {
        base.Spawn(spData);

        Vector3    pos;
        Quaternion rot;

        if (GetPositionAndRotation(out pos, out rot, spData.minAngle, spData.maxAngle))
        {
            //if (!GameConfig.IsMultiMode)
            {
                SPPointMovable movable = SPPoint.InstantiateSPPoint <SPPointMovable>(pos,
                                                                                     rot,
                                                                                     IntVector4.Zero,
                                                                                     pointParent,
                                                                                     spData.isPath ? 0 : spData.spID,
                                                                                     spData.isPath ? spData.spID : 0,
                                                                                     true,
                                                                                     true,
                                                                                     false,
                                                                                     false,
                                                                                     true,
                                                                                     null,
                                                                                     OnSpawned,
                                                                                     this) as SPPointMovable;

                movable.target = transform;
                return(movable);
            }
        }

        return(null);
    }
示例#3
0
    void LoadNoiseBossPoints(IntVector4 node)
    {
        int nx = node.x >> VoxelTerrainConstants._shift >> node.w;
        int nz = node.z >> VoxelTerrainConstants._shift >> node.w;

        float value = (float)mNoise.Noise(nx, nz);

        if (value < -0.5f)
        {
            int length = VoxelTerrainConstants._numVoxelsPerAxis << node.w;

            float ox = (float)mNoise.Noise(nx, nz, nx + nz) * 0.5f + 0.5f;
            float oz = (float)mNoise.Noise(nz, nx, nx - nz) * 0.5f + 0.5f;

            Vector3 pos = new Vector3(node.x + ox * length, node.y, node.z + oz * length);

            if (AIErodeMap.IsInErodeArea(pos) == null)
            {
                Quaternion rot   = Quaternion.Euler(0.0f, Random.Range(0, 360), 0.0f);
                SPPoint    point = SPPoint.InstantiateSPPoint <SPPointBoss>(pos, rot, nextIndex, transform, 0, 0, true, true, true, true, true, mNoise);
                point.name = "Noise boss : " + point.name;
                RegisterSPPoint(point);
            }

            //Debug.LogError("Noise boss ai point : " + pos);
        }
    }
示例#4
0
    public static void WriteSPPoint(uLink.BitStream stream, object obj, params object[] codecOptions)
    {
        SPPoint point = obj as SPPoint;

        stream.Write <Vector3>(point.transform.position);
        stream.Write <IntVector4>(point.mIndex);
        stream.Write <PointType>(point.mType);
        stream.Write <IntVector4[]>(point.mNodes.ToArray());
    }
示例#5
0
    public static void RegisterPoint(SPPoint point)
    {
        IntVector4 key = point.index;

        if (!PointTable.ContainsKey(key))
        {
            PointTable.Add(key, point);
        }
    }
示例#6
0
    public static void RemovePoint(SPPoint point)
    {
        IntVector4 key = point.index;

        if (PointTable.ContainsKey(key))
        {
            PointTable.Remove(key);
        }
    }
示例#7
0
    public void RegisterSPPoint(SPPoint point)
    {
        if (point == null)
        {
            return;
        }

        if (!mPoints.Contains(point))
        {
            mPoints.Add(point);
        }
    }
示例#8
0
        public void Everything()
        {
            #region ...

            SPPoint p1 = new SPPoint(0.0f, 0.0f);
            SPPoint p2 = new SPPoint(8.0f, 16.0f);
            SPPoint p3 = p2.Scale(0.5f);
            SPPoint p4 = p3.Rotate(-1.570796327f);
            SPPoint p5 = p3.Normalize();
            SPPoint p6 = p3.Invert();
            SPPoint p7 = SPPoint.FromPolarLength(p2.Length, p2.Angle);
            SPPoint p8 = SPPoint.Interpolate(p1, p2, 0.5f);
            SPPoint p9 = p2 + p3;
            SPPoint p10 = p1 - p2;
            SPPoint p11 = p2 * 0.5f;
            float f1 = SPPoint.CalculateDistance(p1, p2);
            float f2 = SPPoint.CalculateAngle(p2, p4);
            float f3 = p2.Dot(p4);
            PointF p12 = p3;
            SPPoint p13 = p12;

            Assert.True(p2.X == 8.0f);
            Assert.True(p2.Y == 16.0f);
            Assert.True(p2.Length > 17.0f);
            Assert.True(p2.Length < 18.0f);
            Assert.True(p2.LengthSquared == 320.0f);
            Assert.True(p2.Angle != 0.0f);
            Assert.True(p1.IsOrigin);
            Assert.True(p3.X == 4.0f);
            Assert.True(p3.Y == 8.0f);
            Assert.True(((int)p4.Y) == -4);
            Assert.True(p5.Y > 0.8f);
            Assert.True(p6.Y == -8.0f);
            Assert.True(p7 == p2);
            Assert.True(f1 == p2.Length);
            Assert.True(f2 > 1.5f);
            Assert.True(f3 < 0.0f);
            Assert.True(p8.X == 4.0f);
            Assert.True(p8.Y == 8.0f);
            Assert.True(p9.X == 12.0f);
            Assert.True(p9.Y == 24.0f);
            Assert.True(p10.X == -8.0f);
            Assert.True(p10.Y == -16.0f);
            Assert.True(p11.X == p3.X);
            Assert.True(p11.Y == p3.Y);
            Assert.True(p11 == p3);
            Assert.False(p11 != p3);
            Assert.True(p3 == p13);

            SPPoint.PurgePool();

            #endregion
        }
示例#9
0
    bool Match(SPPoint point, int x, int z)
    {
        if (point == null)
        {
            return(false);
        }

        float dx = point.position.x - x;
        float dz = point.position.z - z;

        return(dx >= PETools.PEMath.Epsilon && dx <= VoxelTerrainConstants._numVoxelsPerAxis &&
               dz >= PETools.PEMath.Epsilon && dz <= VoxelTerrainConstants._numVoxelsPerAxis);
    }
示例#10
0
    public static object ReadSPPoint(uLink.BitStream stream, params object[] codecOptions)
    {
        SPPoint point = new SPPoint();

        point.transform.position = stream.Read <Vector3>();
        point.mIndex             = stream.Read <IntVector4>();
        point.mType  = stream.Read <PointType>();
        point.mNodes = new List <IntVector4>();
        IntVector4[] points = stream.Read <IntVector4[]>();
        point.mNodes.AddRange(points);

        return(point);
    }
示例#11
0
    bool Match(SPPoint point, IntVector4 node)
    {
        if (point == null)
        {
            return(false);
        }

        Rect rect = new Rect(node.x, node.z,
                             VoxelTerrainConstants._numVoxelsPerAxis << node.w,
                             VoxelTerrainConstants._numVoxelsPerAxis << node.w);
        Vector2 mark = new Vector2(point.position.x, point.position.z);

        return(rect.Contains(mark));
    }
示例#12
0
    void LoadDynamicPoints(IntVector4 node, int min, int max)
    {
        int count = Random.Range(min, max);

        for (int i = 0; i < count; i++)
        {
            Vector3 position = node.ToVector3();
            position += new Vector3(Random.Range(0.0f, VoxelTerrainConstants._numVoxelsPerAxis << node.w),
                                    0.0f,
                                    Random.Range(0.0f, VoxelTerrainConstants._numVoxelsPerAxis << node.w));

            Quaternion rot   = Quaternion.Euler(0.0f, Random.Range(0, 360), 0.0f);
            SPPoint    point = SPPoint.InstantiateSPPoint <SPPoint>(position, rot, nextIndex, transform);
            point.name = "Dynamic : " + point.name;
            RegisterSPPoint(point);
        }
    }
示例#13
0
    public void RegisterSPPoint(SPPoint point, bool updateIndex = false)
    {
        if (point == null)
        {
            return;
        }

        IntVector4 node = AiUtil.ConvertToIntVector4(point.position, 3);
        IntVector2 mark = new IntVector2(node.x, node.z);

        if (pointTable.ContainsKey(mark))
        {
            pointTable[mark].RegisterSPPoint(point);

            if (updateIndex)
            {
                point.index = pointTable[mark].nextIndex;
            }
        }
    }
示例#14
0
    void LoadUpperAirPoints(IntVector4 node, int min, int max)
    {
        GameObject carrier = null;// PlayerFactory.mMainPlayer.Carrier;

        if (carrier == null)
        {
            return;
        }

        HelicopterController hel = carrier.GetComponent <HelicopterController>();

        if (hel == null)
        {
            return;
        }

        /*
         * VCPVtolCockpitFunc vtol = hel.m_Cockpit as VCPVtolCockpitFunc;
         * if (vtol == null)
         * return;
         *
         * if (vtol.FlyingHeight < 50.0f)
         * return;
         * */

        //if (Random.value > AiManager.Manager.upperPoint)
        //    return;

        Vector3 position = node.ToVector3();

        position += new Vector3(Random.Range(0.0f, VoxelTerrainConstants._numVoxelsPerAxis << node.w),
                                0.0f,
                                Random.Range(0.0f, VoxelTerrainConstants._numVoxelsPerAxis << node.w));

        Quaternion rot   = Quaternion.Euler(0.0f, Random.Range(0, 360), 0.0f);
        SPPoint    point = SPPoint.InstantiateSPPoint <SPPoint>(position, rot, nextIndex, transform, 0, 63);

        point.name = "Upper Air : " + point.name;
        RegisterSPPoint(point);
    }
示例#15
0
    protected override SPPoint Spawn(AISpawnData spData)
    {
        base.Spawn(spData);

        Vector3    pos;
        Quaternion rot;
        Vector3    target;

        if (GetPositionAndRotation(spData, out pos, out rot, out target))
        {
            SPPointSimulate simulate = SPPoint.InstantiateSPPoint <SPPointSimulate>(pos,
                                                                                    rot,
                                                                                    IntVector4.Zero,
                                                                                    pointParent,
                                                                                    spData.isPath ? 0 : spData.spID,
                                                                                    spData.isPath ? spData.spID : 0,
                                                                                    true,
                                                                                    true,
                                                                                    false,
                                                                                    false,
                                                                                    true,
                                                                                    null,
                                                                                    OnSpawned,
                                                                                    this) as SPPointSimulate;

            simulate.SetData(damage, minInterval, maxInterval, damageRadius);
            simulate.targetPos = target;

            if (!simulates.Contains(simulate))
            {
                simulates.Add(simulate);
            }

            return(simulate);
        }

        return(null);
    }
示例#16
0
        public void Everything()
        {
            SPMatrix m1 = new SPMatrix(1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f);
            SPMatrix m2 = new SPMatrix();
            SPMatrix m3 = new SPMatrix();
            SPMatrix m4 = m1.Clone();
            SPMatrix m5 = m1.Clone();
            SPMatrix m6 = m1.Clone();
            SPPoint p1 = new SPPoint(5.0f, 10.0f);
            SPPoint p2 = m1.Transform(p1);

            m3.Set(1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f);
            m5.SetIdentity();
            m6.Rotate(20.0f);
            m6.Scale(10.0f);
            m6.Scale(1.5f, 2.0f);
            m6.Translate(5.0f, 3.0f);
            m6.Invert();
            m6.Concat(m1);

            Assert.True(m1.A == 1.0f);
            Assert.True(m1.B == 2.0f);
            Assert.True(m1.C == 3.0f);
            Assert.True(m1.D == 4.0f);
            Assert.True(m1.Tx == 5.0f);
            Assert.True(m1.Ty == 6.0f);
            Assert.True(m1.Determinant != 0.0f);

            Assert.False(m1 == m2);
            Assert.True(m1 != m2);
            Assert.True(m1 == m3);
            Assert.False(m1 != m3);
            Assert.True(m1 == m4);
            Assert.True(m2 == m5);
            Assert.False(p1 == p2);
        }
示例#17
0
    void LoadNoisePoints(IntVector4 node, int minCount, int maxCount)
    {
        int nx = node.x >> VoxelTerrainConstants._shift >> node.w;
        int nz = node.z >> VoxelTerrainConstants._shift >> node.w;

        float noise       = (float)mNoise.Noise(nx, nz, nx + nz);
        int   randomCount = Mathf.FloorToInt((maxCount - minCount) * noise);
        int   count       = Mathf.Clamp(minCount + randomCount, minCount, maxCount);
        int   length      = VoxelTerrainConstants._numVoxelsPerAxis << node.w;

        for (int i = 0; i < count; i++)
        {
            float ox = (float)mNoise.Noise(nx, (nx + nz) * i) * 0.5f + 0.5f;
            float oz = (float)mNoise.Noise(nz, (nx - nz) * i) * 0.5f + 0.5f;

            Vector3    pos   = new Vector3(node.x + ox * length, node.y, node.z + oz * length);
            Quaternion rot   = Quaternion.Euler(0.0f, UnityEngine.Random.Range(0, 360), 0.0f);
            SPPoint    point = SPPoint.InstantiateSPPoint <SPPoint>(pos, rot, nextIndex, transform, 0, 0, true, true, false, true, true, mNoise);
            point.name = "Noise : " + point.name;
            RegisterSPPoint(point);

            //Debug.LogError("Noise normal ai point : " + pos);
        }
    }
        public void HitTestPoint()
        {
            #region ...

            SPStage stage = new SPStage();
            SPDisplayObject obj1 = new SPQuad();
            SPPoint p1 = new SPPoint(5.0f, 5.0f);

            stage.Add(obj1);

            SPDisplayObject obj2 = stage.HitTest(p1, true);

            Assert.NotNull(obj2);

            #endregion
        }
        public void LocalToGlobal()
        {
            #region ...

            SPStage stage = new SPStage();
            SPDisplayObject obj = new SPQuad();
            SPPoint p1 = new SPPoint(5.0f, 5.0f);

            stage.Add(obj);

            SPPoint p2 = obj.LocalToGlobal(p1);

            Assert.NotNull(p2);

            #endregion
        }