For direct access use https://forums.oldunreal.com
It's been quite a while since oldunreal had an overhaul, but we are moving to another server which require some updates and changes. The biggest change is the migration of our old reliable YaBB forum to phpBB. This system expects you to login with your username and old password known from YaBB.
If you experience any problems there is also the usual "password forgotten" function. Don't forget to clear your browser cache!
If you have any further concerns feel free to contact me: Smirftsch@oldunreal.com

RenderOverlays() question

The section related to UnrealScript and modding. This board is for coders to discuss and exchange experiences or ask questions.
User avatar
Rocky
OldUnreal Member
Posts: 99
Joined: Mon Nov 18, 2013 9:21 am

RenderOverlays() question

Post by Rocky »

I am trying to port UT3 weapons to 227.

So in UT3, the weapons and arms are both separate meshes and I can't find way to merge them in any model editors.

Hence, I had to add them seperately (coding way). So my question is how to add the "Arms" in RenderOverlays() function properly??

Here is code:

Code: Select all

var(RenderOverlays) WP_SniperRifleArms Arms;
var mesh ArmsMesh;
var int NumFire;

replication
{
      reliable if(Role == ROLE_Authority)
            Arms;
}

simulated function PostBeginPlay()
{
      PrepareArms();
      Super.PostBeginPlay();
}

simulated event RenderOverlays(Canvas Canvas)
{
      Super.RenderOverlays(Canvas);

      //PrepareArms();

      if(Arms != None)
      {
            Arms.Style = STY_Normal;
            Arms.bUnlit = false;
            Arms.bMeshEnviroMap = False;
            Arms.Texture = None;
            Arms.Mesh = ArmsMesh;
            Arms.SetLocation(Location);
            Arms.SetRotation(Pawn(Owner).ViewRotation);
            Canvas.DrawActor(Arms, False, False);
      }
      else if(ArmsMesh != None)
      {
            Arms = Spawn(Class'WP_SniperRifleArms', Self);
            Arms.Mesh = ArmsMesh;
            Arms.DrawScale = PlayerViewScale;
            Arms.bHidden = true;
      }
}

simulated function PrepareArms()
{
      if(Pawn(Owner) == None)
            return;

      if(Arms == None)
      {
            Arms = Spawn(Class'WP_SniperRifleArms', Self);
            Arms.DrawScale = PlayerViewScale;
            Arms.bHidden = true;
      }
      else
            return;
}
This partially works. Like if I select the Sniper Rifle for first time, the arms mesh doesn't show up. However when I select again, it shows up.

Here is WP_SniperRifle.UC:

Code: Select all

class WP_SniperRifleArms extends Effects;

simulated function Tick(float Delta)
{
      /*if (Owner != None && bHidden != Owner.bHidden)
      {
            bHidden = Owner.bHidden;
            bOldHidden = bHidden;
      }
      else*/ 
      if (Owner == None)
            Destroy();
}

defaultproperties
{
    bHidden=True
    bAnimByOwner=True
    bNetTemporary=False
    DrawType=DT_Mesh
    Mesh=LodMesh'UnrealShare.WoodenBoxM'
    Mass=0.000000
}
Another problem is, the arms doesn't animate along with owner i.e. the Sniper Rifle even though the property bAnimByOwner is set to true.

To animate I have to seperately write like this:

Code: Select all

Arms.PlayAnim('Select', 1.0, 0.04); //Same for fire, idle and down animations
Can anyone help me on how to spawn the arms and animate along with gun??
Thanks.
User avatar
.:..:
OldUnreal Member
Posts: 1637
Joined: Tue Aug 16, 2005 4:35 am

Re: RenderOverlays() question

Post by .:..: »

Try something along this:

Code: Select all

var WP_SniperRifleArms Arms;
var(RenderOverlays) mesh ArmsMesh;
var int NumFire;

simulated event RenderOverlays(Canvas Canvas)
{
      Super.RenderOverlays(Canvas);

      if(ArmsMesh != None)
      {
            if( Arms==None )
                  PrepareArms();

            Arms.DrawScale = DrawScale;
            Arms.Style = Style;
            Arms.bUnlit = bUnlit;
            Arms.Texture = Texture;
            Arms.bMeshEnviroMap = bMeshEnviroMap;
            Arms.AnimSequence = AnimSequence;
            Arms.AnimFrame = AnimFrame;
            Arms.bAnimLoop = bAnimLoop;
            Arms.SetLocation(Location);
            Arms.SetRotation(Rotation);
            Canvas.DrawActor(Arms, False, False);
      }
}

simulated function PrepareArms()
{
      Arms = Spawn(Class'WP_SniperRifleArms', Self);
      Arms.Mesh = ArmsMesh;
}

simulated function Destroyed()
{
      Super.Destroyed();
      if( Arms!=None )
            Arms.Destroy();
}

Code: Select all

class WP_SniperRifleArms extends Effects
      transient;

defaultproperties
{
      bHidden=True
      DrawType=DT_Mesh
      Mass=0.000000
      RemoteRole=ROLE_None
}
1823223D2A33224B0 wrote:...and now im stuck trying to fix everything you broke for the next 227 release xD :P
(ಠ_ಠ)
User avatar
Rocky
OldUnreal Member
Posts: 99
Joined: Mon Nov 18, 2013 9:21 am

Re: RenderOverlays() question

Post by Rocky »

Thank you very much. That works! :)

Return to “UScript Board”