Beispiel #1
0
    private static void FindHangPoint(Transform root, Transform trans, SerializedProperty transNameProperty, SerializedProperty transProperty, HangPointItem hangPointItem)
    {
        int count = trans.childCount;

        for (int i = 0; i < count; i++)
        {
            var child = trans.GetChild(i);
            if (child.tag == "HangPoint_Transform" && transNameProperty != null && transProperty != null)
            {
                transNameProperty.InsertArrayElementAtIndex(transNameProperty.arraySize);
                transProperty.InsertArrayElementAtIndex(transProperty.arraySize);
                var prop    = transNameProperty.GetArrayElementAtIndex(transNameProperty.arraySize - 1);
                var objPorp = transProperty.GetArrayElementAtIndex(transProperty.arraySize - 1);
                prop.stringValue             = child.name;
                objPorp.objectReferenceValue = child;
            }
            else if (child.tag == "HangPoint_Position" && hangPointItem != null)
            {
                HangPointData hangPointData = new HangPointData();
                hangPointData.name = child.name;
                var pos      = child.position;
                var localPos = root.InverseTransformPoint(pos);
                hangPointData.position = new TSVector(FP.FromFloat(localPos.x), FP.FromFloat(localPos.y), FP.FromFloat(localPos.z));

                var forward      = child.forward;
                var localForward = root.InverseTransformDirection(forward);
                hangPointData.forward = new TSVector(FP.FromFloat(localForward.x), FP.FromFloat(localForward.y), FP.FromFloat(localForward.z));
                hangPointItem.mLstData.Add(hangPointData);
            }
            FindHangPoint(root, child, transNameProperty, transProperty, hangPointItem);
        }
    }
    // tnISyncablePlayerInput's interface

    public void SyncedInput(tnInput o_Input)
    {
        Vector2 input = new Vector2(m_HorizontalAxis, m_VerticalAxis);

        if (input.sqrMagnitude > 1f)
        {
            input.Normalize();
        }

        if (m_EnableInputCompression)
        {
            int intX = (int)(input.x * s_InputPrecision);
            int intY = (int)(input.y * s_InputPrecision);

            o_Input.SetInt(m_HorizontalAxisCode, intX);
            o_Input.SetInt(m_VerticalAxisCode, intY);
        }
        else
        {
            o_Input.SetFP(m_HorizontalAxisCode, FP.FromFloat(input.x));
            o_Input.SetFP(m_VerticalAxisCode, FP.FromFloat(input.y));
        }

        if (m_DashRequested)
        {
            o_Input.SetByte(m_DashRequestedCode, (byte)1);
            m_DashRequested = false;
        }
    }
    private static void FindCollider(Transform root, Transform trans, GameColliderItem gameColliderItem)
    {
        int count = trans.childCount;

        for (int i = 0; i < count; i++)
        {
            var child = trans.GetChild(i);
            if (child.tag == "GameCollider" && gameColliderItem != null)
            {
                Collider collider = child.GetComponent <Collider>();
                if (collider != null)
                {
                    var scale = child.lossyScale;
                    collider.enabled = false;
                    if (scale.x != 1 || scale.y != 1 || scale.z != 1)
                    {
                        EditorUtility.DisplayDialog("提示", "child=" + child.name + "不能有缩放", "知道了");
                        return;
                    }
                    if (collider is SphereCollider)
                    {
                        SphereCollider     sphereCollider = (SphereCollider)collider;
                        CircleColliderData colliderData   = new CircleColliderData();
                        colliderData.name             = child.name;
                        colliderData.gameColliderType = GameColliderType.CircleCollider;
                        Vector3 center      = child.TransformPoint(sphereCollider.center);
                        var     localCenter = root.InverseTransformPoint(center);
                        colliderData.center = new TSVector(FP.FromFloat(localCenter.x), 0, FP.FromFloat(localCenter.z));
                        var localForward = child.forward;
                        colliderData.forward = new TSVector(FP.FromFloat(localForward.x), 0, FP.FromFloat(localForward.z));

                        colliderData.radius = FP.FromFloat(sphereCollider.radius);
                        gameColliderItem.mLstData.Add(colliderData);
                    }
                    else if (collider is BoxCollider)
                    {
                        BoxCollider      boxCollider  = (BoxCollider)collider;
                        RectColliderData colliderData = new RectColliderData();
                        colliderData.name             = child.name;
                        colliderData.gameColliderType = GameColliderType.RectCollider;
                        Vector3 center      = child.TransformPoint(boxCollider.center);
                        var     localCenter = root.InverseTransformPoint(center);
                        colliderData.center = new TSVector(FP.FromFloat(localCenter.x), 0, FP.FromFloat(localCenter.z));
                        var localForward = child.forward;
                        colliderData.forward    = new TSVector(FP.FromFloat(localForward.x), 0, FP.FromFloat(localForward.z));
                        colliderData.halfWidth  = FP.FromFloat(boxCollider.size.x / 2f);
                        colliderData.halfHeight = FP.FromFloat(boxCollider.size.z / 2f);
                        gameColliderItem.mLstData.Add(colliderData);
                    }
                    else
                    {
                        EditorUtility.DisplayDialog("提示", "暂时不支持" + collider.GetType().ToString() + "碰撞框(请删除它再重试)", "知道了");
                        return;
                    }
                }
            }
            FindCollider(root, child, gameColliderItem);
        }
    }
