OSDN Git Service

MMD Ver7.40 対応 新スキーマ開発開始
[mikutoga/Vmd2XML.git] / src / main / java / jp / sfjp / mikutoga / vmd / model / xml / SaxLightingListener.java
1 /*
2  * lighting listener from XML
3  *
4  * License : The MIT License
5  * Copyright(c) 2013 MikuToga Partners
6  */
7
8 package jp.sfjp.mikutoga.vmd.model.xml;
9
10 import java.util.List;
11 import jp.sfjp.mikutoga.math.MkVec3D;
12 import jp.sfjp.mikutoga.vmd.model.LuminousColor;
13 import jp.sfjp.mikutoga.vmd.model.LuminousMotion;
14 import jp.sfjp.mikutoga.vmd.model.ShadowMode;
15 import jp.sfjp.mikutoga.vmd.model.ShadowMotion;
16 import jp.sfjp.mikutoga.vmd.model.VmdMotion;
17 import org.xml.sax.Attributes;
18
19 /**
20  * 照明・シャドウ関連のXML要素出現イベントを受信する。
21  */
22 class SaxLightingListener extends SaxVmdListener{
23
24     private LuminousMotion currentLuminous = null;
25
26
27     /**
28      * コンストラクタ。
29      */
30     SaxLightingListener(){
31         super();
32         return;
33     }
34
35
36     /**
37      * {@inheritDoc}
38      * @param tag {@inheritDoc}
39      * @param attr {@inheritDoc}
40      */
41     @Override
42     void openTag(VmdTag tag, Attributes attr){
43         switch(tag){
44         case LUMINOUS_ACT:
45             openLumiAct(attr);
46             break;
47         case LUMI_COLOR:
48             openLumiColor(attr);
49             break;
50         case LUMI_DIRECTION:
51             openLumiDirection(attr);
52             break;
53         case SHADOW_ACT:
54             openShadowAct(attr);
55             break;
56         default:
57             break;
58         }
59
60         return;
61     }
62
63     /**
64      * {@inheritDoc}
65      * @param tag {@inheritDoc}
66      */
67     @Override
68     void closeTag(VmdTag tag){
69         if(tag == VmdTag.LUMINOUS_ACT){
70             closeLumiAct();
71         }
72         return;
73     }
74
75     /**
76      * lumiAct要素開始の通知。
77      * @param attr 属性群
78      */
79     private void openLumiAct(Attributes attr){
80         this.currentLuminous = new LuminousMotion();
81
82         int frameNo = SaxAttr.getIntAttr(attr, XmlAttr.ATTR_FRAME);
83         this.currentLuminous.setFrameNumber(frameNo);
84
85         return;
86     }
87
88     /**
89      * lumiAct要素終了の通知。
90      */
91     private void closeLumiAct(){
92         VmdMotion motion = getVmdMotion();
93         List<LuminousMotion> lumiList = motion.getLuminousMotionList();
94         lumiList.add(this.currentLuminous);
95
96         this.currentLuminous = null;
97
98         return;
99     }
100
101     /**
102      * lumiColor要素開始の通知。
103      * @param attr 属性群
104      */
105     private void openLumiColor(Attributes attr){
106         LuminousColor color = this.currentLuminous.getColor();
107
108         float rCol = SaxAttr.getFloatAttr(attr, XmlAttr.ATTR_R_COL);
109         float gCol = SaxAttr.getFloatAttr(attr, XmlAttr.ATTR_G_COL);
110         float bCol = SaxAttr.getFloatAttr(attr, XmlAttr.ATTR_B_COL);
111
112         color.setColR(rCol);
113         color.setColG(gCol);
114         color.setColB(bCol);
115
116         return;
117     }
118
119     /**
120      * lumiDirection要素開始の通知。
121      * @param attr 属性群
122      */
123     private void openLumiDirection(Attributes attr){
124         MkVec3D vec = this.currentLuminous.getDirection();
125
126         float xVec = SaxAttr.getFloatAttr(attr, XmlAttr.ATTR_X_VEC);
127         float yVec = SaxAttr.getFloatAttr(attr, XmlAttr.ATTR_Y_VEC);
128         float zVec = SaxAttr.getFloatAttr(attr, XmlAttr.ATTR_Z_VEC);
129
130         vec.setXVal(xVec);
131         vec.setYVal(yVec);
132         vec.setZVal(zVec);
133
134         return;
135     }
136
137     /**
138      * shadowAct要素開始の通知。
139      * @param attr 属性群
140      */
141     private void openShadowAct(Attributes attr){
142         ShadowMotion shadowMotion = new ShadowMotion();
143
144         int frameNo = SaxAttr.getIntAttr(attr, XmlAttr.ATTR_FRAME);
145         shadowMotion.setFrameNumber(frameNo);
146
147         float rawParam =
148                 SaxAttr.getFloatAttr(attr, XmlAttr.ATTR_RAW_PARAM);
149         shadowMotion.setRawScopeParam(rawParam);
150
151         String modeAttr =
152                 SaxAttr.getStringAttr(attr, XmlAttr.ATTR_MODE);
153         ShadowMode mode = ShadowMode.valueOf(modeAttr);
154         shadowMotion.setShadowMode(mode);
155
156         VmdMotion motion = getVmdMotion();
157         List<ShadowMotion> shadowList = motion.getShadowMotionList();
158         shadowList.add(shadowMotion);
159
160         return;
161     }
162
163 }