OSDN Git Service

Pmd2XMLとの共通化
[mikutoga/Vmd2XML.git] / src / main / java / jp / sourceforge / mikutoga / vmd / model / xml / LightingXmlExpoter.java
1 /*
2  * lighting xml exporter
3  *
4  * License : The MIT License
5  * Copyright(c) 2013 MikuToga Partners
6  */
7
8 package jp.sourceforge.mikutoga.vmd.model.xml;
9
10 import java.io.IOException;
11 import java.util.List;
12 import jp.sfjp.mikutoga.math.MkVec3D;
13 import jp.sfjp.mikutoga.vmd.model.LuminousColor;
14 import jp.sfjp.mikutoga.vmd.model.LuminousMotion;
15 import jp.sfjp.mikutoga.vmd.model.ShadowMode;
16 import jp.sfjp.mikutoga.vmd.model.ShadowMotion;
17 import jp.sfjp.mikutoga.vmd.model.VmdMotion;
18 import jp.sourceforge.mikutoga.xml.ProxyXmlExporter;
19 import jp.sourceforge.mikutoga.xml.XmlExporter;
20
21 /**
22  * ライティング情報のXMLエクスポーター。
23  */
24 class LightingXmlExpoter extends ProxyXmlExporter {
25
26     /**
27      * コンストラクタ。
28      * @param proxy 委譲先
29      */
30     LightingXmlExpoter(XmlExporter proxy) {
31         super(proxy);
32         return;
33     }
34
35     /**
36      * 照明演出データを出力する。
37      * @param vmdMotion 演出データ
38      * @throws IOException 出力エラー
39      */
40     void putLuminousSequence(VmdMotion vmdMotion)
41             throws IOException{
42         ind().putSimpleSTag(XmlSyms.TAG_LUMI_SEQUENCE).ln();
43
44         pushNest();
45         List<LuminousMotion> list = vmdMotion.getLuminousMotionList();
46         if( ! list.isEmpty() ) ln();
47         for(LuminousMotion luminous : list){
48             putLuminousMotion(luminous);
49         }
50         popNest();
51
52         ind().putETag(XmlSyms.TAG_LUMI_SEQUENCE).ln(2);
53
54         return;
55     }
56
57     /**
58      * 照明モーションを出力する。
59      * @param luminousMotion 照明モーション
60      * @throws IOException 出力エラー
61      */
62     private void putLuminousMotion(LuminousMotion luminousMotion)
63             throws IOException{
64         ind().putOpenSTag(XmlSyms.TAG_LUMINOUS_ACT).sp();
65         int frameNo = luminousMotion.getFrameNumber();
66         putIntAttr(XmlSyms.ATTR_FRAME, frameNo).sp();
67         putCloseSTag().ln();
68
69         LuminousColor color = luminousMotion.getColor();
70         MkVec3D vector = luminousMotion.getDirection();
71
72         pushNest();
73         putLuminousColor(color);
74         putLuminousDirection(vector);
75         popNest();
76
77         ind().putETag(XmlSyms.TAG_LUMINOUS_ACT).ln(2);
78
79         return;
80     }
81
82     /**
83      * 光源色情報を出力する。
84      * @param color 光源色
85      * @throws IOException 出力エラー
86      */
87     private void putLuminousColor(LuminousColor color)
88             throws IOException{
89         ind().putOpenSTag(XmlSyms.TAG_LUMI_COLOR).sp();
90         putFloatAttr(XmlSyms.ATTR_R_COL, color.getColR()).sp();
91         putFloatAttr(XmlSyms.ATTR_G_COL, color.getColG()).sp();
92         putFloatAttr(XmlSyms.ATTR_B_COL, color.getColB()).sp();
93         putCloseEmpty().ln();
94
95         return;
96     }
97
98     /**
99      * 照明方向情報を出力する。
100      * @param vector 照明方向
101      * @throws IOException 出力エラー
102      */
103     private void putLuminousDirection(MkVec3D vector)
104             throws IOException{
105         ind().putOpenSTag(XmlSyms.TAG_LUMI_DIRECTION).sp();
106         putFloatAttr(XmlSyms.ATTR_X_VEC, (float) vector.getXVal()).sp();
107         putFloatAttr(XmlSyms.ATTR_Y_VEC, (float) vector.getYVal()).sp();
108         putFloatAttr(XmlSyms.ATTR_Z_VEC, (float) vector.getZVal()).sp();
109         putCloseEmpty().ln();
110
111         return;
112     }
113
114     /**
115      * シャドウ演出データを出力する。
116      * @param vmdMotion 演出データ
117      * @throws IOException 出力エラー
118      */
119     void putShadowSequence(VmdMotion vmdMotion)
120             throws IOException{
121         List<ShadowMotion> list = vmdMotion.getShadowMotionList();
122         if( ! list.isEmpty() ){
123             ind().putBlockComment(XmlSyms.SHADOW_COMMENT);
124         }
125
126         ind().putSimpleSTag(XmlSyms.TAG_SHADOW_SEQUENCE).ln();
127
128         pushNest();
129         for(ShadowMotion shadow : list){
130             putShadowMotion(shadow);
131         }
132         popNest();
133
134         ind().putETag(XmlSyms.TAG_SHADOW_SEQUENCE).ln(2);
135
136         return;
137     }
138
139     /**
140      * シャドウモーションを出力する。
141      * @param shadowMotion シャドウモーション
142      * @throws IOException 出力エラー
143      */
144     private void putShadowMotion(ShadowMotion shadowMotion)
145             throws IOException{
146         ind().putOpenSTag(XmlSyms.TAG_SHADOW_ACT).sp();
147
148         int frameNo = shadowMotion.getFrameNumber();
149         ShadowMode mode = shadowMotion.getShadowMode();
150         float rawParam = (float) shadowMotion.getRawScopeParam();
151
152         putIntAttr(XmlSyms.ATTR_FRAME, frameNo).sp();
153         putAttr(XmlSyms.ATTR_MODE, mode.name()).sp();
154         putFloatAttr(XmlSyms.ATTR_RAW_PARAM, rawParam).sp();
155
156         putCloseEmpty();
157
158         double uiVal = ShadowMotion.rawParamToScope(rawParam);
159         long lVal = Math.round(uiVal);
160         sp().putLineComment("UI:" + lVal).ln();
161
162         return;
163     }
164
165 }