Ejemplo n.º 1
0
        /**
         * <summary>Serialises appropriate GameObject values into a string.</summary>
         * <returns>The data, serialised as a string</returns>
         */
        public TransformData SaveTransformData()
        {
            TransformData transformData = new TransformData();

            transformData.objectID      = constantID;
            transformData.savePrevented = savePrevented;

            switch (transformSpace)
            {
            case GlobalLocal.Global:
            {
                transformData.LocX = transform.position.x;
                transformData.LocY = transform.position.y;
                transformData.LocZ = transform.position.z;

                Char attachedChar = transform.GetComponent <Char> ();
                if (attachedChar != null)
                {
                    transformData.RotX = attachedChar.TransformRotation.eulerAngles.x;
                    transformData.RotY = attachedChar.TransformRotation.eulerAngles.y;
                    transformData.RotZ = attachedChar.TransformRotation.eulerAngles.z;
                }
                else
                {
                    transformData.RotX = transform.eulerAngles.x;
                    transformData.RotY = transform.eulerAngles.y;
                    transformData.RotZ = transform.eulerAngles.z;
                }
            }
            break;

            case GlobalLocal.Local:
            {
                transformData.LocX = transform.localPosition.x;
                transformData.LocY = transform.localPosition.y;
                transformData.LocZ = transform.localPosition.z;

                transformData.RotX = transform.localEulerAngles.x;
                transformData.RotY = transform.localEulerAngles.y;
                transformData.RotZ = transform.localEulerAngles.z;
            }
            break;
            }

            transformData.ScaleX = transform.localScale.x;
            transformData.ScaleY = transform.localScale.y;
            transformData.ScaleZ = transform.localScale.z;

            transformData.bringBack      = saveScenePresence;
            transformData.linkedPrefabID = (saveScenePresence) ? linkedPrefabID : 0;

            if (saveParent)
            {
                // Attempt to find the "hand" bone of a character
                Transform t = transform.parent;

                if (t == null)
                {
                    transformData.parentID = 0;
                    return(transformData);
                }

                while (t.parent != null)
                {
                    t = t.parent;

                    AC.Char parentCharacter = t.GetComponent <AC.Char>();
                    if (parentCharacter != null)
                    {
                        if (parentCharacter.IsPlayer || (parentCharacter.GetComponent <ConstantID>() && parentCharacter.GetComponent <ConstantID>().constantID != 0))
                        {
                            if (transform.parent == parentCharacter.leftHandBone || transform.parent == parentCharacter.rightHandBone)
                            {
                                if (parentCharacter.IsPlayer)
                                {
                                    transformData.parentIsPlayer = true;
                                    transformData.parentIsNPC    = false;
                                    transformData.parentID       = 0;
                                    transformData.parentPlayerID = -1;

                                    if (KickStarter.settingsManager.playerSwitching == PlayerSwitching.Allow && parentCharacter != KickStarter.player)
                                    {
                                        Player player = parentCharacter as Player;
                                        transformData.parentPlayerID = player.ID;
                                    }
                                }
                                else
                                {
                                    transformData.parentIsPlayer = false;
                                    transformData.parentIsNPC    = true;
                                    transformData.parentID       = parentCharacter.GetComponent <ConstantID>().constantID;
                                    transformData.parentPlayerID = -1;
                                }

                                if (transform.parent == parentCharacter.leftHandBone)
                                {
                                    transformData.heldHand = Hand.Left;
                                }
                                else
                                {
                                    transformData.heldHand = Hand.Right;
                                }

                                return(transformData);
                            }
                        }

                        break;
                    }
                }

                if (transform.parent.GetComponent <ConstantID>() && transform.parent.GetComponent <ConstantID>().constantID != 0)
                {
                    transformData.parentID = transform.parent.GetComponent <ConstantID>().constantID;
                }
                else
                {
                    transformData.parentID = 0;
                    ACDebug.LogWarning("Could not save " + this.name + "'s parent since it has no Constant ID", this);
                }
            }

            return(transformData);
        }
        private void AddCharHoles(PolygonCollider2D[] navPolys, AC.Char charToExclude, NavigationMesh navigationMesh)
        {
            if (navigationMesh.characterEvasion == CharacterEvasion.None)
            {
                return;
            }

            ResetHoles(KickStarter.sceneSettings.navMesh, false);

            for (int p = 0; p < navPolys.Length; p++)
            {
                if (p > 0)
                {
                    return;
                }

                if (navPolys[p].transform.lossyScale != Vector3.one)
                {
                    ACDebug.LogWarning("Cannot create evasion Polygons inside NavMesh '" + navPolys[p].gameObject.name + "' because it has a non-unit scale.");
                    continue;
                }

                Vector2 navPosition = navPolys[p].transform.position;

                for (int c = 0; c < KickStarter.stateHandler.Characters.Count; c++)
                {
                    AC.Char character = KickStarter.stateHandler.Characters[c];

                    CircleCollider2D circleCollider2D = character.GetComponent <CircleCollider2D>();
                    if (circleCollider2D != null &&
                        (character.charState == CharState.Idle || navigationMesh.characterEvasion == CharacterEvasion.AllCharacters) &&
                        (charToExclude == null || character != charToExclude) &&
                        UnityVersionHandler.Perform2DOverlapPoint(character.transform.position, NavigationEngine_PolygonCollider.results, 1 << KickStarter.sceneSettings.navMesh.gameObject.layer) != 0)
                    {
                        circleCollider2D.isTrigger = true;
                        List <Vector2> newPoints3D = new List <Vector2>();

                                                #if UNITY_5 || UNITY_2017_1_OR_NEWER
                        Vector2 centrePoint = character.transform.TransformPoint(circleCollider2D.offset);
                                                #else
                        Vector2 centrePoint = character.transform.TransformPoint(circleCollider2D.center);
                                                #endif

                        float radius  = circleCollider2D.radius * character.transform.localScale.x;
                        float yScaler = navigationMesh.characterEvasionYScale;

                        if (navigationMesh.characterEvasionPoints == CharacterEvasionPoints.Four)
                        {
                            newPoints3D.Add(centrePoint + new Vector2(dir_n.x * radius, dir_n.y * radius * yScaler));
                            newPoints3D.Add(centrePoint + new Vector2(dir_e.x * radius, dir_e.y * radius * yScaler));
                            newPoints3D.Add(centrePoint + new Vector2(dir_s.x * radius, dir_s.y * radius * yScaler));
                            newPoints3D.Add(centrePoint + new Vector2(dir_w.x * radius, dir_w.y * radius * yScaler));
                        }
                        else if (navigationMesh.characterEvasionPoints == CharacterEvasionPoints.Eight)
                        {
                            newPoints3D.Add(centrePoint + new Vector2(dir_n.x * radius, dir_n.y * radius * yScaler));
                            newPoints3D.Add(centrePoint + new Vector2(dir_ne.x * radius, dir_ne.y * radius * yScaler));

                            newPoints3D.Add(centrePoint + new Vector2(dir_e.x * radius, dir_e.y * radius * yScaler));
                            newPoints3D.Add(centrePoint + new Vector2(dir_se.x * radius, dir_se.y * radius * yScaler));

                            newPoints3D.Add(centrePoint + new Vector2(dir_s.x * radius, dir_s.y * radius * yScaler));
                            newPoints3D.Add(centrePoint + new Vector2(dir_sw.x * radius, dir_sw.y * radius * yScaler));

                            newPoints3D.Add(centrePoint + new Vector2(dir_w.x * radius, dir_w.y * radius * yScaler));
                            newPoints3D.Add(centrePoint + new Vector2(dir_nw.x * radius, dir_nw.y * radius * yScaler));
                        }
                        else if (navigationMesh.characterEvasionPoints == CharacterEvasionPoints.Sixteen)
                        {
                            newPoints3D.Add(centrePoint + new Vector2(dir_n.x * radius, dir_n.y * radius * yScaler));
                            newPoints3D.Add(centrePoint + new Vector2(dir_nne.x * radius, dir_nne.y * radius * yScaler));
                            newPoints3D.Add(centrePoint + new Vector2(dir_ne.x * radius, dir_ne.y * radius * yScaler));
                            newPoints3D.Add(centrePoint + new Vector2(dir_nee.x * radius, dir_nee.y * radius * yScaler));

                            newPoints3D.Add(centrePoint + new Vector2(dir_e.x * radius, dir_e.y * radius * yScaler));
                            newPoints3D.Add(centrePoint + new Vector2(dir_see.x * radius, dir_see.y * radius * yScaler));
                            newPoints3D.Add(centrePoint + new Vector2(dir_se.x * radius, dir_se.y * radius * yScaler));
                            newPoints3D.Add(centrePoint + new Vector2(dir_sse.x * radius, dir_sse.y * radius * yScaler));

                            newPoints3D.Add(centrePoint + new Vector2(dir_s.x * radius, dir_s.y * radius * yScaler));
                            newPoints3D.Add(centrePoint + new Vector2(dir_ssw.x * radius, dir_ssw.y * radius * yScaler));
                            newPoints3D.Add(centrePoint + new Vector2(dir_sw.x * radius, dir_sw.y * radius * yScaler));
                            newPoints3D.Add(centrePoint + new Vector2(dir_sww.x * radius, dir_sww.y * radius * yScaler));

                            newPoints3D.Add(centrePoint + new Vector2(dir_w.x * radius, dir_w.y * radius * yScaler));
                            newPoints3D.Add(centrePoint + new Vector2(dir_nww.x * radius, dir_nww.y * radius * yScaler));
                            newPoints3D.Add(centrePoint + new Vector2(dir_nw.x * radius, dir_nw.y * radius * yScaler));
                            newPoints3D.Add(centrePoint + new Vector2(dir_nnw.x * radius, dir_nnw.y * radius * yScaler));
                        }

                        navPolys[p].pathCount++;

                        List <Vector2> newPoints = new List <Vector2>();
                        for (int i = 0; i < newPoints3D.Count; i++)
                        {
                            // Only add a point if it is on the NavMesh
                            if (UnityVersionHandler.Perform2DOverlapPoint(newPoints3D[i], NavigationEngine_PolygonCollider.results, 1 << KickStarter.sceneSettings.navMesh.gameObject.layer) != 0)
                            {
                                newPoints.Add(newPoints3D[i] - navPosition);
                            }
                            else
                            {
                                Vector2 altPoint = GetLineIntersect(newPoints3D[i], centrePoint);
                                if (altPoint != Vector2.zero)
                                {
                                    newPoints.Add(altPoint - navPosition);
                                }
                            }
                        }

                        if (newPoints.Count > 1)
                        {
                            navPolys[p].SetPath(navPolys[p].pathCount - 1, newPoints.ToArray());
                        }
                    }
                }

                RebuildVertexArray(navPolys[p].transform, navPolys[p], p);
            }
        }
