JoeMax PixelCollision

From FSG Wiki

Jump to: navigation, search
ELEMENT Clear Mgun 127 200 250 0 1 1 1 1000 Clear 100 TEXT Mgun

// NEW STATUS MENU, ADDED THE BOUNCE ON OR OFF
TRIGGER newStatusmenu {
	STATUS CLEAR
	STATUS ADDTEXT "FPS: "
	STATUS ADDNUMBER FPS
	STATUS ADDTEXT " Over: "
	STATUS ADDMOUSEOVER
	STATUS ADDTEXT " X/Y: "
	STATUS ADDNUMBER X
	STATUS ADDTEXT "/"
	STATUS ADDNUMBER Y
	STATUS ADDTEXT " BOUNCE "
	IF (Bounce == 1) <STATUS ADDTEXT "ON"> ELSE <STATUS ADDTEXT "OFF">
	TIMER 1 FRAMES newStatusmenu
}

// USEFULL GET_ANGLE FUNCTION
TRIGGER GET_ANGLE {
	SET tmpX ($0 - $2) 
	SET tmpY ($1 - $3)
	SET tmp (SQRT ((tmpX * tmpX) + (tmpY * tmpY)))
}

TRIGGER KEYREPEAT_SPACE {
	EXEC ShootPixel ELEMENT1 X Y
}

TRIGGER ShootPixel {
	EXEC GET_ANGLE $1 $2 (1 RAND WIDTH) (1 RAND HEIGHT)
	tmpX1 = ($1 * 50) 
	tmpY1 = ($2 * 50) 
	tmpX2 = ((tmpX * -50 ) / tmp) 
	tmpY2 = ((tmpY * -50 ) / tmp)
	FlyElement = $0 
	
	EXEC MovePixel tmpX1 tmpY1 tmpX2 tmpY2 (1000 RAND 10000)
}

REMOVETRIGGER KEY_w
TRIGGER KEYREPEAT_w {
	Bounce = (1 - Bounce)
}

TRIGGER MovePixel {
	StopMoving = 0
	
	// TEST THE FUTURE PIXEL TO BE DRAWN IF ITS EARTH
	tstX = (($0 + $2) / 50)
	tstY = (($1 + $3) / 50)
	tstElement = (tstX PIXEL tstY)
	
	IF (tstElement == ELEMENT:Earth) {
		// IF ITS EARTH, WE CHECK IF THE BOUNCE IS ON (1) OR OFF (0)
		IF (Bounce == 1) {
			// IF BOUNCE IS ON, WE TEST 1 ANGLE TO BE BOUNCED TO, IF THE FUTURE PIXEL TO BE DRAWN IS EARTH
			// WE TEST ANOTHER ANGLE, THEN IF THAT ANGLE FUTURE PIXEL RETURN EARTH, BE JUST BOUNCE BACK WERE HE CAME FROM
			tstX = (($0 + ($2 * -1)) / 50)
			tstY = (($1 + $3) / 50)
			tstElement = (tstX PIXEL tstY)
			
			IF (tstElement == ELEMENT:Clear) <StopMoving = 1> 
			
			IF (StopMoving == 0) {
				tstX = (($0 + $2) / 50)
				tstY = (($1 + ($3 * -1)) / 50)
				tstElement = (tstX PIXEL tstY)
				
				IF (tstElement == ELEMENT:Clear) <StopMoving = 2>
			}
			
			IF (StopMoving == 0) <StopMoving = 3>				
		}
	} 
	
	// RETEST IF THE FUTURE PIXEL TO BE DRAWN IF ITS EARTH
	tstX = (($0 + $2) / 50)
	tstY = (($1 + $3) / 50)
	tstElement = (tstX PIXEL tstY)
	
	IF (tstElement != ELEMENT:Earth) {
		// IF ITS NOT EARTH, WE CHECK FOR SANDBOX BORDER, THEN IF OUT OF BORDER MAKE IT BOUNCE TO CORRECT ANGLE
		
		IF (($0 / 50) > WIDTH) <StopMoving = 1>
		IF (($1 / 50) > HEIGHT) <StopMoving = 2>
		IF (($0 / 50) < 0) <StopMoving = 1>
		IF (($1 / 50) < 0) <StopMoving = 2>
		IF ($4 < 0) <StopMoving = 4>
		DRAW FlyElement POINT (($0 + $2) / 50) (($1 + $3) / 50)
	}
	
	// THIS CHANGE THE DIRECTION OF THE MOVEMENT BY CHANGE THE X OR Y MOVEMENT TO INVERTED VALUE (* -1)
	IF (StopMoving == 1) <TIMER 1 FRAMES MovePixel ($0 + ($2 * -1)) ($1 + $3) ($2 * -1) $3 ($4 - 1) $5>
	IF (StopMoving == 2) <TIMER 1 FRAMES MovePixel ($0 + $2) ($1 + ($3 * -1)) $2 ($3 * -1) ($4 - 1) $5>
	IF (StopMoving == 3) <TIMER 1 FRAMES MovePixel ($0 + ($2 * -1)) ($1 + ($3 * -1)) ($2 * -1) ($3 * -1) ($4 - 1) $5>	
	IF (StopMoving == 0) <TIMER 1 FRAMES MovePixel ($0 + $2) ($1 + $3) $2 $3 ($4 - 1)>
}

// SET DEFAULT VALUE
ELEMENT1 = ELEMENT:Mgun
statustype = 1
Bounce = 1
KEYREPEATDELAY = 1
KEYREPEATRATE = 120
EXEC newStatusmenu
EXEC listgroups
EXEC listelements GROUP:Clear
Personal tools