# DiscussionPossible Chain System..

##### 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.
*Destroy existing chain.

Planned Framework:

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

> 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.
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 = &quot;modelPath&quot;
//|
//+--------------------------------------------------------------+
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 &lt;= 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 &lt;= 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 &gt; 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 &lt; 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``````

#### Chaos_Knight

##### New Member

I think that a great idea. Maybe add a function, that makes it possible to bind a unit to a point.

#### BlackRose

##### Forum User

I think that a great idea. Maybe add a function, that makes it possible to bind a unit to a point.
Chain 2 units together.
Chain 2 points together.
Chain Unit to point, or Chain point to unit.
x

#### Chaos_Knight

##### New Member
._. Missed that..

General chit-chat
Help Users
• No one is chatting at the moment.
• tom_mai78101:
You need to buy a laptop that supports external GPUs for this.
• tom_mai78101:
I'm pretty lucky to get myself an Alienware 15 with RTX 2070.
• Varine:
I think I'm moving back up north for the summer, I got offered my job as the tournant chef back and I'm tired of struggling down here, it pays like twice as much too
• Varine:
I think imma give four or five weeks of notice today to my boss, and see how much that backfires on me. I know he's struggling to hire anyone though, so it's like, do a couple weeks of interviews with me and then we'll have two or three weeks to train someone to take over for me. Hopefully he doesn't fucking let me go in like two weeks cuz that would really fuck me up right now
• tom_mai78101:
Wouldn't it be better if you give 3 to 4 weeks of notice? So that, at least you are guaranteed for 1 more week of paycheck to hold you over?
• tom_mai78101:
By the way, where are you moving to?
• Varine:
Back to Idaho for the summer, then maybe Houston in August or so, my girlfriend or whatever we are loved it there
• Varine:
I'm not sure yet, but my parents need some help cuz they're getting older and my mom has MS so can't do much anymore, so I'll be able to get their property fixed up so they can sell their other house. And the resort is stoked to have me back for the summer, cuz they always struggle with staff.
• Varine:
I think it'll be alright, even if they cut me loose a bit early I do have some money and I know plenty of people that will lend me the few hundred bucks to get up there. I'm just catching up after last year still, if I have to kite some bills for a couple weeks it'll be fine.
• Varine:
I hate my job but I do like one of my bosses, he does try really hard to get me what I need, and I want to make sure I leave with them comfortable with a new manager
• Varine:
I like my coworkers for the most part too as much as I bitch about them, they just aren't reliable. As kids tend to be, I was a shithead at 19 and 20 too I'm sure, so
• tom_mai78101:
Good luck on getting things going.
• Varine:
Eh, it'll be fine, I got it mostly planned out already. Roommates know, boss will know in about an hour when I go to work, I'll have a plane booked once we decide my last day, and I have a place to stay up there lined up for two or three months
• Varine:
That all came together surprisingly easily
• Varine:
I think I'm going to give 4 weeks, so that'll give me 2 more full checks probably, and then one more coming after I leave.
+1
• Varine:
All that shit came together really well suprisingly. My boss was upset cuz I am really good at my job suprisingly, but he's stoked that he got 4 weeks, plus one or two if he needs it, my flight's book in mid June, but I start my new job almost immediately so it'll be nice to have some time to chill and pack and get my rooms cleaned out. He actually gave me a dollar raise right after I gave notice to thank me for not being short or just leaving and making sure I can help interview and train someone to replace me. He is really cool, his food truck has just been a nightmare to run. I get my vaccine next week finally, allegedly Idaho will let me have my license back when I get there, and I have all my bills up to date so it should be an easy move this time around.
• Varine:
Is anyone else getting server timeouts in the chat? I think it's on my end, my wifi adapter has been acting up recently
• Varine:
100% my end, idk what it is though.
• tom_mai78101:
Just woke up. No idea.
• jonas:
sounds great have fun in Idaho
• The Helper:
freaking Idaho
• Varine:
Yeah it sucks up there, but it'll be a bit easier for the summer probably.
• The Helper:
When you get to Houston you will have your pick there is a huge shortage of good people to work in your field here. They are hiring everywhere and Texas is pretty much fully open.
• The Helper:
for anyone else following this yes I am in Houston so Varine and I will RL meet gotta love it! Looking forward to it!
• jonas:
awesome

### Members online

No members online now.