npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

@umm/cafu_timeline

v2.0.4

Published

Timeline UseCase for CAFU

Downloads

9

Readme

What

  • Timeline に関する処理を扱う CAFU UseCase

Requirement

  • Unity 2017.3
    • .NET 4.6 (Experimental)
  • CAFU

Install

$ npm install github:umm-projects/cafu_timeline

Usage

事前準備

View クラス作成

using System;
using CAFU.Timeline.Domain.Model;
using CAFU.Timeline.Presentation.View;

namespace MainProject.SubProject.Presentation.View.SampleScene {

    public enum TimelineName {
        Hoge,
        Fuga,
        Piyo,
        Foo_Bar,
    }

    [Serializable]
    public class TimelineInformation : TimelineInformation<TimelineName> {}

    public class Timeline : TimelineView<TimelineName, TimelineInformation> {

        public override ITimelinePresenter<TEnum, TTimelineInformation> GetTimelinePresenter() {
            // IView に対する extension methods を生やしてある場合は return this.GetPresenter(); とかでもOK
            return SampleSceneViewController.Instance.Presenter;
        }

    }

}

TimelineView

  • Hierarchy 上の GameObject にアタッチするための Component を作ります。
  • 基底クラスとして CAFU.Timeline.Presentation.View.TimelineView<TEnum, TTimelineInformation> を作ってあるので、それを継承します。
  • abstract メソッドとして ITimelinePresenter<TEnum, TTimelineInformation> GetTimelinePresenter() を要求されるので、 ITimelinePresenter を実装している Presenter のインスタンスを返します。
  • ファイル名を Timeline.cs として保存します。
    • MonoBehaviour の制約として、クラス名とファイル名が同一である必要があるため。

enum TimelineName

  • 操作対象の TimelineAsset 名を列挙した enum を定義します。
  • この enum の名称をもとに、操作対象の PlayableDirector を解決します。
解決ルール
  1. Timeline コンポーネントの Timeline Information List に設定済の情報
  2. Timeline GameObject 直下にある GameObject のうち、enum の名称と完全一致する要素
  3. Timeline GameObject 以下にある GameObject のうち、enum の名称のアンダースコアを階層区切り(スラッシュに変換)と見なしてパスが一致する要素
  4. Timeline GameObject 以下にある GameObject のうち、単一の GameObject の名称が enum の名称と完全一致する要素
Controller
Timeline
  Toggle
    Show
      ShowHoge
      ShowFuga
    Hide
      HideHoge
      HideFuga
  • TimelineName.Toggle: /Timeline/Toggle
  • TimelineName.Toggle_Show_ShowHoge: /Timeline/Toggle/Show/ShowHoge
  • TimelineName.Hide: /Timeline/Toggle/Hide

TimelineInformation

  • CAFU.Timeline.Domain.Model.TimelineInformation<TEnum> クラスを拡張したクラスを作ります。
    • Unity の仕様として、Generics なクラスを Serialize 出来ないため、冗長ですが仕方ありません 😓
  • 当該ファイルに System.Serializable 属性を付けます。
  • もし、Inspector 上でのエイリアス設定を必要としない(全ての Timeline に於いて enum の名称と Hierarchy 上のパスが一致している)場合は、このクラスを作る必要はありません。

Presenter 実装

using CAFU.Core.Domain;
using CAFU.Core.Presentation;
using CAFU.Timeline.Domain.UseCase;
using CAFU.Timeline.Presentation.Presenter;
using MainProject.SubProject.Presentation.View.SampleScene;

namespace MainProject.SubProject.Presentation.Presenter {

    public class SamplePresenter : ITimelinePresenter<TimelineName, TimelineInformation>, IPresenterBuilder {

        public TimelineUseCase<TimelineName, TimelineInformation> TimelineUseCase { get; private set; }

        public void Build() {
            this.TimelineUseCase = UseCaseFactory.CreateInstance<TimelineUseCase<TimelineName, TimelineInformation>>();
        }

    }

}
  • 任意の Presenter で ITimelinePresenter<TEnum, TTimelineInformation> を実装します。
    • 必須プロパティとして public TimelineUseCase<TimelineName> TimelineUseCase { get; } を実装します。
  • Build() メソッド内で初期化すると良いでしょう。

GameObject にアタッチ

  • Hierarchy のルート階層に Timeline GameObject を作成し、上記で作った View クラスを AddComponent します。

PlayableDirector の登録

  • Timeline GameObject の子要素として、シーン内で再生する Timeline (PlayableDirector) を複数登録します。

Timeline 再生・停止など

  • Presenter の拡張メソッドとして PlayableDirector GetPlayableDirector(TEnum) が生やしてあるので、取得した PlayableDirector のメソッドを叩いてください。
  • 基本的には enum の値をもとに、Hierarchy の Timeline/ 以下の GameObject を探しに行きます。
    • enum と Hierarchy 上のパスが異なる場合は、 Timeline コンポーネントの Timeline Information List に対して手動で設定することも可能です。
    • Hierarchy 的にネストしている場合は、enum の名称をアンダースコアで区切ると、それを階層の区切りと見なして(スラッシュに変換して)探しに行きます。

GenericBinding の設定

  • 実行時の Timeline 操作対象設定用に Presenter の拡張メソッドとして void SetGenericBindingBy***() が生やしてあります。
    • 設定すべき PlayableAsset の検出のために、 TrackName, PlayableAssetName, TrackNameAndPlayableAssetName の3種類のメソッドを用意しています。
  • 設定する値の型に厳密なので、以下の対応に従って設定してください。

| TrackAsset | 型 | | --- | --- | | AnimationTrack | Animator | | AudioTrack | AudioSource | | ActivationTrack | GameObject |

SampleViewController.Instance.Presenter.SetGenericBindingByPlayableAssetName(TimelineName.Hoge, "FadeIn", this.GetComponent<Animator>());

ReferenceValue の設定

  • 実行時の ExposedReference 参照値設定用に Presenter の拡張メソッドとして void SetReferenceValueByPlayableAssetName() が生やしてあります。
  • 設定する値の型に厳密なので、以下の対応に従って設定してください。

| PlayableAsset | 型 | | --- | --- | | ControlPlayableAsset | GameObject |

SampleViewController.Instance.Presenter.SetReferenceValueByPlayableAssetName(TimelineName.Hoge, "SomeReference", this.gameObject);

License

Copyright (c) 2017 Tetsuya Mori

Released under the MIT license, see LICENSE.txt