import math, vector, collision, pyg
from vector import *
from collision import *


red = (255,50,50)
blue = (50,50,255)
green = (50,255,50)

opos = vector(200,50)            # le point
pos = vector(0,450)          # lancienne position
print "pos =",pos.x,",",pos.y
print "opos =",opos.x,",",opos.y

lineA = vector(100,180)         # la ligne de collision
lineB = vector(505,400)
lineO = vector(0,512)

def unitize(vec):
        return Vdiv(vec,Vmagnitude(vec))
                    
while pyg.main():        

        pyg.circle(lineA.x,lineA.y)     # dessine ligne collision
        pyg.circle(lineB.x,lineB.y)
        pyg.circle(lineO.x,lineO.y)
        pyg.line(lineA.x,lineA.y, lineB.x,lineB.y, blue)
        pyg.line(lineO.x,lineO.y, lineB.x,lineB.y, green)
        pyg.line(lineA.x,lineA.y, lineO.x,lineO.y, green)

        pyg.circle(pos.x,pos.y, 2, green)         # dessine ligne vieux point vers point
        pyg.circle(opos.x,opos.y, 2, blue)
        pyg.line(pos.x,pos.y, opos.x,opos.y, red)
        pos.x += 1
        if pos.x > 1024:
                pos.x = 0

########################################### ICITTE #####################
        #if collidePointLine(pos, lineO, lineA, lineB):
        if collideLineLine(opos,pos,lineA,lineB):

                pyg.line(opos.x,opos.y,pos.x,pos.y,(0,0,0))
                pyg.line(lineA.x,lineA.y,lineB.x,lineB.y,(0,0,0))
                #intersectpoint = collidePointLine(pos,origAB,lineA,lineB)
                intersectpoint = collideLineLine(opos,pos,lineA,lineB)
                #intersectpoint = VLineIntersect(pos, opos, lineA, lineB)
                pyg.circle(intersectpoint.x,intersectpoint.y,4,red)  # <<<-----
   
                nearpointPen = VclosestPoint(pos, lineA,lineB)
                nearpointOut = VclosestPoint(opos, lineA,lineB)
                
                pyg.circle(nearpointPen.x, nearpointPen.y)
                pyg.circle(nearpointOut.x, nearpointOut.y)

                mpos = Vadd(nearpointPen, Vsub(nearpointPen, pos))          
                mopos = Vadd(nearpointOut, Vsub(nearpointOut, opos))
                pyg.circle(mopos.x,mopos.y,2,blue)
                pyg.circle(mpos.x,mpos.y,2,green)

                rest = 0.1
                                
                restituteVOP = VmulScale(Vsub(intersectpoint, mopos), rest)
                mopos = Vadd(mopos, restituteVOP)
                restituteVP = VmulScale(Vsub(intersectpoint, mpos), rest)
                mpos = Vadd(mpos, restituteVP)
                
                pyg.circle(mopos.x,mopos.y,2,blue)
                pyg.circle(mpos.x,mpos.y,2,green)
                pyg.line(mopos.x,mopos.y, intersectpoint.x,intersectpoint.y, green)
                pyg.line(mpos.x,mpos.y, intersectpoint.x,intersectpoint.y, green)
                
##                npos = VLineIntersect(pos, opos, lineA, lineB)
##                pyg.circle(npos.x,npos.y,2,red)
##
##                nearpoint = VclosestPoint(pos, lineA,lineB)
##                pyg.circle(nearpoint.x, nearpoint.y)
##                pyg.line(nearpoint.x,nearpoint.y, pos.x,pos.y)
##
##                xlate = VmulScale(Vsub(npos, nearpoint), 2)
##                print "xlate",xlate.x,xlate.y
##
##                mopos = Vadd(pos, xlate)
##                pyg.circle(mopos.x,mopos.y)
##
##                pyg.line(mopos.x,mopos.y, npos.x,npos.y, red)
