Discussion Possible Chain System..

13lade619

is now a game developer :)
I was thinking of coding a chain system, like in the popular spell Meat Hook where you have a chain of units.

Planned functions:

Basic 'Meat Hook' type.
Chain 2 units together.
Chain 2 points together.
Chain Unit to point, or Chain point to unit.
*Add duration to existing chain.
*Destroy existing chain.

Planned Framework:

Hashtable
> stores SourceUnit and TargetUnit as keys.
> on Point chains, the target unit is an invisible dummy.

Linked List
> for the chain of units
 

kingkingyyk3

Visitor (Welcome to the Jungle, Baby!)
I made this for BlackRose, but it is the time to post it up. :D
JASS:
//+-------------------------------------------------------------+
//|                                           v1.02             | 
//|    CHAIN by Kingkingyk3                                     |
//|                                                             |
//+-------------------------------------------------------------+
//|
//|   local Chain d = Chain.create()
//|   call d.AddChainEx( x1, y1, z1, x2, y2, z2, chainDist )
//|   call d.MoveChainEx( x1, y1, z1, x2, y2, z2, chainDist )
//|   call d.terminate()
//|
//|   set d.modelPath = "modelPath"
//|  
//+--------------------------------------------------------------+
library Chain requires xefx
    
    // x
    // d - distance
    // h - z1
    // m - z2 

    struct Chain
        xefx fx
        private thistype prev
        private thistype next
        private integer count
        string path
        real scale
        real gapSize
        
        static method create takes nothing returns thistype
            local thistype this = .allocate()
            set this.prev = this
            set this.next = this
            return this
        endmethod
        
        method AddChainEx takes real x1, real y1, real z1, real x2, real y2, real z2, real gapSize returns nothing
            local real dx = x2 - x1
            local real dy = y2 - y1
            local real angle
            local real dist
            local integer tick
            local thistype new
            local real range
            local real x
            local real y
            local real height
            local real heighti 
            
            if dx+dy == 0. or gapSize <= 0. then
                return
            endif
            
            set angle = Atan2(dy,dx)
            set dist = SquareRoot(dx * dx + dy * dy)
            set tick = R2I(dist / gapSize)
            if tick == 0 then
                return
            endif
            set height = z2
            set heighti = (z2 - z1) / tick
            
            set .count = tick
            
            loop
            exitwhen tick == 0
                set new = thistype.create()
                
                set this.prev.next = new
                set new.prev = this.prev
                set new.next = this
                set this.prev = new
                
                set .gapSize = gapSize
                
                set range = gapSize * tick
                set x = x1 + range * Cos(angle)
                set y = y1 + range * Sin(angle)
                set height = height - heighti
                
                set new.fx = xefx.create(x,y,angle)
                set new.fx.fxpath = .path
                set new.fx.scale  = .scale
                set new.fx.z = height
                
                set tick = tick - 1
            endloop
        endmethod

        method MoveChainEx takes real x1, real y1, real z1, real x2, real y2, real z2 returns nothing
            local real dx = x2 - x1
            local real dy = y2 - y1
            local real angle
            local real dist
            local integer tick
            local thistype origin = this
            local real range
            local real x
            local real y
            local integer extend
            local thistype new
            local real height
            local real heighti

            if dx+dy == 0. or gapSize <= 0. then
                return
            endif
            
            set angle = Atan2(dy,dx)
            set dist = SquareRoot(dx * dx + dy * dy)
            set tick = R2I(dist / gapSize)
            if tick == 0 then
                return
            endif
            set height = z2
            set heighti = (z2 - z1) / tick
            
            loop
                set this = this.next
            exitwhen this == origin
                set tick = tick - 1
                set range = origin.gapSize * tick
                
                set x = x1 + range * Cos(angle)
                set y = y1 + range * Sin(angle)
                set height = height - heighti
                
                set .fx.x = x
                set .fx.y = y
                set .fx.xyangle = angle
                set .fx.z = height
                set .fx.zangle = Atan2( z2-z1, dist )

            endloop
            
            if tick > 0 then
                loop
                exitwhen tick == 0
                    set new = thistype.create()
                    
                    set this.prev.next = new
                    set new.prev = this.prev
                    set new.next = this
                    set this.prev = new
                    
                    set range = origin.gapSize * tick
                    set x = x1 + range * Cos(angle)
                    set y = y1 + range * Sin(angle)
                    set height = height - heighti
                    
                    set new.fx = xefx.create(x,y,angle)
                    set new.fx.fxpath = .path
                    set new.fx.z = height
                    
                    set tick = tick - 1
                    set .count = .count + 1
                endloop
            elseif tick < 0 then
                set tick = -tick
                set this = origin
                loop
                    set this = this.prev
                exitwhen tick == 0
                    set this.next.prev = this.prev
                    set this.prev.next = this.next
                    call .fx.hiddenDestroy()
                    call .deallocate()
                    set origin.count = origin.count - 1
                    set tick = tick - 1
                endloop
            endif
        endmethod
        
        method terminate takes nothing returns nothing
            local thistype origin = this
            loop
                set this = this.next
            exitwhen this == origin
                call .fx.destroy()
                call .deallocate()
            endloop
            call .deallocate()
        endmethod
        
        method operator modelPath= takes string s returns nothing
            local thistype origin = this
            loop
                set this = this.next
                exitwhen this == origin
                set .fx.fxpath = s
            endloop
            set .path = s
        endmethod
        
        method operator modelScale= takes real newScale returns nothing
            local thistype origin = this
            loop
                set this = this.next
                exitwhen this == origin
                set this.fx.scale = newScale
            endloop
            set this.scale = newScale
        endmethod
    endstruct
    
    
