Example #1
0
        //キャラクターオブジェクトとして、特殊な表示をする
        internal AdvGraphicObject DrawCharacter(string layerName, string name, AdvGraphicOperationArg arg)
        {
            //既に同名のグラフィックがあるなら、そのレイヤーを取得
            AdvGraphicLayer oldLayer = null;

            foreach (var keyValue in layers)
            {
                if (keyValue.Value.IsEqualDefaultGraphicName(name))
                {
                    oldLayer = keyValue.Value;
                    break;
                }
            }

            //レイヤー名の指定がある場合、そのレイヤーを探す
            AdvGraphicLayer layer = FindLayer(layerName);

            if (layer == null)
            {
                //レイヤーがない場合は、旧レイヤーかデフォルトレイヤーを使う
                layer = (oldLayer == null) ? DefaultLayer : oldLayer;
            }

            //レイヤー変更があるか
            bool changeLayer = (oldLayer != layer && oldLayer != null);

            //レイヤー変更ないなら、描画しておわり
            if (!changeLayer)
            {
                //レイヤー上にデフォルトオブジェクトとして表示
                return(layer.DrawToDefault(name, arg));
            }

            Vector3    oldScale    = Vector3.one;
            Vector3    oldPosition = Vector3.zero;
            Quaternion oldRotation = Quaternion.identity;
            //レイヤーが変わる場合は、昔のほうを消す
            AdvGraphicObject oldObj;

            if (oldLayer.CurrentGraphics.TryGetValue(name, out oldObj))
            {
                oldScale    = oldObj.rectTransform.localScale;
                oldPosition = oldObj.rectTransform.localPosition;
                oldRotation = oldObj.rectTransform.localRotation;
                oldLayer.FadeOut(name, arg.GetSkippedFadeTime(manager.Engine));
            }

            //レイヤー上にデフォルトオブジェクトとして表示
            AdvGraphicObject obj = layer.DrawToDefault(name, arg);

            //ローカルTransform値を引き継ぐ処理
            if (!manager.ResetCharacterTransformOnChangeLayer)
            {
                obj.rectTransform.localScale    = oldScale;
                obj.rectTransform.localPosition = oldPosition;
                obj.rectTransform.localRotation = oldRotation;
            }
            return(obj);
        }
Example #2
0
        //オブジェクトを描画する
        internal AdvGraphicObject Draw(string name, AdvGraphicOperationArg arg)
        {
            AdvGraphicObject obj = GetObjectCreateIfMissing(name, arg.Graphic);

            obj.Loader.LoadGraphic(arg.Graphic, () =>
            {
                obj.Draw(arg, arg.GetSkippedFadeTime(Engine));
            });
            return(obj);
        }
Example #3
0
        public override void DoCommand(AdvEngine engine)
        {
            engine.SystemSaveData.GalleryData.AddCgLabel(label);
            engine.GraphicManager.IsEventMode = true;
            //表示する
            AdvGraphicOperationArg graphicOperationArg = DoCommandBgSub(engine);

            //キャラクターは非表示にする
            engine.GraphicManager.CharacterManager.FadeOutAll(graphicOperationArg.GetSkippedFadeTime(engine));
        }
Example #4
0
        //デフォルトオブジェクトとして描画する
        internal AdvGraphicObject DrawToDefault(string name, AdvGraphicOperationArg arg)
        {
            bool    changeObject = false;
            bool    keepPosition = false;
            Vector3 oldPosition  = Vector3.zero;

            if (DefaultObject != null && DefaultObject.LastResource != null)
            {
                if (DefaultObject.name != name)
                {
                    //デフォルトオブジェクトの名前が違うなら、そのオブジェクトは変更
                    //場所も保持しない
                    changeObject = true;
                }
                else
                {
                    if (CheckFailedCrossFade(arg))
                    {
                        //クロスフェードに失敗するだけの場合
                        //場所は保持する
                        changeObject = true;
                        keepPosition = true;
                        oldPosition  = DefaultObject.transform.localPosition;
                    }
                    else
                    {
                        //クロスフェードできるならオブジェクトの変更を行わない
                        changeObject = false;
                    }
                }
            }

            AdvGraphicObject swapFadeObject = null;

            if (changeObject)
            {
                //すでにあるオブジェクトを消す準備
                swapFadeObject = DefaultObject;
                Remove(DefaultObject);
            }
            DefaultObject = Draw(name, arg);
            if (changeObject)
            {
                //すでにあるオブジェクトをフェードアウトしてクロスフェードとする
                DefaultObject.AddSwapFadeObject(swapFadeObject);
                float fadeTime = arg.GetSkippedFadeTime(Engine);
                if (LayerType == AdvLayerSettingData.LayerType.Bg)
                {
                    StartCoroutine(CoDelayOut(swapFadeObject, fadeTime));
                }
                else
                {
                    swapFadeObject.FadeOut(fadeTime);
                }
            }

            //前の場所を保持する
            if (keepPosition && !Manager.IgnoreKeepPositionOnCrossFade)
            {
                DefaultObject.transform.localPosition = oldPosition;
            }
            return(DefaultObject);
        }