OSDN Git Service

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