OSDN Git Service

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