Discussion Possible Chain System..

13lade619

is now a game developer :)
Reaction score
399
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!)
Reaction score
216
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


coolxz.jpg
 

Chaos_Knight

New Member
Reaction score
39
@Blade

I think that a great idea. Maybe add a function, that makes it possible to bind a unit to a point.
 
General chit-chat
Help Users
  • No one is chatting at the moment.
  • Varine Varine:
    How can you tell the difference between real traffic and indexing or AI generation bots?
  • The Helper The Helper:
    The bots will show up as users online in the forum software but they do not show up in my stats tracking. I am sure there are bots in the stats but the way alot of the bots treat the site do not show up on the stats
  • Varine Varine:
    I want to build a filtration system for my 3d printer, and that shit is so much more complicated than I thought it would be
  • Varine Varine:
    Apparently ABS emits styrene particulates which can be like .2 micrometers, which idk if the VOC detectors I have can even catch that
  • Varine Varine:
    Anyway I need to get some of those sensors and two air pressure sensors installed before an after the filters, which I need to figure out how to calculate the necessary pressure for and I have yet to find anything that tells me how to actually do that, just the cfm ratings
  • Varine Varine:
    And then I have to set up an arduino board to read those sensors, which I also don't know very much about but I have a whole bunch of crash course things for that
  • Varine Varine:
    These sensors are also a lot more than I thought they would be. Like 5 to 10 each, idk why but I assumed they would be like 2 dollars
  • Varine Varine:
    Another issue I'm learning is that a lot of the air quality sensors don't work at very high ambient temperatures. I'm planning on heating this enclosure to like 60C or so, and that's the upper limit of their functionality
  • Varine Varine:
    Although I don't know if I need to actually actively heat it or just let the plate and hotend bring the ambient temp to whatever it will, but even then I need to figure out an exfiltration for hot air. I think I kind of know what to do but it's still fucking confusing
  • The Helper The Helper:
    Maybe you could find some of that information from AC tech - like how they detect freon and such
  • Varine Varine:
    That's mostly what I've been looking at
  • Varine Varine:
    I don't think I'm dealing with quite the same pressures though, at the very least its a significantly smaller system. For the time being I'm just going to put together a quick scrubby box though and hope it works good enough to not make my house toxic
  • Varine Varine:
    I mean I don't use this enough to pose any significant danger I don't think, but I would still rather not be throwing styrene all over the air
  • The Helper The Helper:
    New dessert added to recipes Southern Pecan Praline Cake https://www.thehelper.net/threads/recipe-southern-pecan-praline-cake.193555/
  • The Helper The Helper:
    Another bot invasion 493 members online most of them bots that do not show up on stats
  • Varine Varine:
    I'm looking at a solid 378 guests, but 3 members. Of which two are me and VSNES. The third is unlisted, which makes me think its a ghost.
    +1
  • The Helper The Helper:
    Some members choose invisibility mode
    +1
  • The Helper The Helper:
    I bitch about Xenforo sometimes but it really is full featured you just have to really know what you are doing to get the most out of it.
  • The Helper The Helper:
    It is just not easy to fix styles and customize but it definitely can be done
  • The Helper The Helper:
    I do know this - xenforo dropped the ball by not keeping the vbulletin reputation comments as a feature. The loss of the Reputation comments data when we switched to Xenforo really was the death knell for the site when it came to all the users that left. I know I missed it so much and I got way less interested in the site when that feature was gone and I run the site.
  • Blackveiled Blackveiled:
    People love rep, lol
    +1
  • The Helper The Helper:
    The recipe today is Sloppy Joe Casserole - one of my faves LOL https://www.thehelper.net/threads/sloppy-joe-casserole-with-manwich.193585/
  • The Helper The Helper:
    Decided to put up a healthier type recipe to mix it up - Honey Garlic Shrimp Stir-Fry https://www.thehelper.net/threads/recipe-honey-garlic-shrimp-stir-fry.193595/

      The Helper Discord

      Members online

      Affiliates

      Hive Workshop NUON Dome World Editor Tutorials

      Network Sponsors

      Apex Steel Pipe - Buys and sells Steel Pipe.
      Top