00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015 #include "uvScrollNode.h"
00016
00017 #include "bamReader.h"
00018 #include "datagram.h"
00019 #include "datagramIterator.h"
00020 #include "luse.h"
00021 #include "renderState.h"
00022 #include "texMatrixAttrib.h"
00023 #include "textureStage.h"
00024 #include "transformState.h"
00025
00026 TypeHandle UvScrollNode::_type_handle;
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037 PandaNode *UvScrollNode::
00038 make_copy() const {
00039 return new UvScrollNode(*this);
00040 }
00041
00042
00043
00044
00045
00046
00047
00048 void UvScrollNode::
00049 register_with_read_factory() {
00050 BamReader::get_factory()->register_factory(get_class_type(), make_from_bam);
00051 }
00052
00053
00054
00055
00056
00057
00058
00059 void UvScrollNode::
00060 write_datagram(BamWriter *manager, Datagram &dg) {
00061 PandaNode::write_datagram(manager, dg);
00062 dg.add_stdfloat(_u_speed);
00063 dg.add_stdfloat(_v_speed);
00064 dg.add_stdfloat(_r_speed);
00065 }
00066
00067
00068
00069
00070
00071
00072
00073
00074
00075 TypedWritable *UvScrollNode::
00076 make_from_bam(const FactoryParams ¶ms) {
00077 UvScrollNode *node = new UvScrollNode("");
00078 DatagramIterator scan;
00079 BamReader *manager;
00080
00081 parse_params(params, scan, manager);
00082 node->fillin(scan, manager);
00083
00084 return node;
00085 }
00086
00087
00088
00089
00090
00091
00092
00093
00094 void UvScrollNode::
00095 fillin(DatagramIterator &scan, BamReader *manager) {
00096 PandaNode::fillin(scan, manager);
00097
00098 _u_speed = scan.get_stdfloat();
00099 _v_speed = scan.get_stdfloat();
00100 if(manager->get_file_minor_ver() >=22) {
00101 _r_speed = scan.get_stdfloat();
00102 }
00103
00104 }
00105
00106
00107
00108
00109
00110
00111
00112
00113
00114
00115
00116
00117
00118
00119
00120
00121
00122
00123
00124
00125
00126
00127
00128
00129
00130
00131 bool UvScrollNode::
00132 cull_callback(CullTraverser * trav, CullTraverserData &data) {
00133 double elapsed = ClockObject::get_global_clock()->get_frame_time() - _start_time;
00134 CPT(TransformState) ts = TransformState::make_pos_hpr(
00135 LVecBase3(cmod(elapsed*_u_speed,1.0)/1.0, cmod(elapsed*_v_speed,1.0)/1.0,0),
00136 LVecBase3((cmod(elapsed*_r_speed,1.0)/1.0)*360,0,0));
00137
00138 CPT(RenderAttrib) tm = TexMatrixAttrib::make(TextureStage::get_default(), ts);
00139 CPT(RenderState) rs = RenderState::make_empty()->set_attrib(tm);
00140 data._state = data._state->compose(rs);
00141
00142 return true;
00143 }
00144
00145
00146
00147
00148
00149
00150
00151
00152
00153
00154
00155 bool UvScrollNode::
00156 safe_to_flatten() const {
00157 return false;
00158 }
00159
00160
00161
00162
00163
00164
00165
00166 bool UvScrollNode::
00167 safe_to_combine() const {
00168 return false;
00169 }