Beispiel #4
0
 private void OnJoystickMove(Vector2 vector2)
 {
     if (PvpPlayerMgr.Instance.mainPlayer != null && PvpPlayerMgr.Instance.mainPlayer.unit != null)
     {
         if (vector2.magnitude > minDirLen)
         {
             var dir = new TSVector(FP.FromFloat(vector2.x), 0, FP.FromFloat(vector2.y));
             dir.Normalize();
             PvpPlayerMgr.Instance.mainPlayer.unit.ReqMoveForward(dir);
         }
     }
 }
Beispiel #5
0
 void Update()
 {
     if (c2d_collider != null)
     {
         var pos = transform.position;
         c2d_collider.center = new TSVector2(FP.FromFloat(pos.x), FP.FromFloat(pos.y));
     }
     if (other != null)
     {
         if (c2d_collider.CheckCollider(other.c2d_collider))
         {
             CLog.Log("碰撞");
         }
     }
 }
Beispiel #6
0
    void OnGUI()
    {
        if (GUI.Button(new Rect(0, 0, 100, 50), "计算碰撞"))
        {
            var offset = To(B.position) - To(A.position);
            if (TSCheck2D.CheckRectangleAndLine(To(Box.position), To(Box.forward), FP.FromFloat(Box.localScale.x / 2f), FP.FromFloat(Box.localScale.z / 2f), To(A.position), ref offset))
            {
                Debug.Log("碰撞成功");
                if (go == null)
                {
                    go = GameObject.CreatePrimitive(PrimitiveType.Sphere);
                    go.transform.localScale = new Vector3(0.2f, 0.2f, 0.2f);
                }
                go.transform.position = A.position + new Vector3(offset.x.AsFloat(), 0, offset.y.AsFloat());
            }
            else
            {
                Debug.Log("碰撞失败");
            }
        }

        if (GUI.Button(new Rect(100, 0, 100, 50), "计算AABB碰撞"))
        {
            var offset = To(B.position) - To(A.position);
            FP  result = TSCheck2D.CheckAabbAndLine(To(Box.position), FP.FromFloat(Box.localScale.x / 2f), FP.FromFloat(Box.localScale.z / 2f), To(A.position), offset.normalized, offset.magnitude);
            if (result >= 0)
            {
                Debug.Log("碰撞成功");
                if (go == null)
                {
                    go = GameObject.CreatePrimitive(PrimitiveType.Sphere);
                    go.transform.localScale = new Vector3(0.2f, 0.2f, 0.2f);
                }
                TSVector2 resultOffset = offset.normalized * result;
                go.transform.position = A.position + new Vector3(resultOffset.x.AsFloat(), 0, resultOffset.y.AsFloat());
            }
            else
            {
                Debug.Log("碰撞失败");
                if (go != null)
                {
                    GameObject.Destroy(go);
                    go = null;
                }
            }
        }
    }
    // tnISyncablePlayerInput's interface

    public void SyncedInput(tnInput o_Input)
    {
        float horizontalAxis = m_CharacterInput.GetAxis(InputActions.s_HorizontalAxis);
        float verticalAxis   = m_CharacterInput.GetAxis(InputActions.s_VerticalAxis);

        bool buttonPressed = m_CharacterInput.GetButton(InputActions.s_PassButton);

        if (m_EnableInputCompression)
        {
            int intX = (int)(horizontalAxis * s_InputPrecision);
            int intY = (int)(verticalAxis * s_InputPrecision);

            o_Input.SetInt(m_HorizontalAxisCode, intX);
            o_Input.SetInt(m_VerticalAxisCode, intY);
        }
        else
        {
            o_Input.SetFP(m_HorizontalAxisCode, FP.FromFloat(horizontalAxis));
            o_Input.SetFP(m_VerticalAxisCode, FP.FromFloat(verticalAxis));
        }

        o_Input.SetByte(m_ButtonPressedCode, buttonPressed ? (byte)1 : (byte)0);
    }
