'####################
' Cars By Ashish
'####################
' Just for fun! :)
'@KingOfCoders
acc
AS vec2
'acceleration
'power as single
'noise function related variables
roadMap(i).x = i
roadMap(i).y = noise(xoff, yoff, 0) * 40 + 363
xoff = xoff + .001
yoff = yoff + .01
white&
= _RGB(255, 255, 255)Car.backWheel.
pos.y
= 350Car.backWheel.ang = v
Car.backWheel.radius = 13
Car.frontWheel.
pos.x
= 130Car.frontWheel.
pos.y
= 350Car.frontWheel.ang = v
Car.frontWheel.radius = 13
Car.headlight.switched = -1
initCar Car
drawCar Car
drawMap roadMap()
Car.backWheel.acc.x = Car.backWheel.acc.x + .05
Car.frontWheel.acc.x = Car.frontWheel.acc.x + .05
Car.backWheel.acc.x = Car.backWheel.acc.x - .05
Car.frontWheel.acc.x = Car.frontWheel.acc.x - .05
IF Car.backWheel.vel.x
> 0 THEN Car.backWheel.vel.x
= Car.backWheel.vel.x
- .09 IF Car.backWheel.vel.x
< 0 THEN Car.backWheel.vel.x
= Car.backWheel.vel.x
+ .09
IF Car.frontWheel.vel.x
> 0 THEN Car.frontWheel.vel.x
= Car.frontWheel.vel.x
- .09 IF Car.frontWheel.vel.x
< 0 THEN Car.frontWheel.vel.x
= Car.frontWheel.vel.x
+ .09 IF Car.headlight.switched
THEN Car.headlight.switched
= 0 ELSE Car.headlight.switched
= -1 updateCar Car
Car.backWheel.acc.x = 0
Car.frontWheel.acc.x = 0
Car.backWheel.
pos.x
= roadMap
(Car.backWheel.pos2.x
).x
Car.backWheel.
pos.y
= roadMap
(Car.backWheel.pos2.x
).y
- 13
Car.frontWheel.
pos.x
= roadMap
(Car.frontWheel.pos2.x
).x
Car.frontWheel.
pos.y
= roadMap
(Car.frontWheel.pos2.x
).y
- 13
SUB drawMap
(mapData
() AS vec2
) LINE (mapData
(i
).x
, mapData
(i
).y
)-(mapData
(i
+ 1).x
, mapData
(i
+ 1).y
), white&
SUB initCar
(obj
AS cars
) obj.headlight.
pos.x
= obj.frontWheel.
pos.x
+ 25obj.headlight.
pos.y
= obj.frontWheel.
pos.y
- 25
SUB drawCar
(obj
AS cars
) 'we will draw body frames first, then, lights, followed by wheels.
LINE (obj.backWheel.
pos.x
- 30, obj.backWheel.
pos.y
- 40)-(obj.frontWheel.
pos.x
+ 25, obj.frontWheel.
pos.y
- 40), white&
'up base LINE (obj.backWheel.
pos.x
+ obj.backWheel.radius
, obj.backWheel.
pos.y
)-(obj.frontWheel.
pos.x
- obj.frontWheel.radius
, obj.frontWheel.
pos.y
), white&
'down base
'.....and some more..... little lines to cover down base.....
LINE (obj.backWheel.
pos.x
- obj.backWheel.radius
, obj.backWheel.
pos.y
)-(obj.backWheel.
pos.x
- 30, obj.backWheel.
pos.y
), white&
LINE (obj.frontWheel.
pos.x
+ obj.backWheel.radius
, obj.frontWheel.
pos.y
)-(obj.frontWheel.
pos.x
+ 25, obj.frontWheel.
pos.y
), white&
'left & right of base
LINE (obj.backWheel.
pos.x
- 30, obj.backWheel.
pos.y
)-(obj.backWheel.
pos.x
- 30, obj.backWheel.
pos.y
- 40), white&
LINE (obj.frontWheel.
pos.x
+ 25, obj.frontWheel.
pos.y
)-(obj.frontWheel.
pos.x
+ 25, obj.frontWheel.
pos.y
- 40), white&
'steeps
LINE (obj.backWheel.
pos.x
- 30, obj.backWheel.
pos.y
- 40)-(obj.backWheel.
pos.x
+ 5, obj.backWheel.
pos.y
- 70), white&
LINE (obj.frontWheel.
pos.x
+ 25, obj.frontWheel.
pos.y
- 40)-(obj.frontWheel.
pos.x
- 5, obj.frontWheel.
pos.y
- 70), white&
'roof
LINE (obj.backWheel.
pos.x
+ 5, obj.backWheel.
pos.y
- 70)-(obj.frontWheel.
pos.x
- 5, obj.frontWheel.
pos.y
- 70), white&
'divider, to form window glasses
'line (obj.backWheel.pos.y - 70)-(obj.)
'lights, x = cos0*r + xx, cos0 = x - xx / r
IF obj.headlight.switched
THEN h = map(i, 1, 150, 3, 30)
a = map(i, 1, 100, 200, 0)
LINE (obj.headlight.
pos.x
+ i
, obj.headlight.
pos.y
- h
)-(obj.headlight.
pos.x
+ i
, obj.headlight.
pos.y
+ h
), _RGBA(255, 255, 255, a
) 'tyres
CIRCLE (obj.backWheel.
pos.x
, obj.backWheel.
pos.y
), obj.backWheel.radius
, white&
CIRCLE (obj.frontWheel.
pos.x
, obj.frontWheel.
pos.y
), obj.frontWheel.radius
, white&
LINE (COS(obj.backWheel.ang
) * obj.backWheel.radius
+ obj.backWheel.
pos.x
, SIN(obj.backWheel.ang
) * obj.backWheel.radius
+ obj.backWheel.
pos.y
)-(COS(obj.backWheel.ang
+ _PI) * obj.backWheel.radius
+ obj.backWheel.
pos.x
, SIN(obj.backWheel.ang
+ _PI) * obj.backWheel.radius
+ obj.backWheel.
pos.y
), white&
LINE (COS(obj.frontWheel.ang
) * obj.frontWheel.radius
+ obj.frontWheel.
pos.x
, SIN(obj.frontWheel.ang
) * obj.frontWheel.radius
+ obj.frontWheel.
pos.y
)-(COS(obj.frontWheel.ang
+ _PI) * obj.frontWheel.radius
+ obj.frontWheel.
pos.x
, SIN(obj.frontWheel.ang
+ _PI) * obj.frontWheel.radius
+ obj.frontWheel.
pos.y
), white&
SUB updateCar
(obj
AS cars
) obj.backWheel.
pos.x
= obj.backWheel.
pos.x
+ obj.backWheel.vel.x
obj.backWheel.
pos.y
= obj.backWheel.
pos.y
+ obj.backWheel.vel.y
IF obj.backWheel.vel.x
> 0 THEN obj.backWheel.vel.x
= obj.backWheel.vel.x
- .01 IF obj.backWheel.vel.x
< 0 THEN obj.backWheel.vel.x
= obj.backWheel.vel.x
+ .01
obj.frontWheel.
pos.x
= obj.frontWheel.
pos.x
+ obj.frontWheel.vel.x
obj.frontWheel.
pos.y
= obj.frontWheel.
pos.y
+ obj.frontWheel.vel.y
IF obj.frontWheel.vel.x
> 0 THEN obj.frontWheel.vel.x
= obj.frontWheel.vel.x
- .01 IF obj.frontWheel.vel.x
< 0 THEN obj.frontWheel.vel.x
= obj.frontWheel.vel.x
+ .01
obj.backWheel.vel.x = obj.backWheel.vel.x + obj.backWheel.acc.x
obj.backWheel.vel.y = obj.backWheel.vel.y + obj.backWheel.acc.y
obj.frontWheel.vel.x = obj.frontWheel.vel.x + obj.frontWheel.acc.x
obj.frontWheel.vel.y = obj.frontWheel.vel.y + obj.frontWheel.acc.y
IF obj.backWheel.vel.x
<> 0 THEN obj.backWheel.ang
= obj.backWheel.ang
+ obj.backWheel.vel.x
* 0.077
IF obj.frontWheel.vel.x
<> 0 THEN obj.frontWheel.ang
= obj.frontWheel.
pos.x
/ Car.frontWheel.radius
obj.headlight.
pos.x
= obj.frontWheel.
pos.x
+ 25obj.headlight.
pos.y
= obj.frontWheel.
pos.y
- 25
obj.backWheel.pos2.x
= INT(obj.backWheel.
pos.x
)obj.backWheel.pos2.y
= INT(obj.backWheel.
pos.y
)
obj.frontWheel.pos2.x
= INT(obj.frontWheel.
pos.x
)obj.frontWheel.pos2.y
= INT(obj.frontWheel.
pos.y
)
FUNCTION map!
(value!
, minRange!
, maxRange!
, newMinRange!
, newMaxRange!
) map! = ((value! - minRange!) / (maxRange! - minRange!)) * (newMaxRange! - newMinRange!) + newMinRange!
dist!
= SQR((x2!
- x1!
) ^ 2 + (y2!
- y1!
) ^ 2)
p5NoiseSetup = -1
PERLIN_YWRAPB = 4
PERLIN_YWRAP
= INT(1 * (2 ^ PERLIN_YWRAPB
)) PERLIN_ZWRAPB = 8
PERLIN_ZWRAP
= INT(1 * (2 ^ PERLIN_ZWRAPB
)) PERLIN_SIZE = 4095
perlin_octaves = 4
perlin_amp_falloff = 0.5
FOR i
= 0 TO PERLIN_SIZE
+ 1
xf = x - xi
yf = y - yi
zf = z - zi
r = 0
ampl = .5
FOR o
= 1 TO perlin_octaves
of
= xi
+ INT(yi
* (2 ^ PERLIN_YWRAPB
)) + INT(zi
* (2 ^ PERLIN_ZWRAPB
))
rxf
= 0.5 * (1.0 - COS(xf
* _PI)) ryf
= 0.5 * (1.0 - COS(yf
* _PI))
n1
= perlin
(of
AND PERLIN_SIZE
) n1
= n1
+ rxf
* (perlin
((of
+ 1) AND PERLIN_SIZE
) - n1
) n2
= perlin
((of
+ PERLIN_YWRAP
) AND PERLIN_SIZE
) n2
= n2
+ rxf
* (perlin
((of
+ PERLIN_YWRAP
+ 1) AND PERLIN_SIZE
) - n2
) n1 = n1 + ryf * (n2 - n1)
of = of + PERLIN_ZWRAP
n2
= perlin
(of
AND PERLIN_SIZE
) n2
= n2
+ rxf
* (perlin
((of
+ 1) AND PERLIN_SIZE
) - n2
) n3
= perlin
((of
+ PERLIN_YWRAP
) AND PERLIN_SIZE
) n3
= n3
+ rxf
* (perlin
((of
+ PERLIN_YWRAP
+ 1) AND PERLIN_SIZE
) - n3
) n2 = n2 + ryf * (n3 - n2)
n1
= n1
+ (0.5 * (1.0 - COS(zf
* _PI))) * (n2
- n1
)
r = r + n1 * ampl
ampl = ampl * perlin_amp_falloff
xf = xf * 2
yf = yf * 2
zf = zf * 2
IF xf
>= 1.0 THEN xi
= xi
+ 1: xf
= xf
- 1 IF yf
>= 1.0 THEN yi
= yi
+ 1: yf
= yf
- 1 IF zf
>= 1.0 THEN zi
= zi
+ 1: zf
= zf
- 1 noise! = r
SUB noiseDetail
(lod!
, falloff!
) IF lod!
> 0 THEN perlin_octaves
= lod!
IF falloff!
> 0 THEN perlin_amp_falloff
= falloff!