Example #1
0
    public Character Refresh(excel_refresh refreshExcel, Scene scn)
    {
        int       index          = Mathf.RandRange(0, refreshExcel.birthpoint.Length - 1);
        string    birthPointName = refreshExcel.birthpoint[index];
        MarkPoint markPoint      = GetMarkPoint(scn.ScnID, birthPointName);

        if (markPoint == null)
        {
            return(null);
        }
        Vector3 targetPos = markPoint.position;
        Vector3 dir       = new Vector3(Mathf.RandRange(-1.0f, 1.0f), 0.0f, Mathf.RandRange(-1.0f, 1.0f));

        dir.Normalize();
        float dist = Mathf.RandRange(0.0f, 1.0f) * refreshExcel.refreshDist;

        targetPos += (dist * dir);
        Vector3 hitPos = Vector3.zero;

        uint layer = NavigationSystem.GetLayer(markPoint.position);

        if (NavigationSystem.LineCast(markPoint.position, targetPos, layer, out hitPos))
        {
            targetPos = hitPos;
        }
        float h = 0.0f;

        if (NavigationSystem.GetLayerHeight(targetPos, layer, out h))
        {
            targetPos.y = h;
        }
        NPC npc = new NPC();

        return(npc);
    }
Example #2
0
    public void UpdateMesh()
    {
        if (mMeshFilter == null)
        {
            return;
        }
        if (mMeshFilter.mesh == null)
        {
            return;
        }
        Vector3[] vs = new Vector3[mMeshFilter.mesh.vertexCount];
        for (int i = 0; i < mMeshFilter.mesh.vertexCount; ++i)
        {
            Vector3 v = mMeshFilter.mesh.vertices[i];
            v = transform.localToWorldMatrix.MultiplyPoint(v);

            float h = 0.0f;
            if (!NavigationSystem.GetLayerHeight(v, mNavLayer, out h))
            {
//				mNavSys.GetLayer(v, out mNavLayer);
                h = transform.position.y;
            }
            v.y  = h;
            v.y += offsetY;

            v     = transform.worldToLocalMatrix.MultiplyPoint(v);
            vs[i] = v;
        }
        mMeshFilter.mesh.vertices = vs;
    }
Example #3
0
    protected void UpdateMove()
    {
        if (mPosDirty)
        {
            UpdateVisibleInfo();
            mPosDirty = false;
        }
        if (!IsCannotFlag(CannotFlag.CannotMove) && Speed > 0.0f)
        {
            Position += mSpeed * Time.DeltaTime * Direction;
            float h;
            if (NavigationSystem.GetLayerHeight(Position, mNavLayer, out h))
            {
                Vector3 pos = Position;
                pos.y    = h;
                Position = pos;
            }
            else
            {
                mNavLayer = NavigationSystem.GetLayer(Position);
            }
        }

        UpdateSearchMove();
    }
Example #4
0
    public override bool LogicTick()
    {
        if (mMoveData == null)
        {
            return(false);
        }
        float time = Time.realtimeSinceStartup - mStartTime;

        if (mMoveData.mMoveDataType == SkillMoveDataType.MoveType1)
        {
            SkillMoveData1 moveData = mMoveData as SkillMoveData1;

            float   t      = time / moveData.mTime;
            Vector3 dir    = moveData.mDestPos - moveData.mSrcPos;
            Vector3 curPos = moveData.mSrcPos + dir * t;
            Vector3 curDir = dir.normalized;
            mOwner.Position  = curPos;
            mOwner.Direction = curDir;

            if (time >= moveData.mTime)
            {
                return(false);
            }
        }
        if (mMoveData.mMoveDataType == SkillMoveDataType.MoveType2)
        {
            SkillMoveData2 moveData = mMoveData as SkillMoveData2;

            Vector3 curPos = moveData.mSrcPos + moveData.mTime * moveData.mSpeed * moveData.mDir;
            mOwner.Position  = curPos;
            mOwner.Direction = moveData.mDir;

            if (time >= moveData.mTime)
            {
                return(false);
            }
        }

        Vector3 pos = mOwner.Position;

        pos.y += 10.0f;
        float h = 0.0f;

        if (NavigationSystem.GetLayerHeight(pos, mOwner.NavLayer, out h))
        {
            pos.y           = h;
            mOwner.Position = pos;
        }

        return(true);
    }
