| Home Page | Recent Changes | Preferences

# Highlander/Gravitypack

Well Tarquin said to paste the code... So here it is in its n00b glory.

    //Written by Robin Murray Nov 2001 (]Bs[Highlander)
    //unfhighlander@hotmail.com
    //for use in UNF-OF-dome
    //Is a gravitational point source.
    //ie: a point in space that effects all the pawns in its radius of effect (collision radius)

    class blackhole extends effects;

    var() float force; //multiplier that u can use to change the force exerted.
    var vector me2target;
    var bool bEnabled;
    var pawn target;
    var float temp;
    var float temp2;

    simulated function prebeginplay()
            {
            //disabled to start <- fix me... ah well jus use timed trigger to disable it
            disable('tick');
            bEnabled = false;
            }

    simulated function tick(float deltatime)
            {
            //log("in tick");
            foreach TouchingActors(class 'pawn',target){ //go through pawns
                //log("in foreach");
                if ((Target != None) && (Target.Region.Zone != None)) {//if there is a target there...
                me2target=(self.Location-target.Location);
                me2target=Normal(me2target)*1500*DeltaTime;
                Target.SetPhysics(PHYS_Falling);
                Target.Velocity -=force*((Target.Region.Zone.ZoneGravity*DeltaTime)-me2target); //change velocity
                }
            }//of foreach
            }

    simulated function trigger(actor Other, pawn EventInstigator)//toggle it on or off
            {
            if (bEnabled)
                {
                disable('tick');
                benabled = false;
                log("blackhole disabled");
                }
                else
                {
                enable('tick');
                benabled = true;
                log("blackhole enabled");
                }

            }

    //Written by Robin Murray Nov 2001 (]Bs[Highlander)
    //unfhighlander@hotmail.com
    //for use in UNF-OF-dome
    //Is a gravitational area that is not a zone.
    class gravityactor extends effects;

    var() float force; //multiplier that u can use to change the force exerted.
    var() vector direction;
    var bool bEnabled;
    var pawn target;
    var float temp;
    var float temp2;

    simulated function prebeginplay()
            {
            //disabled to start <- fix me... ah well jus use timed trigger to disable it
            disable('tick');
            bEnabled = false;
            }
    simulated function tick(float deltatime)
            {
            //log("in tick");
            foreach TouchingActors(class 'pawn',target){ //go through pawns
                //log("in foreach");
                if ((Target != None) && (Target.Region.Zone != None)) {//if there is a target there...
                Target.SetPhysics(PHYS_Falling);
                Target.Velocity -=force*((Target.Region.Zone.ZoneGravity*DeltaTime)-direction); //change velocity
                }
            }//of foreach
            }
    simulated function trigger(actor Other, pawn EventInstigator)//toggle it on or off
            {
            if (bEnabled)
                {
                disable('tick');
                benabled = false;
                log("blackhole disabled");
                }
                else
                {
                enable('tick');
                benabled = true;
                log("blackhole enabled");
                }

            }

    //=============================================================================
    // GravityZoneInfo.
    //=============================================================================
    //Written By Robin Murray Nov 2001 (]Bs[Highlander)
    // unfhighlander@hotmail.com
    //For use in UNF-OF-dome
    //Will toggle zone gravity and velocity between two sets of values on trigger
    class GravityZoneInfo expands ZoneInfo;

    var() vector NewZoneGrav;
    var vector OldZoneGrav;
    var() vector NewZoneVelocity;
    var vector OldZoneVelocity;
    function Trigger ( Actor Other, pawn EventInstigator )
    {
        OldZoneGrav = ZoneGravity;
        ZoneGravity=NewZoneGrav;
        NewZoneGrav = OldZonegrav;
        OldZoneVelocity = ZoneVelocity;
        ZoneVelocity = NewZoneVelocity;
        NewZoneVelocity = OldZoneVelocity;
    }

    //Written by Robin Murray Nov 2001 (]Bs[Highlander)
    //unfhighlander@hotmail.com
    //for use in UNF-OF-dome
    //is a whirlwind effect.

    class whirlwind extends effects;
    var() float force; //multiplier that u can use to change the force exerted.
    var() int zcomponent; //move up or down?
    var() bool bClockwise;
    var vector me2target;
    var vector tempvector;
    var bool bEnabled;
    var pawn target;
    var float temp;
    var float temp2;

    simulated function prepare()
            {
            //disabled to start <- fix me... ah well jus use timed trigger to disable it
            disable('tick');
            bEnabled = false;
            }

    simulated function tick(float deltatime)
            {
            //log("in tick");
            foreach TouchingActors(class 'pawn',target){ //go through pawns
                //log("in foreach");
                if ((Target != None) && (Target.Region.Zone != None)) {//if there is a target there...
                me2target=(self.Location-target.Location);
                //ok  now need to get vector at right angles to this 1...
                me2target.z = zcomponent; //up or down movement
                tempvector.x = 0;
                tempvector.y = 0;
                tempvector.z = 1; //going up
                if (bClockwise) {
                tempvector = me2target cross tempvector;
                    }
                    else
                    {
                    tempvector = tempvector cross me2target;
                    }
                //now i have vector at right angles to vertical line in middle
                tempvector = tempvector + me2target;

                Target.SetPhysics(PHYS_Falling);
                Target.Velocity -=force*((Target.Region.Zone.ZoneGravity*DeltaTime)-tempvector);    //change velocity
                }
            }//of foreach
            }

    simulated function trigger(actor Other, pawn EventInstigator)//toggle it on or off
            {
            if (bEnabled)
                {
                disable('tick');
                benabled = false;
                log("blackhole disabled");
                }
                else
                {
                enable('tick');
                benabled = true;
                log("blackhole enabled");
                }

            }

Foxpaw: Did this work as you expected? I haven't been able to apply PHYS_Falling to something that is PHYS_Walking. It always just reverts instantly back to PHYS_Walking because it's touching the ground so it things it just landed. Maybe I'm just doing it wrong. Also, would you mind if I cleaned up the above a bit? There's some variables declared that don't get used at all, and some stray log statements and whatnot. It's your personal page though so it's up to you.

The Unreal Engine Documentation Site

Wiki Community

Topic Categories

Image Uploads

Random Page

Recent Changes

Offline Wiki

Unreal Engine

Console Commands

Terminology

Mapping Topics

Mapping Lessons

UnrealEd Interface

Questions&Answers

Scripting Topics

Scripting Lessons

Making Mods

Class Tree

Questions&Answers

Modeling Topics

Questions&Answers

Log In