Beispiel #8
0
    void Start()
    {
        Collider2D collider = GetComponent <Collider2D>();
        var        pos      = transform.position;
        var        up       = transform.up;
        var        scale    = transform.lossyScale;

        if (collider != null)
        {
            if (collider is BoxCollider2D)
            {
                var   c          = (BoxCollider2D)collider;
                float halfWidth  = scale.x * c.size.x / 2;
                float halfHeight = scale.y * c.size.y / 2;
                c2d_collider = new C2D_Rect(new TSVector2(FP.FromFloat(pos.x), FP.FromFloat(pos.y)), new TSVector2(FP.FromFloat(up.x), FP.FromFloat(up.y)), FP.FromFloat(halfWidth), FP.FromFloat(halfHeight));
            }
            else if (collider is CircleCollider2D)
            {
                var   c      = (CircleCollider2D)collider;
                float radius = Mathf.Max(scale.x, scale.y) * c.radius;
                c2d_collider = new C2D_Circle(new TSVector2(FP.FromFloat(pos.x), FP.FromFloat(pos.y)), new TSVector2(FP.FromFloat(up.x), FP.FromFloat(up.y)), FP.FromFloat(radius));
            }
        }
    }
Beispiel #9
0
        public static void Draw(NEDataProperty[] properties, params GUILayoutOption[] options)
        {
            if (properties == null)
            {
                return;
            }
            EditorGUILayout.BeginVertical(options);

            foreach (NEDataProperty property in properties)
            {
                object oldValue = property.GetValue();
                object newValue = null;
                switch (property.Type)
                {
                case NEDatapRropertyType.Integer:
                    EditorGUILayout.BeginHorizontal();
                    EditorGUILayout.LabelField(property.Name);
                    EditorGUILayout.EndHorizontal();
                    EditorGUILayout.BeginHorizontal();
                    Space(3);
                    newValue = EditorGUILayout.IntField((int)oldValue, options);
                    EditorGUILayout.EndHorizontal();
                    break;

                case NEDatapRropertyType.Float:
                    EditorGUILayout.BeginHorizontal();
                    EditorGUILayout.LabelField(property.Name);
                    EditorGUILayout.EndHorizontal();
                    EditorGUILayout.BeginHorizontal();
                    Space(3);
                    newValue = EditorGUILayout.FloatField((float)oldValue, options);
                    EditorGUILayout.EndHorizontal();
                    break;

                case NEDatapRropertyType.FP:
                    EditorGUILayout.BeginHorizontal();
                    EditorGUILayout.LabelField(property.Name);
                    EditorGUILayout.EndHorizontal();
                    EditorGUILayout.BeginHorizontal();
                    Space(3);
                    float oldFloatValue = ((FP)oldValue).AsFloat();
                    float newFloatValue = EditorGUILayout.FloatField(oldFloatValue, options);
                    newValue = FP.FromFloat(newFloatValue);
                    EditorGUILayout.EndHorizontal();
                    break;

                case NEDatapRropertyType.Boolean:
                    EditorGUILayout.BeginHorizontal();
                    EditorGUILayout.LabelField(property.Name);
                    EditorGUILayout.EndHorizontal();
                    EditorGUILayout.BeginHorizontal();
                    Space(3);
                    newValue = EditorGUILayout.Toggle((bool)oldValue, options);
                    EditorGUILayout.EndHorizontal();
                    break;

                case NEDatapRropertyType.String:
                    EditorGUILayout.BeginHorizontal();
                    EditorGUILayout.LabelField(property.Name);
                    EditorGUILayout.EndHorizontal();
                    EditorGUILayout.BeginHorizontal();
                    Space(3);
                    newValue = EditorGUILayout.TextField((String)oldValue, options);
                    EditorGUILayout.EndHorizontal();
                    break;

                case NEDatapRropertyType.Vector2:
                    newValue = EditorGUILayout.Vector2Field(property.Name, (Vector2)oldValue, options);
                    break;

                case NEDatapRropertyType.Vector3:
                    newValue = EditorGUILayout.Vector3Field(property.Name, (Vector3)oldValue, options);
                    break;

                case NEDatapRropertyType.Enum:
                    EditorGUILayout.BeginHorizontal();
                    EditorGUILayout.LabelField(property.Name);
                    EditorGUILayout.EndHorizontal();
                    EditorGUILayout.BeginHorizontal();
                    Space(3);
                    newValue = EditorGUILayout.EnumPopup((Enum)oldValue, options);
                    EditorGUILayout.EndHorizontal();
                    break;

                case NEDatapRropertyType.Array:
                    EditorGUILayout.BeginHorizontal();
                    property.isShow = EditorGUILayout.Foldout(property.isShow, property.Name);
                    EditorGUILayout.EndHorizontal();
                    newValue = property.GetValue();
                    if (property.isShow)
                    {
                        EditorGUILayout.BeginHorizontal();
                        Space(3);
                        int oldLen = property.GetArrayLen();
                        int newLen = EditorGUILayout.IntField("Len:", oldLen, options);
                        if (oldLen != newLen)
                        {
                            property.SetArrayLen(newLen);
                        }
                        EditorGUILayout.EndHorizontal();

                        EditorGUILayout.BeginHorizontal();
                        Space(3);
                        var array = newValue as Array;

                        if (array != null)
                        {
                            DrawArray(array, options);
                        }
                        EditorGUILayout.EndHorizontal();
                    }
                    break;

                default:
                    break;
                }

                if (oldValue != newValue)
                {
                    property.SetValue(newValue);
                }
            }

            EditorGUILayout.EndVertical();
        }
