equal
deleted
inserted
replaced
39 end; |
39 end; |
40 |
40 |
41 function AddVisualGear(X, Y: LongInt; Kind: TVisualGearType): PVisualGear; |
41 function AddVisualGear(X, Y: LongInt; Kind: TVisualGearType): PVisualGear; |
42 procedure ProcessVisualGears(Steps: Longword); |
42 procedure ProcessVisualGears(Steps: Longword); |
43 procedure DrawVisualGears(); |
43 procedure DrawVisualGears(); |
|
44 procedure DeleteVisualGear(Gear: PVisualGear); |
44 procedure AddClouds; |
45 procedure AddClouds; |
45 |
46 |
46 var VisualGearsList: PVisualGear = nil; |
47 var VisualGearsList: PVisualGear = nil; |
47 vobFrameTicks, vobFramesCount: Longword; |
48 vobFrameTicks, vobFramesCount: Longword; |
48 vobVelocity, vobFallSpeed: LongInt; |
49 vobVelocity, vobFallSpeed: LongInt; |
83 |
84 |
84 if hwRound(Gear^.X) < -cScreenWidth - 256 then Gear^.X:= int2hwFloat(cScreenWidth + 2048) else |
85 if hwRound(Gear^.X) < -cScreenWidth - 256 then Gear^.X:= int2hwFloat(cScreenWidth + 2048) else |
85 if hwRound(Gear^.X) > cScreenWidth + 2048 then Gear^.X:= int2hwFloat(-cScreenWidth - 256) |
86 if hwRound(Gear^.X) > cScreenWidth + 2048 then Gear^.X:= int2hwFloat(-cScreenWidth - 256) |
86 end; |
87 end; |
87 |
88 |
|
89 procedure doStepExpl(Gear: PVisualGear; Steps: Longword); |
|
90 begin |
|
91 Gear^.X:= Gear^.X + Gear^.dX; |
|
92 |
|
93 Gear^.Y:= Gear^.Y + Gear^.dY; |
|
94 Gear^.dY:= Gear^.dY + cGravity; |
|
95 |
|
96 dec(Gear^.FrameTicks); |
|
97 if Gear^.FrameTicks = 0 then DeleteVisualGear(Gear) |
|
98 end; |
|
99 |
88 // ================================================================== |
100 // ================================================================== |
89 const doStepHandlers: array[TVisualGearType] of TVGearStepProcedure = |
101 const doStepHandlers: array[TVisualGearType] of TVGearStepProcedure = |
90 ( |
102 ( |
91 @doStepFlake, |
103 @doStepFlake, |
92 @doStepCloud |
104 @doStepCloud, |
|
105 @doStepExpl |
93 ); |
106 ); |
94 |
107 |
95 function AddVisualGear(X, Y: LongInt; Kind: TVisualGearType): PVisualGear; |
108 function AddVisualGear(X, Y: LongInt; Kind: TVisualGearType): PVisualGear; |
96 var Result: PVisualGear; |
109 var Result: PVisualGear; |
97 begin |
110 begin |
121 dx.QWordValue:= random(214748364); |
134 dx.QWordValue:= random(214748364); |
122 dy.isNegative:= random(2) = 0; |
135 dy.isNegative:= random(2) = 0; |
123 dy.QWordValue:= 21474836 + random(64424509); |
136 dy.QWordValue:= 21474836 + random(64424509); |
124 mdY:= dy.QWordValue |
137 mdY:= dy.QWordValue |
125 end; |
138 end; |
|
139 vgtExplPart: with Result^ do |
|
140 begin |
|
141 dx.isNegative:= random(2) = 0; |
|
142 dx.QWordValue:= random(300000) + 1000000; |
|
143 dy.isNegative:= random(2) = 0; |
|
144 dy.QWordValue:= random(300000) + 1000000; |
|
145 FrameTicks:= 700 |
|
146 end; |
126 end; |
147 end; |
127 |
148 |
128 if VisualGearsList <> nil then |
149 if VisualGearsList <> nil then |
129 begin |
150 begin |
130 VisualGearsList^.PrevGear:= Result; |
151 VisualGearsList^.PrevGear:= Result; |
133 VisualGearsList:= Result; |
154 VisualGearsList:= Result; |
134 |
155 |
135 AddVisualGear:= Result |
156 AddVisualGear:= Result |
136 end; |
157 end; |
137 |
158 |
|
159 procedure DeleteVisualGear(Gear: PVisualGear); |
|
160 begin |
|
161 if Gear^.NextGear <> nil then Gear^.NextGear^.PrevGear:= Gear^.PrevGear; |
|
162 if Gear^.PrevGear <> nil then Gear^.PrevGear^.NextGear:= Gear^.NextGear |
|
163 else VisualGearsList:= Gear^.NextGear; |
|
164 |
|
165 Dispose(Gear) |
|
166 end; |
138 |
167 |
139 procedure ProcessVisualGears(Steps: Longword); |
168 procedure ProcessVisualGears(Steps: Longword); |
140 var Gear, t: PVisualGear; |
169 var Gear, t: PVisualGear; |
141 begin |
170 begin |
142 if Steps = 0 then exit; |
171 if Steps = 0 then exit; |