Ejemplo n.º 3
0
        protected void SharedGUITwo(AC.Char _target)
        {
            EditorGUILayout.BeginVertical("Button");
            EditorGUILayout.LabelField("Physics settings:", EditorStyles.boldLabel);
            _target.ignoreGravity = EditorGUILayout.Toggle("Ignore gravity?", _target.ignoreGravity);
            if (_target.GetComponent <Rigidbody>() != null || _target.GetComponent <Rigidbody2D>() != null)
            {
                _target.freezeRigidbodyWhenIdle = EditorGUILayout.Toggle("Freeze Rigidbody when Idle?", _target.freezeRigidbodyWhenIdle);
                if (_target.GetComponent <Rigidbody>() != null)
                {
                    _target.useRigidbodyForMovement = EditorGUILayout.Toggle("Move with Rigidbody?", _target.useRigidbodyForMovement);

                    if (_target.useRigidbodyForMovement)
                    {
                        if (_target.GetAnimator() != null && _target.GetAnimator().applyRootMotion)
                        {
                            EditorGUILayout.HelpBox("Rigidbody movement will be disabled as 'Root motion' is enabled in the Animator.", MessageType.Info);
                        }
                        else if (_target.GetComponent <Rigidbody>().interpolation == RigidbodyInterpolation.None)
                        {
                            EditorGUILayout.HelpBox("For smooth movement, the Rigidbody's 'Interpolation' should be set to either 'Interpolate' or 'Extrapolate'.", MessageType.Warning);
                        }
                    }
                }
                else if (_target.GetComponent <Rigidbody2D>() != null)
                {
                    _target.useRigidbody2DForMovement = EditorGUILayout.Toggle("Move with Rigidbody 2D?", _target.useRigidbody2DForMovement);

                    if (_target.useRigidbody2DForMovement)
                    {
                        if (_target.GetAnimator() != null && _target.GetAnimator().applyRootMotion)
                        {
                            EditorGUILayout.HelpBox("Rigidbody movement will be disabled as 'Root motion' is enabled in the Animator.", MessageType.Info);
                        }
                        else if (_target.GetComponent <Rigidbody2D>().interpolation == RigidbodyInterpolation2D.None)
                        {
                            EditorGUILayout.HelpBox("For smooth movement, the Rigidbody's 'Interpolation' should be set to either 'Interpolate' or 'Extrapolate'.", MessageType.Warning);
                        }

                        if (SceneSettings.CameraPerspective != CameraPerspective.TwoD)
                        {
                            EditorGUILayout.HelpBox("Rigidbody2D-based motion only allows for X and Y movement, not Z, which may not be appropriate for 3D.", MessageType.Warning);
                        }

                                                #if (UNITY_5_6_OR_NEWER || UNITY_2017_1_OR_NEWER)
                        if (_target.GetAnimEngine().isSpriteBased&& _target.turn2DCharactersIn3DSpace)
                        {
                            EditorGUILayout.HelpBox("For best results, 'Turn root object in 3D space?' above should be disabled.", MessageType.Warning);
                        }
                                                #endif
                    }
                }
            }

            if (_target.GetComponent <Collider>() != null && _target.GetComponent <CharacterController>() == null)
            {
                _target.groundCheckLayerMask = LayerMaskField("Ground-check layer(s):", _target.groundCheckLayerMask);
            }
            EditorGUILayout.EndVertical();


            EditorGUILayout.BeginVertical("Button");
            EditorGUILayout.LabelField("Audio clips:", EditorStyles.boldLabel);

            _target.walkSound = (AudioClip)EditorGUILayout.ObjectField("Walk sound:", _target.walkSound, typeof(AudioClip), false);
            _target.runSound  = (AudioClip)EditorGUILayout.ObjectField("Run sound:", _target.runSound, typeof(AudioClip), false);
            if (AdvGame.GetReferences() != null && AdvGame.GetReferences().speechManager != null && AdvGame.GetReferences().speechManager.scrollSubtitles)
            {
                _target.textScrollClip = (AudioClip)EditorGUILayout.ObjectField("Text scroll override:", _target.textScrollClip, typeof(AudioClip), false);
            }
            _target.soundChild        = (Sound)EditorGUILayout.ObjectField("SFX Sound child:", _target.soundChild, typeof(Sound), true);
            _target.speechAudioSource = (AudioSource)EditorGUILayout.ObjectField("Speech AudioSource:", _target.speechAudioSource, typeof(AudioSource), true);
            EditorGUILayout.EndVertical();

            EditorGUILayout.BeginVertical("Button");
            EditorGUILayout.LabelField("Dialogue settings:", EditorStyles.boldLabel);

            _target.speechColor         = EditorGUILayout.ColorField("Speech text colour:", _target.speechColor);
            _target.speechLabel         = EditorGUILayout.TextField("Speaker label:", _target.speechLabel);
            _target.speechMenuPlacement = (Transform)EditorGUILayout.ObjectField("Speech menu placement child:", _target.speechMenuPlacement, typeof(Transform), true);
            if (_target.useExpressions)
            {
                EditorGUILayout.LabelField("Default portrait graphic:");
            }
            else
            {
                EditorGUILayout.LabelField("Portrait graphic:");
            }
            _target.portraitIcon.ShowGUI(false);

            _target.useExpressions = EditorGUILayout.Toggle("Use expressions?", _target.useExpressions);
            if (_target.useExpressions)
            {
                EditorGUILayout.Space();
                EditorGUILayout.BeginVertical("Button");
                for (int i = 0; i < _target.expressions.Count; i++)
                {
                    EditorGUILayout.BeginHorizontal();
                    EditorGUILayout.LabelField("Expression #" + _target.expressions[i].ID.ToString(), EditorStyles.boldLabel);
                    if (GUILayout.Button(Resource.CogIcon, GUILayout.Width(20f), GUILayout.Height(15f)))
                    {
                        ExpressionSideMenu(_target, i);
                    }
                    EditorGUILayout.EndHorizontal();
                    _target.expressions[i].ShowGUI();
                }

                if (GUILayout.Button("Add new expression"))
                {
                    _target.expressions.Add(new Expression(GetExpressionIDArray(_target.expressions)));
                }
                EditorGUILayout.EndVertical();
            }

            EditorGUILayout.EndVertical();
        }
