OSDN Git Service

85c502fbd368b7fbd481f1e165d917aa93a9138c
[mikutoga/TogaGem.git] / src / main / java / jp / sourceforge / mikutoga / vmd / model / ShadowMotion.java
1 /*
2  * shadow motion
3  *
4  * License : The MIT License
5  * Copyright(c) 2011 MikuToga Partners
6  */
7
8 package jp.sourceforge.mikutoga.vmd.model;
9
10 import jp.sourceforge.mikutoga.vmd.AbstractNumbered;
11
12 /**
13  * 影(セルフシャドウ)演出情報。
14  * <p>カメラからの距離情報(幾何距離の100倍?)による影演出対象の範囲指定は、
15  * MMDのスライダUI上では0から9999までが指定可能。
16  * <p>MMDのスライダUI値SからVMDファイル上の生パラメターへの変換式は、
17  * 「 0.1 - (S / 1.0E+5) 」
18  * となる。
19  */
20 public class ShadowMotion extends AbstractNumbered {
21
22     /**
23      * デフォルトの影描画モード。
24      */
25     public static final ShadowMode DEF_MODE = ShadowMode.MODE_1;
26
27     /**
28      * デフォルトの範囲指定生パラメータ。
29      * <p>MMDのスライダUI値「8875」にほぼ相当。
30      */
31     public static final float DEF_SCOPE = 0.01125f;
32
33     private static final double OFFSET = 0.1;
34     private static final double SCALE = 1.0E+5;
35
36
37     private ShadowMode shadowMode = DEF_MODE;
38     private float rawScopeParam = DEF_SCOPE;
39
40
41     /**
42      * コンストラクタ。
43      */
44     public ShadowMotion(){
45         super();
46         return;
47     }
48
49
50     /**
51      * VMDファイル上の生パラメータ数値による演出対象範囲指定を、
52      * MMDのUI上の距離情報(カメラからの幾何距離×100倍?)に変換する。
53      * @param param 生パラメータ
54      * @return MMDのスライダUI上の距離情報
55      */
56     public static double rawParamToScope(float param){
57         double result;
58         result = OFFSET - param;
59         result *= SCALE;
60         return result;
61     }
62
63     /**
64      * MMDのUI上の距離情報(カメラからの幾何距離×100倍?)を、
65      * VMDファイル上の生パラメータ数値に変換する。
66      * @param scope MMDのスライダUI上の距離情報
67      * @return 生パラメータ
68      */
69     public static float scopeToRawParam(double scope){
70         double result;
71         result = scope / SCALE;
72         result = OFFSET - result;
73         return (float) result;
74     }
75
76
77     /**
78      * 影演出の範囲指定の生パラメータを設定する。
79      * @param rawScopeParam 生パラメータ
80      */
81     public void setRawScopeParam(float rawScopeParam) {
82         this.rawScopeParam = rawScopeParam;
83         return;
84     }
85
86     /**
87      * 影演出の範囲指定の生パラメータを返す。
88      * @return 生パラメータ
89      */
90     public float getRawScopeParam() {
91         return this.rawScopeParam;
92     }
93
94     /**
95      * 影演出の範囲指定のスライダUI値を設定する。
96      * @param scope スライダUI値
97      */
98     public void setScope(double scope){
99         float rawVal = scopeToRawParam(scope);
100         setRawScopeParam(rawVal);
101         return;
102     }
103
104     /**
105      * 影演出の範囲指定のスライダUI値を返す。
106      * @return スライダUI値
107      */
108     public double getScope(){
109         float rawVal = getRawScopeParam();
110         double scope = rawParamToScope(rawVal);
111         return scope;
112     }
113
114     /**
115      * 影描画モードを設定する。
116      * @param shadowMode 影描画モード
117      * @throws NullPointerException 引数がnull
118      */
119     public void setShadowMode(ShadowMode shadowMode)
120             throws NullPointerException{
121         if(shadowMode == null) throw new NullPointerException();
122         this.shadowMode = shadowMode;
123         return;
124     }
125
126     /**
127      * 影描画モードを返す。
128      * @return 影描画モード
129      */
130     public ShadowMode getShadowMode(){
131         return this.shadowMode;
132     }
133
134     /**
135      * {@inheritDoc}
136      * @return {@inheritDoc}
137      */
138     @Override
139     public String toString(){
140         StringBuilder result = new StringBuilder();
141
142         result.append("#").append(getFrameNumber());
143         result.append(" shadow mode : ").append(this.shadowMode);
144         result.append(" rawparam=").append(this.rawScopeParam);
145
146         return result.toString();
147     }
148
149 }