Example #5
0
    public override void Exit()
    {
        if (mMoveData.mMoveDataType == SkillMoveDataType.MoveType1)
        {
            SkillMoveData1 moveData = mMoveData as SkillMoveData1;

            mOwner.Position = moveData.mDestPos;
        }

        Vector3 pos = mOwner.Position;

        pos.y += 10.0f;
        float h = 0.0f;

        if (NavigationSystem.GetLayerHeight(pos, mOwner.NavLayer, out h))
        {
            pos.y           = h;
            mOwner.Position = pos;
        }
    }
Example #6
0
    protected void UpdateMove()
    {
        if (SyncMove == null)
        {
            return;
        }
        SyncMove.LogicTick();

        if (mDirectionChg)
        {
            transform.forward = mDirection;
            mDirectionChg     = false;
        }
        if (!IsCannotFlag(CannotFlag.CannotMove) && MoveSpeed > 0.0f)
        {
            Vector3 deltaPos = mSpeed * Time.fixedDeltaTime * mDirection;
            deltaPos.y      = 0.0f;
            mLogicPosition += deltaPos;

            Vector3 edgePoint0, edgePoint1;
            Vector3 hitPoint;
            if (NavigationSystem.LineCastEdge(transform.position, mLogicPosition, NavLayer, out hitPoint, out edgePoint0, out edgePoint1))
            {
                Vector3 dir0 = edgePoint1 - edgePoint0;
                dir0.y = 0.0f;
                dir0.Normalize();
                Vector3 dir1 = -dir0;
                Vector3 dir3 = transform.forward;
                dir3.Normalize();

                float cos0 = Vector3.Dot(dir0, dir3);
                float cos1 = Vector3.Dot(dir1, dir3);

                if (cos0 > cos1)
                {
                    mLogicPosition.x = transform.position.x + Time.fixedDeltaTime * MoveSpeed * 0.5f * dir0.x;
                    mLogicPosition.z = transform.position.z + Time.fixedDeltaTime * MoveSpeed * 0.5f * dir0.z;
                }
                else
                {
                    mLogicPosition.x = transform.position.x + Time.fixedDeltaTime * MoveSpeed * 0.5f * dir1.x;
                    mLogicPosition.z = transform.position.z + Time.fixedDeltaTime * MoveSpeed * 0.5f * dir1.z;
                }
                if (!NavigationSystem.LineTest(transform.position, mLogicPosition, NavLayer))
                {
                    float height;
                    if (NavigationSystem.GetLayerHeight(mLogicPosition, NavLayer, out height))
                    {
                        mLogicPosition.y = height;
                    }
                    transform.position = mLogicPosition;
                }
            }
            else
            {
                float height;
                if (NavigationSystem.GetLayerHeight(mLogicPosition, NavLayer, out height))
                {
                    mLogicPosition.y = height;
                }
                transform.position = mLogicPosition;
            }

            mLogicPosition = transform.position;
            // transform.position = mLogicPosition;
        }

        UpdateSearchMove();
    }
Example #7
0
    void LateUpdate()
    {
        if (mArriveTargetPos)
        {
            return;
        }

        Vector3 targetPos  = mContext.mOwner.Position;
        bool    onLand     = false;
        bool    onParabola = false;


        ChildObjectMoveType mt = (ChildObjectMoveType)mData.moveType;

        switch (mt)
        {
        case ChildObjectMoveType.FlyToTarget:
        {
            if (mTarget != null)
            {
                targetPos = mTarget.Position;
            }
            break;
        }

        case ChildObjectMoveType.FlyToTargetPos:
        {
            targetPos = mContext.TargetPos;
            break;
        }

        case ChildObjectMoveType.FlyToTarget_OnLand:
        {
            if (mTarget != null)
            {
                targetPos = mTarget.Position;
            }
            onLand = true;
            break;
        }

        case ChildObjectMoveType.FlyToTargetPos_OnLand:
        {
            targetPos = mContext.TargetPos;
            onLand    = true;
            break;
        }

        case ChildObjectMoveType.None:
        {
            return;
        }

        case ChildObjectMoveType.Bind:
        case ChildObjectMoveType.BindPos:
        {
            FollowInitPos(mt);
            return;
        }
        }

        Vector3 dir = targetPos - Position;

        if (dir.Length() <= size)
        {
            mArriveTargetPos = true;
            DoEvent(SkillEventTriggerType.Frame, mTick);
            DoLoopEvent();
            return;
        }

        dir.Normalize();
        if (onParabola)
        {
            float t = Time.DeltaTime;
            dir = Vector3.Lerp(Direction, dir, 5 * t);
            dir.Normalize();
        }
        Direction = dir;
        Position += (dir * (float)mData.speed * 0.001f * Time.DeltaTime);

        Vector3 curDir = targetPos - Position;

        curDir.Normalize();
        if (Vector3.Angle(curDir, dir) > 90.0f)
        {
            mArriveTargetPos = true;
            DoEvent(SkillEventTriggerType.Frame, mTick);
            DoLoopEvent();
            return;
        }

        if (onLand)
        {
            float height = Position.y;
            if (NavigationSystem.GetLayerHeight(Position, mNavLayer, out height))
            {
                Vector3 pos = Position;
                pos.y    = height + ((float)mData.yOffset * 0.001f);
                Position = pos;
            }
        }
    }