Ejemplo n.º 4
0
        protected void SharedGUITwo(AC.Char _target)
        {
            EditorGUILayout.BeginVertical("Button");
            EditorGUILayout.LabelField("Physics settings:", EditorStyles.boldLabel);
            _target.ignoreGravity = CustomGUILayout.Toggle("Ignore gravity?", _target.ignoreGravity, "", "If True, the character will ignore the effects of gravity");
            if (_target.GetComponent <Rigidbody>() != null || _target.GetComponent <Rigidbody2D>() != null)
            {
                _target.freezeRigidbodyWhenIdle = CustomGUILayout.Toggle("Freeze Rigidbody when Idle?", _target.freezeRigidbodyWhenIdle, "", "If True, the character's Rigidbody will be frozen in place when idle. This is to help slipping when on sloped surfaces");
                if (_target.GetComponent <Rigidbody>() != null)
                {
                    _target.useRigidbodyForMovement = CustomGUILayout.Toggle("Move with Rigidbody?", _target.useRigidbodyForMovement, "", "If True, then it will be moved by adding forces in FixedUpdate, as opposed to the transform being manipulated in Update");

                    if (_target.useRigidbodyForMovement)
                    {
                        if (_target.GetAnimator() != null && _target.GetAnimator().applyRootMotion)
                        {
                            EditorGUILayout.HelpBox("Rigidbody movement will be disabled as 'Root motion' is enabled in the Animator.", MessageType.Warning);
                        }
                        else if (_target.GetComponent <Rigidbody>().interpolation == RigidbodyInterpolation.None)
                        {
                            EditorGUILayout.HelpBox("For smooth movement, the Rigidbody's 'Interpolation' should be set to either 'Interpolate' or 'Extrapolate'.", MessageType.Warning);
                        }
                    }
                }
                else if (_target.GetComponent <Rigidbody2D>() != null)
                {
                    _target.useRigidbody2DForMovement = CustomGUILayout.Toggle("Move with Rigidbody 2D?", _target.useRigidbody2DForMovement, "", "If True, then it will be moved by adding forces in FixedUpdate, as opposed to the transform being manipulated in Update");

                    if (_target.useRigidbody2DForMovement)
                    {
                        if (_target.GetAnimator() != null && _target.GetAnimator().applyRootMotion)
                        {
                            EditorGUILayout.HelpBox("Rigidbody movement will be disabled as 'Root motion' is enabled in the Animator.", MessageType.Warning);
                        }
                        else if (_target.GetComponent <Rigidbody2D>().interpolation == RigidbodyInterpolation2D.None)
                        {
                            EditorGUILayout.HelpBox("For smooth movement, the Rigidbody's 'Interpolation' should be set to either 'Interpolate' or 'Extrapolate'.", MessageType.Warning);
                        }

                        if (SceneSettings.CameraPerspective != CameraPerspective.TwoD)
                        {
                            EditorGUILayout.HelpBox("Rigidbody2D-based motion only allows for X and Y movement, not Z, which may not be appropriate for 3D.", MessageType.Warning);
                        }

                                                #if (UNITY_5_6_OR_NEWER || UNITY_2017_1_OR_NEWER)
                        if (_target.GetAnimEngine().isSpriteBased&& _target.turn2DCharactersIn3DSpace)
                        {
                            EditorGUILayout.HelpBox("For best results, 'Turn root object in 3D space?' above should be disabled.", MessageType.Warning);
                        }
                                                #endif
                    }
                }
            }

            if (_target.GetComponent <Collider>() != null && _target.GetComponent <CharacterController>() == null)
            {
                _target.groundCheckLayerMask = LayerMaskField("Ground-check layer(s):", _target.groundCheckLayerMask);
            }
            EditorGUILayout.EndVertical();


            EditorGUILayout.BeginVertical("Button");
            EditorGUILayout.LabelField("Audio clips:", EditorStyles.boldLabel);

            _target.walkSound = (AudioClip)CustomGUILayout.ObjectField <AudioClip> ("Walk sound:", _target.walkSound, false, "", "The sound to play when walking");
            _target.runSound  = (AudioClip)CustomGUILayout.ObjectField <AudioClip> ("Run sound:", _target.runSound, false, "", "The sound to play when running");
            if (AdvGame.GetReferences() != null && AdvGame.GetReferences().speechManager != null && AdvGame.GetReferences().speechManager.scrollSubtitles)
            {
                _target.textScrollClip = (AudioClip)CustomGUILayout.ObjectField <AudioClip> ("Text scroll override:", _target.textScrollClip, false, "", "The sound to play when the character's speech text is scrolling");
            }
            _target.soundChild        = (Sound)CustomGUILayout.ObjectField <Sound> ("SFX Sound child:", _target.soundChild, true, "", "");
            _target.speechAudioSource = (AudioSource)CustomGUILayout.ObjectField <AudioSource> ("Speech AudioSource:", _target.speechAudioSource, true, "", "The AudioSource from which to play speech audio");
            EditorGUILayout.EndVertical();

            EditorGUILayout.BeginVertical("Button");
            EditorGUILayout.LabelField("Dialogue settings:", EditorStyles.boldLabel);

            _target.speechColor         = CustomGUILayout.ColorField("Speech text colour:", _target.speechColor, "", "");
            _target.speechLabel         = CustomGUILayout.TextField("Speaker label:", _target.speechLabel, "", "");
            _target.speechMenuPlacement = (Transform)CustomGUILayout.ObjectField <Transform> ("Speech menu placement child:", _target.speechMenuPlacement, true, "", "The Transform at which to place Menus set to appear 'Above Speaking Character'. If this is not set, the placement will be set automatically");
            if (_target.useExpressions)
            {
                EditorGUILayout.LabelField("Default portrait graphic:");
            }
            else
            {
                EditorGUILayout.LabelField("Portrait graphic:");
            }
            _target.portraitIcon.ShowGUI(false);

            _target.useExpressions = CustomGUILayout.Toggle("Use expressions?", _target.useExpressions, "", "If True, speech text can use expression tokens to change the character's expression");
            if (_target.useExpressions)
            {
                _target.GetAnimEngine().CharExpressionsGUI();

                EditorGUILayout.Space();
                EditorGUILayout.BeginVertical("Button");
                for (int i = 0; i < _target.expressions.Count; i++)
                {
                    EditorGUILayout.BeginHorizontal();
                    EditorGUILayout.LabelField("Expression #" + _target.expressions[i].ID.ToString(), EditorStyles.boldLabel);

                    if (GUILayout.Button("", CustomStyles.IconCog))
                    {
                        ExpressionSideMenu(_target, i);
                    }
                    EditorGUILayout.EndHorizontal();
                    _target.expressions[i].ShowGUI();
                }

                if (GUILayout.Button("Add new expression"))
                {
                    _target.expressions.Add(new Expression(GetExpressionIDArray(_target.expressions)));
                }
                EditorGUILayout.EndVertical();
            }

            EditorGUILayout.EndVertical();
        }
        /**
         * <summary>Serialises appropriate GameObject values into a string.</summary>
         * <returns>The data, serialised as a string</returns>
         */
        public TransformData SaveTransformData()
        {
            TransformData transformData = new TransformData();

            transformData.objectID      = constantID;
            transformData.savePrevented = savePrevented;

            transformData.LocX = transform.position.x;
            transformData.LocY = transform.position.y;
            transformData.LocZ = transform.position.z;

            transformData.RotX = transform.eulerAngles.x;
            transformData.RotY = transform.eulerAngles.y;
            transformData.RotZ = transform.eulerAngles.z;

            transformData.ScaleX = transform.localScale.x;
            transformData.ScaleY = transform.localScale.y;
            transformData.ScaleZ = transform.localScale.z;

            transformData.bringBack      = saveScenePresence;
            transformData.linkedPrefabID = (saveScenePresence) ? linkedPrefabID : 0;

            if (saveParent)
            {
                // Attempt to find the "hand" bone of a character
                Transform t = transform.parent;

                if (t == null)
                {
                    transformData.parentID = 0;
                    return(transformData);
                }

                while (t.parent != null)
                {
                    t = t.parent;

                    if (t.GetComponent <AC.Char>())
                    {
                        AC.Char parentCharacter = t.GetComponent <AC.Char>();

                        if (parentCharacter is Player || (parentCharacter.GetComponent <ConstantID>() && parentCharacter.GetComponent <ConstantID>().constantID != 0))
                        {
                            if (transform.parent == parentCharacter.leftHandBone || transform.parent == parentCharacter.rightHandBone)
                            {
                                if (parentCharacter.IsPlayer)
                                {
                                    transformData.parentIsPlayer = true;
                                    transformData.parentIsNPC    = false;
                                    transformData.parentID       = 0;
                                }
                                else
                                {
                                    transformData.parentIsPlayer = false;
                                    transformData.parentIsNPC    = true;
                                    transformData.parentID       = parentCharacter.GetComponent <ConstantID>().constantID;
                                }

                                if (transform.parent == parentCharacter.leftHandBone)
                                {
                                    transformData.heldHand = Hand.Left;
                                }
                                else
                                {
                                    transformData.heldHand = Hand.Right;
                                }

                                return(transformData);
                            }
                        }

                        break;
                    }
                }

                if (transform.parent.GetComponent <ConstantID>() && transform.parent.GetComponent <ConstantID>().constantID != 0)
                {
                    transformData.parentID = transform.parent.GetComponent <ConstantID>().constantID;
                }
                else
                {
                    transformData.parentID = 0;
                    ACDebug.LogWarning("Could not save " + this.name + "'s parent since it has no Constant ID");
                }
            }

            return(transformData);
        }
