Fortress Forever

Fortress Forever (https://forums.fortress-forever.com/index.php)
-   Lua (https://forums.fortress-forever.com/forumdisplay.php?f=44)
-   -   (Request) Speed boost lua (https://forums.fortress-forever.com/showthread.php?t=24705)

KubeDawg 12-16-2014 11:33 PM

Speed boost lua
 
For the purposes of my new map, I want to create a boost/lift that shoots people from the corners of my map upwards and towards the center. So a 45 degree angle horizontally and depending on what works best, somewhere between 45-75 degrees vertically.

I've been using this code until now:
Code:

base_jump = trigger_ff_script:new({ pushz = 0, pushx = 0 })

function base_jump:ontouch( trigger_entity )
        if IsPlayer( trigger_entity ) then
                local player = CastToPlayer( trigger_entity )
                local playerVel = player:GetVelocity()
                playerVel.z = self.pushz
                playerVel.x = self.pushx
                player:SetVelocity( playerVel )
        end
end
player_launch = base_jump:new({ pushz = 0, pushx = 1000 })

But it appears I cannot control the direction it pushes the player in. If I set pushz to 1000 and pushx to 0, it flings me straight up in the air. If I do the opposite with pushx 1000 and pushz 0, it flings me in one single direction. So if I have it in each corner of my map, one will push me to the right, another straight forward, another backwards and one to the left. Is there a way to control the direction of the horizontal and vertical direction with lua?

squeek. 12-17-2014 12:43 AM

There are many ways to approach this. Here are two:

1) Give each trigger a different name. This is what I do in my ricochet map:
Code:

base_jump = trigger_ff_script:new({ pushx = 0, pushy = 0, pushz = 0 })

function base_jump:ontouch( trigger_entity )
        if IsPlayer( trigger_entity ) then
                local player = CastToPlayer( trigger_entity )
               
                player:SetVelocity( Vector( self.pushx, self.pushy, self.pushz ) )
                entity:EmitSound("ricochet.triggerjump")
        end
end

-- standard
jump_standard_north = base_jump:new({ pushx = 0, pushy = 700, pushz = 400 })
jump_standard_east = base_jump:new({ pushx = 700, pushy = 0, pushz = 400 })
jump_standard_south = base_jump:new({ pushx = 0, pushy = -700, pushz = 400 })
jump_standard_west = base_jump:new({ pushx = -700, pushy = 0, pushz = 400 })

-- etc...

2) Add a named info_target (or any point entity) and use that to get the direction of the velocity. Untested code to give you a general idea:
Code:

local base_launch_towards_target = trigger_ff_script:new({ horiz_push = 0, vert_push = 0, target = "" })

function base_launch_towards_target:ontouch( trigger_entity )
        if IsPlayer( trigger_entity ) then
                local player = CastToPlayer( trigger_entity )
                local target = GetEntityByName( self.target )

                if not target then return end

                local dir = target:GetOrigin() - player:GetOrigin()
                -- zero out the z value so that only horizontal direction matters
                dir.z = 0
                dir:Normalize()
               
                player:SetVelocity( Vector(dir.x * self.horiz_push, dir.y * self.horiz_push, self.vert_push) )
        end
end

player_launch = base_launch_towards_target:new({ horiz_push = 1000, vert_push = 500, target="target_name" })

in this example, you'd name the info_target entity "target_name"

EDIT: Didn't think the target code through; made some minor adjustments so that the vertical push is constant rather than influenced by the difference in height between the player and the target

KubeDawg 12-17-2014 04:54 AM

awesome! thanks

Headz 12-21-2014 11:22 AM

mmm or use a trigger_push brush and set angles/speed ?
new map moto ? :thumbsup:

KubeDawg 12-21-2014 01:06 PM

That doesn't seem to work Headz. Plus, then I have to deal with the speed clamping errors (which can be removed via a plugin, but still)


All times are GMT. The time now is 08:37 PM.

Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2024, vBulletin Solutions, Inc.