Snippet Loc

Dirac

22710180
Reaction score
147
JASS:
library Loc /* v1.1.0

*/uses/* 
*/  LinkedListModule /* thehelper.net/forums/showthread.php/168775-LinkedListModule

Replacement of the Location native.

***********************************************************************
*
*   struct Loc
*
*       readonly real x
*       readonly real y
*       readonly real z
*           -   These 3 read-only variables are the Loc's coordinates
*
*       static method create takes real x, real y, real z returns Loc
*           -   Creates a new Loc with the given coordinates.
*       method destroy takes nothing returns nothing
*           -   Deallocates the Loc.
*
*       method move takes real x, real y, real z returns nothing
*           -   Assigns the Loc new coordinates.
*
*       static method join takes Loc A, Loc B returns nothing
*           -   Joins two Locs together. You can join multiple Locs
*       method disjoint takes nothing returns nothing
*           -   Breaks the joint of the given Loc.
*
*       These 4 read-only members store the relation between
*       two Locs. Can be set manually using the "get" methods
*       or automatically using the join method.
*           readonly real angle
*               -   The angle between the Locs in the XY plane.
*           readonly real distance
*               -   The distance between the Locs in the XY plane.
*           readonly real slope
*               -   The relation between the height difference of the
*               -   two Locs and the distance between them
*           readonly real zangle
*               -   The angle of the Locs in the Z plane.
*           readonly real modulo
*               -   The distance between the Locs in the XYZ plane.
*
*       method angleGet takes Loc fromWhatLoc returns nothing
*       method distanceGet takes Loc fromWhatLoc returns nothing
*       method slopeGet takes Loc fromWhatLoc returns nothing
*           -   Sets the respective member to the required value.
*
**********************************************************************/
    
    struct Loc extends array
        
        implement LinkedList
        
        readonly static location point = Location(0,0)
        
        readonly real x 
        readonly real y
        readonly real z
        
        readonly real angle
        readonly real distance
        readonly real slope
        
        method operator zangle takes nothing returns real
            return Atan(slope)
        endmethod
        
        method operator modulo takes nothing returns real
            return distance/Cos(zangle)
        endmethod
        
        method angleGet takes Loc v returns real
            set angle = Atan2(y-v.y,x-v.x)
            return angle
        endmethod
        
        method distanceGet takes Loc v returns real
            set distance = SquareRoot((v.x-x)*(v.x-x)+(v.y-y)*(v.y-y))
            return distance
        endmethod
        
        method slopeGet takes Loc v returns real
            set slope = (v.z-z)/distance
            return slope
        endmethod
        
        method calculate takes Loc v returns nothing
            call this.angleGet(v)
            call this.distanceGet(v)
            call this.slopeGet(v)
        endmethod
        
        private method refresh takes nothing returns nothing
            local thistype exit = this
            loop
                set this = next
                exitwhen this == exit
                call exit.calculate(this)
                set angle = exit.angle+bj_PI
                set distance = exit.distance
                set slope = -exit.slope
            endloop
        endmethod
        
        static method join takes Loc A, Loc B returns nothing
            set A.next.prev = B.prev
            set B.prev.next = A.next
            set A.next = B
            set B.prev = A
            call A.refresh()
        endmethod
        
        method disjoint takes nothing returns nothing
            call this.removeNode()
        endmethod
        
        method move takes real sx, real sy, real sz returns nothing
            call MoveLocation(point,sx,sy)
            set x = sx
            set y = sy
            set z = sz+GetLocationZ(point)
            call this.refresh()
        endmethod
        
        static method create takes real sx, real sy, real sz returns thistype
            local thistype this = createNode()
            call this.move(sx,sy,sz)
            return this
        endmethod
        
        method destroy takes nothing returns nothing
            call this.removeNode()
            call this.deallocate()
        endmethod
        
    endstruct
    
endlibrary
 
General chit-chat
Help Users
  • No one is chatting at the moment.

      The Helper Discord

      Members online

      No members online now.

      Affiliates

      Hive Workshop NUON Dome World Editor Tutorials

      Network Sponsors

      Apex Steel Pipe - Buys and sells Steel Pipe.
      Top