2 * lighting xml exporter
4 * License : The MIT License
5 * Copyright(c) 2013 MikuToga Partners
8 package jp.sfjp.mikutoga.vmd.model.xml;
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;
22 * ライティング情報のXMLエクスポーター。
24 class LightingXmlExpoter extends ProxyXmlExporter {
30 LightingXmlExpoter(XmlExporter delegate) {
38 * @param vmdMotion 演出データ
39 * @throws IOException 出力エラー
41 void putLuminousSequence(VmdMotion vmdMotion)
43 ind().putSimpleSTag(VmdTag.LUMI_SEQUENCE.tag()).ln();
46 List<LuminousMotion> list = vmdMotion.getLuminousMotionList();
47 if( ! list.isEmpty() ) ln();
48 for(LuminousMotion luminous : list){
49 putLuminousMotion(luminous);
53 ind().putETag(VmdTag.LUMI_SEQUENCE.tag()).ln(2);
60 * @param luminousMotion 照明モーション
61 * @throws IOException 出力エラー
63 private void putLuminousMotion(LuminousMotion luminousMotion)
65 ind().putOpenSTag(VmdTag.LUMINOUS_ACT.tag()).sp();
67 int frameNo = luminousMotion.getFrameNumber();
68 putIntAttr(XmlAttr.ATTR_FRAME, frameNo).sp();
72 LuminousColor color = luminousMotion.getColor();
73 MkVec3D vector = luminousMotion.getDirection();
76 putLuminousColor(color);
77 putLuminousDirection(vector);
80 ind().putETag(VmdTag.LUMINOUS_ACT.tag()).ln(2);
88 * @throws IOException 出力エラー
90 private void putLuminousColor(LuminousColor color)
92 ind().putOpenSTag(VmdTag.LUMI_COLOR.tag()).sp();
94 float colR = color.getColR();
95 float colG = color.getColG();
96 float colB = color.getColB();
98 putFloatAttr(XmlAttr.ATTR_R_COL, colR).sp();
99 putFloatAttr(XmlAttr.ATTR_G_COL, colG).sp();
100 putFloatAttr(XmlAttr.ATTR_B_COL, colB).sp();
102 putCloseEmpty().ln();
110 * @throws IOException 出力エラー
112 private void putLuminousDirection(MkVec3D vector)
114 ind().putOpenSTag(VmdTag.LUMI_DIRECTION.tag()).sp();
116 float xVec = (float) vector.getXVal();
117 float yVec = (float) vector.getYVal();
118 float zVec = (float) vector.getZVal();
120 putFloatAttr(XmlAttr.ATTR_X_VEC, xVec).sp();
121 putFloatAttr(XmlAttr.ATTR_Y_VEC, yVec).sp();
122 putFloatAttr(XmlAttr.ATTR_Z_VEC, zVec).sp();
124 putCloseEmpty().ln();
131 * @param vmdMotion 演出データ
132 * @throws IOException 出力エラー
134 void putShadowSequence(VmdMotion vmdMotion)
136 List<ShadowMotion> list = vmdMotion.getShadowMotionList();
137 if( ! list.isEmpty() ){
138 ind().putBlockComment(XmlComment.SHADOW_COMMENT);
141 ind().putSimpleSTag(VmdTag.SHADOW_SEQUENCE.tag()).ln();
144 for(ShadowMotion shadow : list){
145 putShadowMotion(shadow);
149 ind().putETag(VmdTag.SHADOW_SEQUENCE.tag()).ln(2);
156 * @param shadowMotion シャドウモーション
157 * @throws IOException 出力エラー
159 private void putShadowMotion(ShadowMotion shadowMotion)
161 ind().putOpenSTag(VmdTag.SHADOW_ACT.tag()).sp();
163 int frameNo = shadowMotion.getFrameNumber();
164 ShadowMode mode = shadowMotion.getShadowMode();
165 float rawParam = (float) shadowMotion.getRawScopeParam();
167 putIntAttr(XmlAttr.ATTR_FRAME, frameNo).sp();
168 putAttr(XmlAttr.ATTR_MODE, mode.name()).sp();
169 putFloatAttr(XmlAttr.ATTR_RAW_PARAM, rawParam).sp();
173 double uiVal = ShadowMotion.rawParamToScope(rawParam);
174 long lVal = Math.round(uiVal);
175 sp().putLineComment("UI:" + lVal).ln();