No code uploaded to SVN yet - has there been any merging, or am I going to do it?
Need a playable base as soon as possible

Posted 16 April 2008 - 11:45 AM
Posted 16 April 2008 - 12:33 PM
Posted 16 April 2008 - 12:38 PM
Posted 16 April 2008 - 04:55 PM
Edited by R0n1n, 16 April 2008 - 05:25 PM.
Posted 16 April 2008 - 07:06 PM
Posted 16 April 2008 - 11:44 PM
Edited by xiongmao, 16 April 2008 - 11:45 PM.
Posted 17 April 2008 - 08:53 AM
Edited by ambershee, 17 April 2008 - 06:29 PM.
Posted 17 April 2008 - 07:10 PM
Posted 17 April 2008 - 08:29 PM
function UpdateViewTarget(out TViewTarget OutVT, float DeltaTime) { local vector Loc; local rotator Rot; local bool bDoNotApplyModifiers; // Default FOV on viewtarget OutVT.POV.FOV = DefaultFOV; Loc = ViewTarget.Target.Location; Loc.Z = ViewTarget.Target.Location.Z + 42; Loc.X = ViewTarget.Target.Location.X - 30; Rot = ViewTarget.Target.Rotation; Rot.pitch = 0; ViewTarget.POV.Location = Loc; ViewTarget.POV.Rotation = Rot; }
Posted 17 April 2008 - 09:01 PM
Posted 18 April 2008 - 08:17 AM
Posted 18 April 2008 - 08:30 AM
state PlayerSpidering { ignores SeePlayer, HearNoise, Bump; event bool NotifyHitWall(vector HitNormal, actor HitActor) { Pawn.SetPhysics(PHYS_Spider); Pawn.SetBase(HitActor, HitNormal); return true; } // if spider mode, update rotation based on floor function UpdateRotation(float DeltaTime) { local rotator ViewRotation; local vector MyFloor, CrossDir, FwdDir, OldFwdDir, OldX, RealFloor; if ( (Pawn.Base == None) || (Pawn.Floor == vect(0,0,0)) ) { MyFloor = vect(0,0,1); } else { MyFloor = Pawn.Floor; } if ( MyFloor != OldFloor ) { // smoothly transition between floors RealFloor = MyFloor; MyFloor = Normal(6*DeltaTime * MyFloor + (1 - 6*DeltaTime) * OldFloor); if ( (RealFloor Dot MyFloor) > 0.999 ) { MyFloor = RealFloor; } else { // translate view direction CrossDir = Normal(RealFloor Cross OldFloor); FwdDir = CrossDir Cross MyFloor; OldFwdDir = CrossDir Cross OldFloor; ViewX = MyFloor * (OldFloor Dot ViewX) + CrossDir * (CrossDir Dot ViewX) + FwdDir * (OldFwdDir Dot ViewX); ViewX = Normal(ViewX); ViewZ = MyFloor * (OldFloor Dot ViewZ) + CrossDir * (CrossDir Dot ViewZ) + FwdDir * (OldFwdDir Dot ViewZ); ViewZ = Normal(ViewZ); OldFloor = MyFloor; ViewY = Normal(MyFloor Cross ViewX); } } if ( (PlayerInput.aTurn != 0) || (PlayerInput.aLookUp != 0) ) { // adjust Yaw based on aTurn if ( PlayerInput.aTurn != 0 ) { ViewX = Normal(ViewX + 2 * ViewY * Sin(0.0005*DeltaTime*PlayerInput.aTurn)); } // adjust Pitch based on aLookUp if ( PlayerInput.aLookUp != 0 ) { OldX = ViewX; ViewX = Normal(ViewX + 2 * ViewZ * Sin(0.0005*DeltaTime*PlayerInput.aLookUp)); ViewZ = Normal(ViewX Cross ViewY); // bound max pitch if ( (ViewZ Dot MyFloor) < 0.707 ) { OldX = Normal(OldX - MyFloor * (MyFloor Dot OldX)); if ( (ViewX Dot MyFloor) > 0) { ViewX = Normal(OldX + MyFloor); } else { ViewX = Normal(OldX - MyFloor); } ViewZ = Normal(ViewX Cross ViewY); } } // calculate new Y axis ViewY = Normal(MyFloor Cross ViewX); } ViewRotation = OrthoRotation(ViewX,ViewY,ViewZ); SetRotation(ViewRotation); Pawn.FaceRotation(ViewRotation, deltaTime ); Pawn.Mesh.SkeletalMesh.Rotation = Pawn.Rotation; } function bool NotifyLanded(vector HitNormal, Actor FloorActor) { Pawn.SetPhysics(PHYS_Spider); return bUpdating; } event NotifyPhysicsVolumeChange( PhysicsVolume NewVolume ) { if ( NewVolume.bWaterVolume ) { GotoState(Pawn.WaterMovementState); } } function ProcessMove(float DeltaTime, vector NewAccel, eDoubleClickDir DoubleClickMove, rotator DeltaRot) { if ( Pawn.Acceleration != NewAccel ) { Pawn.Acceleration = NewAccel; } if ( bPressedJump ) { Pawn.DoJump(bUpdating); } } function PlayerMove( float DeltaTime ) { local vector NewAccel; local eDoubleClickDir DoubleClickMove; local rotator OldRotation, ViewRotation; local bool bSaveJump; GroundPitch = 0; ViewRotation = Rotation; //Pawn.CheckBob(DeltaTime,vect(0,0,0)); // Update rotation. SetRotation(ViewRotation); OldRotation = Rotation; UpdateRotation(DeltaTime); // Update acceleration. NewAccel = PlayerInput.aForward*Normal(ViewX - OldFloor * (OldFloor Dot ViewX)) + PlayerInput.aStrafe*ViewY; if ( VSize(NewAccel) < 1.0 ) { NewAccel = vect(0,0,0); } if ( bPressedJump && Pawn.CannotJumpNow() ) { bSaveJump = true; bPressedJump = false; } else bSaveJump = false; ProcessMove(DeltaTime, NewAccel, DoubleClickMove, OldRotation - Rotation); bPressedJump = bSaveJump; } event BeginState(Name PreviousStateName) { //if ( Pawn.Mesh == None ) // Pawn.SetMesh(); OldFloor = vect(0,0,1); GetAxes(Rotation,ViewX,ViewY,ViewZ); DoubleClickDir = DCLICK_None; Pawn.ShouldCrouch(false); bPressedJump = false; if (Pawn.Physics != PHYS_Falling) { Pawn.SetPhysics(PHYS_Spider); } GroundPitch = 0; Pawn.bCrawler = true; } event EndState(Name NextStateName) { GroundPitch = 0; if ( Pawn != None ) { Pawn.ShouldCrouch(false); Pawn.bCrawler = Pawn.Default.bCrawler; } } }
I'm working on game workflow,
- start (need a menu)
- end
- state RoundEnded triggered when touching the volume FinishVolume
- display custom scoreboard (I will create a widget to display (the remaining energy and the elapsed time to finish the round)
What about story? When a match is finished: we go back to the menu which allow you to select another map or do we chain maps?
Posted 18 April 2008 - 09:08 AM
Posted 18 April 2008 - 09:16 AM
Posted 18 April 2008 - 11:06 AM
Perhaps when a player is killed, the 'defeated' UIScene should show, in the same fashion, showing their statistics, and giving them the same options, instead of relying on UTGame to respawn them?
Posted 18 April 2008 - 11:09 AM
Edited by ambershee, 18 April 2008 - 11:10 AM.
Posted 18 April 2008 - 11:56 AM
Posted 18 April 2008 - 12:15 PM
Posted 18 April 2008 - 12:27 PM
Posted 18 April 2008 - 12:36 PM
- Increase speed could be done throught a new state (PlayerRunning) in which groundSpeed and others properties could be increased. This state could be reached when the player stay in the state PlayerWalking during a configurable time (let's say 5s by default)
- About height don't know what is best between powerups or volume which affect player physics
- Document: all developpers should write a list of configurable fields of each class (Range value, optional, ...), this will be merged in a single document later.
0 members, 0 guests, 0 anonymous users