Beispiel #10
0
        public static void DrawArray(Array array, params GUILayoutOption[] options)
        {
            EditorGUILayout.BeginVertical();
            //Space(3);
            Type type = array.GetType().GetElementType();

            for (int i = 0; i < array.Length; i++)
            {
                EditorGUILayout.BeginHorizontal();
                var oldValue = array.GetValue(i);
                if (type == typeof(int))
                {
                    var newValue = EditorGUILayout.IntField(i.ToString(), (int)oldValue, options);
                    if (newValue != (int)oldValue)
                    {
                        array.SetValue(newValue, i);
                    }
                }
                else if (type == typeof(float))
                {
                    var newValue = EditorGUILayout.FloatField(i.ToString(), (float)oldValue, options);
                    if (newValue != (float)oldValue)
                    {
                        array.SetValue(newValue, i);
                    }
                }
                else if (type == typeof(FP))
                {
                    float oldFloatValue = ((FP)oldValue).AsFloat();
                    float newFloatValue = EditorGUILayout.FloatField(i.ToString(), oldFloatValue, options);
                    var   newValue      = FP.FromFloat(newFloatValue);
                    if (newValue != (FP)oldValue)
                    {
                        array.SetValue(newValue, i);
                    }
                }
                else if (type == typeof(bool))
                {
                    var newValue = EditorGUILayout.Toggle(i.ToString(), (bool)oldValue, options);
                    if (newValue != (bool)oldValue)
                    {
                        array.SetValue(newValue, i);
                    }
                }
                else if (type == typeof(string))
                {
                    var newValue = EditorGUILayout.TextField(i.ToString(), (string)oldValue, options);
                    if (newValue != (string)oldValue)
                    {
                        array.SetValue(newValue, i);
                    }
                }
                else if (type == typeof(Vector2))
                {
                    var newValue = EditorGUILayout.Vector2Field(i.ToString(), (Vector2)oldValue, options);
                    if (newValue != (Vector2)oldValue)
                    {
                        array.SetValue(newValue, i);
                    }
                }
                else if (type == typeof(Vector3))
                {
                    var newValue = EditorGUILayout.Vector3Field(i.ToString(), (Vector3)oldValue, options);
                    if (newValue != (Vector3)oldValue)
                    {
                        array.SetValue(newValue, i);
                    }
                }
                else if (type.IsEnum)
                {
                    var newValue = EditorGUILayout.EnumPopup(i.ToString(), (Enum)oldValue, options);
                    if (newValue != (Enum)oldValue)
                    {
                        array.SetValue(newValue, i);
                    }
                }
                EditorGUILayout.EndHorizontal();
            }
            EditorGUILayout.EndVertical();
        }