Example #8
0
    public void BuildMesh()
    {
        if (mMeshFilter == null)
        {
            return;
        }
        if (mMeshRenderer == null)
        {
            return;
        }
        mMeshRenderer.material = material;

        if (material == null)
        {
            mMeshFilter.mesh = null;
            return;
        }

        verts.Clear();
        uvs.Clear();
        indices.Clear();
        {
            int pointCountX = mSegCountX + 1;
            int pointCountZ = mSegCountZ + 1;

            Vector3 size = transform.lossyScale;
            Vector3 min  = -size * 0.5f;
            Vector3 max  = size * 0.5f;
            min.y  = 0.0f;
            max.y  = 0.0f;
            min.x -= areaSizeOffset.x;
            max.x += areaSizeOffset.x;
            min.z -= areaSizeOffset.y;
            max.z += areaSizeOffset.y;
            size   = (max - min);

            float   lenX  = size.x;
            float   lenZ  = size.z;
            float   cellX = lenX / mSegCountX;
            float   cellZ = lenZ / mSegCountZ;
            Vector3 ux    = new Vector3(transform.right.x, 0.0f, transform.right.z);
            ux.Normalize();
            Vector3 uz = new Vector3(transform.forward.x, 0.0f, transform.forward.z);
            uz.Normalize();
            Vector3 upos = transform.position;
            for (int i = 0; i < pointCountZ; ++i)
            {
                for (int j = 0; j < pointCountX; ++j)
                {
                    Vector3 vx = cellX * (float)j * ux;
                    Vector3 vy = cellZ * (float)i * uz;
                    Vector3 u  = vx + vy;
                    u += upos;
                    u -= (lenX * 0.5f * ux + lenZ * 0.5f * uz);
                    Vector3 vert = new Vector3(u.x, transform.position.y, u.z);

                    Vector2 uv = new Vector2((float)j / mSegCountX, (float)i / mSegCountZ);
                    float   h  = 0.0f;
                    if (!NavigationSystem.GetLayerHeight(vert, mNavLayer, out h))
                    {
                        //mNavLayer = NavigationSystem.GetLayer(vert);
                        h = transform.position.y;
                    }
                    vert.y = h + offsetY;// - transform.position.y;

                    vert = transform.worldToLocalMatrix.MultiplyPoint(vert);
                    verts.Add(vert);
                    uvs.Add(uv);
                }
            }
            for (int i = 0; i < mSegCountZ; ++i)
            {
                for (int j = 0; j < mSegCountX; ++j)
                {
                    int ptCount = (int)pointCountX;
                    indices.Add((i + 1) * ptCount + j);

                    indices.Add((i + 1) * ptCount + (j + 1));
                    indices.Add(i * ptCount + j);

                    indices.Add(i * ptCount + (j + 1));

                    indices.Add(i * ptCount + j);
                    indices.Add((i + 1) * ptCount + (j + 1));
                }
            }
        }

        Mesh mesh = null;

        if (mMeshFilter.mesh != null)
        {
            mesh = mMeshFilter.mesh;
        }
        else
        {
            mesh = new Mesh();
        }
        mesh.vertices  = verts.ToArray();
        mesh.uv        = uvs.ToArray();
        mesh.triangles = indices.ToArray();

        verts.Clear();
        uvs.Clear();
        indices.Clear();

        if (mesh != null)
        {
            mesh.name = "NavMeshDecal";
        }
        mMeshFilter.mesh = mesh;
    }