// create PlayerMove by using the info from the PlayerNetworkActionContainer PlayerMove DoAction( PlayerMove prev, PlayerNetworkActionContainer action ) { // default: move nowhere Vector3 dire = Vector3.zero; Vector3 rot = Vector3.zero; if( action.action == PlayerNetworkAction.MOVE || isJumping ) { // get position dire.x = action.moveX; dire.z = action.moveY; dire.y = action.moveZ; transform.position = dire; } else // no movement { dire = transform.position; } if( rot.x != -2 && rot.z != -2 ) { rot.x = action.rotateX; rot.z = action.rotateZ; transform.rotation = Quaternion.LookRotation( rot, Vector3.up ); } // this thing will go to the server! return new PlayerMove { moveNum = prev.moveNum + 1, currentPosition = dire, lookAtThis = rot, hasRangeEquipped = action.hasRange, useWeapon = action.usingWeapon, grabbing = action.isGrabbing }; }
void Update() { if (isLocalPlayer) { bool grabThis = isGrabbing; bool badaboom = usingWeapon; // set up PlayerNetworkActionContainer PlayerNetworkActionContainer pressedKey = new PlayerNetworkActionContainer(); pressedKey.action = PlayerNetworkAction.NONE; pressedKey.moveX = transform.position.x; pressedKey.moveZ = transform.position.y; pressedKey.moveY = transform.position.z; pressedKey.rotateX = lastLookDirection.x; pressedKey.rotateZ = lastLookDirection.z; // use WasPressed here to avoid mass toggling range/mass using weapon if( actions.UseWeapon.WasPressed && !usingWeapon && ( settings.allowJumpingWithWeapon // no additional checks necessary || !settings.allowJumpingWithWeapon && !isJumping ) ) // check if player is jumping { pressedKey.action = PlayerNetworkAction.USE_WEAPON; badaboom = true; } else if( actions.ToggleRanged.WasPressed ) { hasRangeWeapon = !hasRangeWeapon; if( myCam != null ) myCam.FreeMove = hasRangeWeapon; } else if( actions.Move.IsPressed && !hasRangeWeapon ) { pressedKey.action = PlayerNetworkAction.MOVE; // prev // Vector3 dire = transform.position; // dire.x += Time.deltaTime * settings.moveSpeed * actions.Move.X; // dire.z += Time.deltaTime * settings.moveSpeed * actions.Move.Y; // // transform.position = dire; // fk the input, use the cam's forward to not screw up movement transform.Translate (myCam.transform.forward * settings.moveSpeed * Time.deltaTime); Vector3 dire = transform.position; pressedKey.moveX = dire.x; pressedKey.moveY = dire.z; pressedKey.moveZ = dire.y; lastLookDirection = new Vector3( actions.Move.X, 0, actions.Move.Y ); transform.rotation = Quaternion.LookRotation( lastLookDirection ); lastLookDirection = Vector3.forward; pressedKey.rotateX = lastLookDirection.x; pressedKey.rotateZ = lastLookDirection.z; } else if( actions.DodoInteraction.WasPressed && !isGrabbing ) { pressedKey.action = PlayerNetworkAction.DODO_INTERACTION; grabThis = true; } else if( isJumping ) { pressedKey.action = PlayerNetworkAction.JUMPING; } pressedKey.hasRange = hasRangeWeapon; pressedKey.isGrabbing = grabThis; pressedKey.usingWeapon = badaboom; pendingMoves.Add(pressedKey); UpdatePredictedState(); CmdExecute( pressedKey ); } // synchronize state with the server SyncState( false ); }
void CmdExecute(PlayerNetworkActionContainer action) { serverMove = DoAction(serverMove, action); }