Cone Furmula problem

AgentChaos

New Member
Reaction score
1
PHP:
    function DoesQuadContainOrigin takes real x1, real y1, real x2, real y2, real x3, real y3, real x4, real y4 returns boolean
        local integer counter = 0

        if (x1-x2)*y1 < x1 * (y1-y2) then
            set counter = counter + 1
        endif

        if (x2-x3)*y2 < x2 * (y2-y3) then
            set counter = counter + 1
        endif

        if (x3-x4)*y3 < x3 * (y3-y4) then
            set counter = counter + 1
        endif

        if (x4-x1)*y4 < x4 * (y4-y1) then
            set counter = counter + 1
        endif

        return ((counter == 4) or (counter == 0))
    endfunction

    function IsPointInQuadFast takes real x, real y, real x1, real y1, real x2, real y2, real x3, real y3, real x4, real y4 returns boolean
        return DoesQuadContainOrigin(x1-x,y1-y,x2-x,y2-y,x3-x,y3-y,x4-x,y4-y)
    endfunction

    function GroupEnumUnitsInCone takes group g, real locx, real locy, real length, real angle, real width1, real width2, boolexpr filter returns nothing
        local group tempGroup = NewGroup()
        local real array x
        local real array y
        local real dx
        local real dy
        local real minX
        local real minY
        local real maxX
        local real maxY
        local rect tempRect
        local location tempLoc
        local unit u
        set x[1] = GetPPX(locx,width1,angle-90)
        set y[1] = GetPPY(locy,width1,angle-90)
        set x[2] = GetPPX(locx,width1,angle+90)
        set y[2] = GetPPY(locy,width1,angle+90)
        set dx = GetPPX(locx,length,angle)
        set dy = GetPPY(locy,length,angle)
        set x[3] = GetPPX(dx,width2,angle+90)
        set y[3] = GetPPY(dy,width2,angle+90)
        set x[4] = GetPPX(dx,width2,angle-90)
        set y[4] = GetPPY(dy,width2,angle-90)

        // Now we have a quad, define the rect that encloses it.
        set minX = RMinBJ(x[1],RMinBJ(x[2],RMinBJ(x[3],x[4])))
        set minY = RMinBJ(y[1],RMinBJ(y[2],RMinBJ(y[3],y[4])))
        set maxX = RMaxBJ(x[1],RMaxBJ(x[2],RMaxBJ(x[3],x[4])))
        set maxY = RMaxBJ(y[1],RMaxBJ(y[2],RMaxBJ(y[3],y[4])))
        set tempRect = Rect(minX,minY,maxX,maxY)
        call GroupEnumUnitsInRect(tempGroup,tempRect,filter)
        //Now we filter the ins and outs
        loop
            set u = FirstOfGroup(tempGroup)
            exitwhen u == null
            if IsPointInQuadFast(GetUnitX(u),GetUnitY(u),x[1],y[1],x[2],y[2],x[3],y[3],x[4],y[4]) then
                call GroupAddUnit(g,u)
            endif
            call GroupRemoveUnit(tempGroup,u)
        endloop

        call ReleaseGroup(tempGroup)
        call RemoveRect(tempRect)

        set tempGroup = null
        set tempLoc = null
        set tempRect = null
    endfunction
this function found in a test map,I try to use it,has a problem
PHP:
   private function SpellCast takes nothing returns nothing
        local group g=CreateGroup()
        local unit     s  = null
        local real x =GetUnitX(SpellEvent.CastingUnit)
        local real y =GetUnitY(SpellEvent.CastingUnit)
        local real x2=GetSpellTargetX()
        local real y2=GetSpellTargetY()
        local real angle= GetUnitAngleXY(x,y,x2,y2)
        set caster=SpellEvent.CastingUnit
        call GroupEnumUnitsInCone(g,x,y,250,GetUnitFacing(caster)* bj_DEGTORAD,300,300,Condition(function EnumFilter))
        loop
            set s = FirstOfGroup(g)
            exitwhen s == null
            call UnitDamageTarget(SpellEvent.CastingUnit, s, 1, false, false, ATTACK_TYPE_NORMAL, DAMAGE_TYPE_UNIVERSAL, null)
            call DestroyEffect(AddSpecialEffect("Abilities\\Spells\\Human\\HolyBolt\\HolyBoltSpecialArt.mdl", GetUnitX(s),GetUnitY(s)))
            call GroupRemoveUnit(g, s)
        endloop
        call GroupClear(g)
        call DestroyGroup(g)
        set s = null
    endfunction
if angle not use *bj_DEGTORAD EnumUnit is a rectangle ,
use *bj_DEGTORAD function not working!
someone know a better Cone Formula or can fix this problem ?
 

xPass

All aboard the xPass Express!
Reaction score
26
Err this is off-topic but, you should post this in the JASS sub-forum o_O
 

hgkjfhfdsj

Active Member
Reaction score
55
remove bj_DEGTORAD.

it is a rectangle b/c u set ur values to be a rectangle...
real width1 & real width2 are both 300. width2 should be a larger value for a 'cone'.
 
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