Beispiel #11
0
    void Update()
    {
        //var offset = To(B.position) - To(A.position);
        //FP result = TSCheck2D.CheckAabbAndLine(To(Box.position), FP.FromFloat(Box.localScale.x / 2f), FP.FromFloat(Box.localScale.z / 2f), To(A.position), offset.normalized, offset.magnitude);
        //if (result >= 0)
        //{
        //    if (go == null)
        //    {
        //        go = GameObject.CreatePrimitive(PrimitiveType.Sphere);
        //        go.transform.localScale = new Vector3(0.2f, 0.2f, 0.2f);
        //    }
        //    TSVector2 resultOffset = offset.normalized * result;
        //    go.transform.position = A.position + new Vector3(resultOffset.x.AsFloat(), 0, resultOffset.y.AsFloat());
        //}
        //else
        //{
        //    if (go != null)
        //    {
        //        GameObject.Destroy(go);
        //        go = null;
        //    }
        //}

        //var offset = To(B.position) - To(A.position);
        //if (TSCheck2D.CheckRectangleAndLine(To(Box.position), To(Box.forward), FP.FromFloat(Box.localScale.x / 2f), FP.FromFloat(Box.localScale.z / 2f), To(A.position), ref offset))
        //{
        //    if (go == null)
        //    {
        //        go = GameObject.CreatePrimitive(PrimitiveType.Sphere);
        //        go.transform.localScale = new Vector3(0.2f, 0.2f, 0.2f);
        //    }
        //    go.transform.position = A.position + new Vector3(offset.x.AsFloat(), 0, offset.y.AsFloat());
        //}
        //else
        //{
        //    if (go != null)
        //    {
        //        GameObject.Destroy(go);
        //        go = null;
        //    }
        //}

        //if (TSCheck2D.CheckRectangleAndPos(To(Box.position), To(Box.forward), FP.FromFloat(Box.localScale.x / 2f), FP.FromFloat(Box.localScale.z / 2f), To(A.position)))
        //{
        //    if (go == null)
        //    {
        //        go = GameObject.CreatePrimitive(PrimitiveType.Sphere);
        //        go.transform.localScale = new Vector3(0.2f, 0.2f, 0.2f);
        //    }
        //    go.transform.position = A.position;
        //}
        //else
        //{
        //    if (go != null)
        //    {
        //        GameObject.Destroy(go);
        //        go = null;
        //    }
        //}

        //FP dis = TSCheck2D.DistanceFromPointToLine(To(Box.position), To(A.position), To(B.position));
        //Debug.Log(dis);

        //var offset = To(B.position) - To(A.position);
        //TSVector2 crossPoint;
        //if (TSCheck2D.CheckCicleAndLine(To(A.position), offset,To(Sphere.position),FP.FromFloat(Sphere.localScale.x / 2),out crossPoint))
        //{
        //    if (go == null)
        //    {
        //        go = GameObject.CreatePrimitive(PrimitiveType.Sphere);
        //        go.transform.localScale = new Vector3(0.2f, 0.2f, 0.2f);
        //    }
        //    go.transform.position = new Vector3(crossPoint.x.AsFloat(),0,crossPoint.y.AsFloat());
        //}
        //else
        //{
        //    if (go != null)
        //    {
        //        GameObject.Destroy(go);
        //        go = null;
        //    }
        //}

        if (TSCheck2D.CheckRectangleAndCircle(To(Box.position), To(Box.forward), FP.FromFloat(Box.localScale.x / 2f), FP.FromFloat(Box.localScale.z / 2f), To(Sphere.position), FP.FromFloat(Sphere.localScale.x / 2)))
        {
            if (go == null)
            {
                go = GameObject.CreatePrimitive(PrimitiveType.Sphere);
                go.transform.localScale = new Vector3(0.2f, 0.2f, 0.2f);
            }
            go.transform.position = new Vector3(2, 0, 0);
        }
        else
        {
            if (go != null)
            {
                GameObject.Destroy(go);
                go = null;
            }
        }
    }
Beispiel #12
0
 private TSVector2 To(Vector3 pos)
 {
     return(new TSVector2(FP.FromFloat(pos.x), FP.FromFloat(pos.z)));
 }
Beispiel #13
0
 static private float div2(float n1, float n2)
 {
     return(FP.ToFloat((FP.FromFloat(n1) / FP.FromFloat(n2))));
 }
Beispiel #14
0
 static private float mul2(float n1, float n2)
 {
     return(FP.ToFloat((FP.FromFloat(n1) * FP.FromFloat(n2))));
 }
Beispiel #15
0
 static private float sub2(float n1, float n2)
 {
     return(FP.ToFloat((FP.FromFloat(n1) - FP.FromFloat(n2))));
 }
Beispiel #16
0
 static private float add2(float n1, float n2)
 {
     return(FP.ToFloat((FP.FromFloat(n1) + FP.FromFloat(n2))));
 }