Ejemplo n.º 6
0
        protected void SharedGUITwo(AC.Char _target)
        {
            EditorGUILayout.BeginVertical("Button");
            EditorGUILayout.LabelField("Physics settings:", EditorStyles.boldLabel);
            _target.ignoreGravity = EditorGUILayout.Toggle("Ignore gravity?", _target.ignoreGravity);
            if (_target.GetComponent <Rigidbody>() != null || _target.GetComponent <Rigidbody2D>() != null)
            {
                _target.freezeRigidbodyWhenIdle = EditorGUILayout.Toggle("Freeze Rigidbody when Idle?", _target.freezeRigidbodyWhenIdle);
                if (_target.GetComponent <Rigidbody>() != null)
                {
                    _target.useRigidbodyForMovement = EditorGUILayout.Toggle("Move with Rigidbody?", _target.useRigidbodyForMovement);

                    if (_target.useRigidbodyForMovement)
                    {
                        if (_target.GetAnimator() != null && _target.GetAnimator().applyRootMotion)
                        {
                            EditorGUILayout.HelpBox("Rigidbody movement will be disabled as 'Root motion' is enabled in the Animator.", MessageType.Info);
                        }
                        else if (_target.GetComponent <Rigidbody>().interpolation == RigidbodyInterpolation.None)
                        {
                            EditorGUILayout.HelpBox("For smooth movement, the Rigidbody's 'Interpolation' should be set to either 'Interpolate' or 'Extrapolate'.", MessageType.Warning);
                        }
                    }
                }
                else if (_target.GetComponent <Rigidbody2D>() != null)
                {
                    _target.useRigidbody2DForMovement = EditorGUILayout.Toggle("Move with Rigidbody 2D?", _target.useRigidbody2DForMovement);

                    if (_target.useRigidbody2DForMovement)
                    {
                        if (_target.GetAnimator() != null && _target.GetAnimator().applyRootMotion)
                        {
                            EditorGUILayout.HelpBox("Rigidbody movement will be disabled as 'Root motion' is enabled in the Animator.", MessageType.Info);
                        }
                        else if (_target.GetComponent <Rigidbody2D>().interpolation == RigidbodyInterpolation2D.None)
                        {
                            EditorGUILayout.HelpBox("For smooth movement, the Rigidbody's 'Interpolation' should be set to either 'Interpolate' or 'Extrapolate'.", MessageType.Warning);
                        }
                    }
                }
            }
            EditorGUILayout.EndVertical();


            EditorGUILayout.BeginVertical("Button");
            EditorGUILayout.LabelField("Audio clips:", EditorStyles.boldLabel);

            _target.walkSound = (AudioClip)EditorGUILayout.ObjectField("Walk sound:", _target.walkSound, typeof(AudioClip), false);
            _target.runSound  = (AudioClip)EditorGUILayout.ObjectField("Run sound:", _target.runSound, typeof(AudioClip), false);
            if (AdvGame.GetReferences() != null && AdvGame.GetReferences().speechManager != null && AdvGame.GetReferences().speechManager.scrollSubtitles)
            {
                _target.textScrollClip = (AudioClip)EditorGUILayout.ObjectField("Text scroll override:", _target.textScrollClip, typeof(AudioClip), false);
            }
            _target.soundChild        = (Sound)EditorGUILayout.ObjectField("SFX Sound child:", _target.soundChild, typeof(Sound), true);
            _target.speechAudioSource = (AudioSource)EditorGUILayout.ObjectField("Speech AudioSource:", _target.speechAudioSource, typeof(AudioSource), true);
            EditorGUILayout.EndVertical();

            EditorGUILayout.BeginVertical("Button");
            EditorGUILayout.LabelField("Dialogue settings:", EditorStyles.boldLabel);

            _target.speechColor         = EditorGUILayout.ColorField("Speech text colour:", _target.speechColor);
            _target.speechLabel         = EditorGUILayout.TextField("Speaker label:", _target.speechLabel);
            _target.speechMenuPlacement = (Transform)EditorGUILayout.ObjectField("Speech menu placement child:", _target.speechMenuPlacement, typeof(Transform), true);
            if (_target.useExpressions)
            {
                EditorGUILayout.LabelField("Default portrait graphic:");
            }
            else
            {
                EditorGUILayout.LabelField("Portrait graphic:");
            }
            _target.portraitIcon.ShowGUI(false);

            _target.useExpressions = EditorGUILayout.Toggle("Use expressions?", _target.useExpressions);
            if (_target.useExpressions)
            {
                EditorGUILayout.Space();
                EditorGUILayout.BeginVertical("Button");
                for (int i = 0; i < _target.expressions.Count; i++)
                {
                    EditorGUILayout.BeginHorizontal();
                    EditorGUILayout.LabelField("Expression #" + _target.expressions[i].ID.ToString(), EditorStyles.boldLabel);
                    if (GUILayout.Button(Resource.CogIcon, GUILayout.Width(20f), GUILayout.Height(15f)))
                    {
                        ExpressionSideMenu(_target, i);
                    }
                    EditorGUILayout.EndHorizontal();
                    _target.expressions[i].ShowGUI();
                }

                if (GUILayout.Button("Add new expression"))
                {
                    _target.expressions.Add(new Expression(GetExpressionIDArray(_target.expressions)));
                }
                EditorGUILayout.EndVertical();
            }

            EditorGUILayout.EndVertical();
        }