endlibrary


 
General chit-chat
Help Users
  • No one is chatting at the moment.
  • The Helper The Helper:
    Is that going to be a full game now tom?
  • The Helper The Helper:
    what is this Ghan? https://enterprise.ghannet.com/ you are totally holding out on us my friend
  • Ghan Ghan:
    Not mine, I just ran the server. They let the domain expire but it was a cool project so I kept it alive there.
  • Ghan Ghan:
    Used to be enterpriserpg.com I think.
  • The Helper The Helper:
    If you go to the world editor tutorials site and click the starcraft link it takes you there :)
  • Ghan Ghan:
    lol
  • Ghan Ghan:
    I forgot about that alias name. (The full URL still went to the correct site.) That should be fixed.
  • Ghan Ghan:
    Silkroad Forums site really needs help.
  • Ghan Ghan:
    Its software has been out of support since 2017.
  • Ghan Ghan:
    The woes of using custom styles....
  • The Helper The Helper:
    does anyone still use silk road forums?
  • Ghan Ghan:
    It's about as active as here I'd say. Not much going on.
  • Wizard Wizard:
    I think it doesn't help that the silk road game isn't as popular any more I think. The only MMO I play these days is FFXIV like most other people I know.
  • The Helper The Helper:
    I checked a status page for players and it says the game has 500 daily players.
  • The Helper The Helper:
    I cannot believe that site is still going I wonder if Ryoko is involved with it at all would love to talk to him again and see what he is up to
  • The Helper The Helper:
    my oldest daughter failed her driving test today for her license she is 22 and yes I have been driving her everywhere her whole life
  • The Helper The Helper:
    Now they are blaming me on Facebook for her failure LOL I am accepting it because it is my failure I am her driving teacher even though she had certified driving instruction from the best place in town I for some reason cannot teach her how to drive this is frustrating
  • jonas jonas:
    I didn't get my license until I was 25
    +1
  • The Helper The Helper:
    Back in the old days when I was getting a license people were getting them at 16 yrs old and many were getting hardships so they could get them earlier. Almost nobody did not drive when they were able. Nowadays though....
  • Ghan Ghan:
    Why drive when there's Uber Eats?
    +2
  • The Helper The Helper:
    I hope Varine is OK have not heard from him in a while.
    +1
  • Ghan Ghan:
    Diablo 2 Resurrected launching in 9 days.
  • The Helper The Helper:
    Just got a new to me computer hope it will run it
  • jonas jonas:
    I would buy if it had better modding support than D2, like a small lua script engine or much less hardcoded stuff

    Members online

    Affiliates

    Hive Workshop NUON Dome
    Top