raze-gles/source/sw/src/setup.cpp
pogokeen 222e593437 Change some clocks to support sub-tick precision using a new class, ClockTicks.
Using that higher precision, interpolate at a higher granularity.
Further, truncate the target interpolation time to vertical blank boundaries to avoid producing temporal artifacts.
Fix issues caused by interpolation calculations being handled differently in multiple places (and fix cases where smoothratios were being thrown away only to be redone without checking all proper conditions).
Ensure ClockTicks changes do not break other targets (EKenBuild, VoidSW), but note any interpolation there is not similarly updated.

git-svn-id: https://svn.eduke32.com/eduke32@8050 1a8010ca-5511-0410-912e-c29ae57300e0

# Conflicts:
#	source/build/src/build.cpp
#	source/build/src/sdlayer.cpp
2019-09-20 21:09:14 +02:00

403 lines
9.1 KiB
C++

//-------------------------------------------------------------------------
/*
Copyright (C) 1997, 2005 - 3D Realms Entertainment
This file is part of Shadow Warrior version 1.2
Shadow Warrior is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
as published by the Free Software Foundation; either version 2
of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
See the GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
Original Source: 1997 - Frank Maddin and Jim Norwood
Prepared for public release: 03/28/2005 - Charlie Wiederhold, 3D Realms
*/
//-------------------------------------------------------------------------
#include "build.h"
#include "keys.h"
#include "game.h"
#include "mytypes.h"
#include "fx_man.h"
#include "music.h"
#include "scriplib.h"
#include "gamedefs.h"
#include "keyboard.h"
#include "control.h"
#include "config.h"
#include "sounds.h"
#include "function.h"
#include "rts.h"
/*
===================
=
= SetupGameButtons
=
===================
*/
void SetupGameButtons(void)
{
// processes array from function.h - char * gamefunctions[];
short gamefunc;
for (gamefunc = 0; gamefunc < NUMGAMEFUNCTIONS; gamefunc++)
{
CONTROL_DefineFlag(gamefunc,FALSE);
}
}
void CenterCenter(void)
{
printf("\nCenter the joystick and press a button\n");
}
void UpperLeft(void)
{
printf("Move joystick to upper-left corner and press a button\n");
}
void LowerRight(void)
{
printf("Move joystick to lower-right corner and press a button\n");
}
void CenterThrottle(void)
{
printf("Center the throttle control and press a button\n");
}
void CenterRudder(void)
{
printf("Center the rudder control and press a button\n");
}
/*
===================
=
= GetTime
=
===================
*/
static int32_t timert;
int32_t GetTime(void)
{
return (int32_t) totalclock;
//return timert++;
}
void InitSetup(void)
{
int i;
//RegisterShutdownFunction( ShutDown );
//StartWindows();
//initkeys();
//CONFIG_GetSetupFilename();
//InitializeKeyDefList();
//CONFIG_ReadSetup();
if (CONTROL_Startup(controltype_keyboardandmouse, &GetTime, /*120*/ 140)) exit(1);
SetupGameButtons();
CONFIG_SetupMouse();
CONFIG_SetupJoystick();
CONTROL_JoystickEnabled = (UseJoystick && CONTROL_JoyPresent);
CONTROL_MouseEnabled = (UseMouse && CONTROL_MousePresent);
/*{
int i;
CONTROL_PrintKeyMap();
for(i=0;i<NUMGAMEFUNCTIONS;i++) CONTROL_PrintControlFlag(i);
CONTROL_PrintAxes();
}*/
RTS_Init(RTSName);
}
#if 0
void TermSetup(void)
{
//FreeKeyDefList();
}
#endif
// BELOW IS FROM A TEST SETUP BY MARK DOC
//******************************************************************************
//******************************************************************************
//******************************************************************************
//******************************************************************************
#if 0
#include <conio.h>
#include <stdio.h>
#include <string.h>
#include "types.h"
#include "sndcards.h"
#include "fx_man.h"
#include "music.h"
#include "scriplib.h"
#include "gamedefs.h"
#include "keyboard.h"
#include "control.h"
#include "config.h"
#include "sounds.h"
#include "function.h"
#include "rts.h"
#include "timer.h"
int32_t timerhandle=0;
volatile int32_t timer;
/*
===================
=
= Shutdown
=
===================
*/
void ShutDown(void)
{
KB_Shutdown();
TIME_RemoveTimer(timerhandle);
SoundShutdown();
MusicShutdown();
CONFIG_WriteSetup();
}
/*
===================
=
= SetupGameButtons
=
===================
*/
void SetupGameButtons(void)
{
CONTROL_DefineFlag(gamefunc_Move_Forward, FALSE);
CONTROL_DefineFlag(gamefunc_Move_Backward, FALSE);
CONTROL_DefineFlag(gamefunc_Turn_Left, FALSE);
CONTROL_DefineFlag(gamefunc_Turn_Right, FALSE);
CONTROL_DefineFlag(gamefunc_Strafe, FALSE);
CONTROL_DefineFlag(gamefunc_Strafe_Left, FALSE);
CONTROL_DefineFlag(gamefunc_Strafe_Right, FALSE);
CONTROL_DefineFlag(gamefunc_TurnAround, FALSE);
CONTROL_DefineFlag(gamefunc_Jump, FALSE);
CONTROL_DefineFlag(gamefunc_Crouch, FALSE);
CONTROL_DefineFlag(gamefunc_Fire, FALSE);
CONTROL_DefineFlag(gamefunc_Open, FALSE);
CONTROL_DefineFlag(gamefunc_Look_Up, FALSE);
CONTROL_DefineFlag(gamefunc_Look_Down, FALSE);
CONTROL_DefineFlag(gamefunc_Aim_Up, FALSE);
CONTROL_DefineFlag(gamefunc_Aim_Down, FALSE);
CONTROL_DefineFlag(gamefunc_Run, FALSE);
CONTROL_DefineFlag(gamefunc_SendMessage, FALSE);
CONTROL_DefineFlag(gamefunc_Weapon_1, FALSE);
CONTROL_DefineFlag(gamefunc_Weapon_2, FALSE);
CONTROL_DefineFlag(gamefunc_Weapon_3, FALSE);
CONTROL_DefineFlag(gamefunc_Weapon_4, FALSE);
CONTROL_DefineFlag(gamefunc_Weapon_5, FALSE);
CONTROL_DefineFlag(gamefunc_Weapon_6, FALSE);
CONTROL_DefineFlag(gamefunc_Weapon_7, FALSE);
CONTROL_DefineFlag(gamefunc_Weapon_8, FALSE);
CONTROL_DefineFlag(gamefunc_Weapon_9, FALSE);
CONTROL_DefineFlag(gamefunc_Weapon_10, FALSE);
CONTROL_DefineFlag(gamefunc_Map, FALSE);
CONTROL_DefineFlag(gamefunc_Look_Left, FALSE);
CONTROL_DefineFlag(gamefunc_Look_Right, FALSE);
CONTROL_DefineFlag(gamefunc_Shrink_Screen, FALSE);
CONTROL_DefineFlag(gamefunc_Enlarge_Screen, FALSE);
CONTROL_DefineFlag(gamefunc_AutoRun, FALSE);
CONTROL_DefineFlag(gamefunc_Center_View, FALSE);
CONTROL_DefineFlag(gamefunc_Holster_Weapon, FALSE);
CONTROL_DefineFlag(gamefunc_Inventory_Left, FALSE);
CONTROL_DefineFlag(gamefunc_Inventory_Right, FALSE);
CONTROL_DefineFlag(gamefunc_Inventory, FALSE);
}
/*
===================
=
= GetTime
=
===================
*/
int32_t GetTime(void)
{
return timer;
}
/*
===================
=
= CenterCenter
=
===================
*/
void CenterCenter(void)
{
printf("Center the joystick and press a button\n");
}
/*
===================
=
= UpperLeft
=
===================
*/
void UpperLeft(void)
{
printf("Move joystick to upper-left corner and press a button\n");
}
/*
===================
=
= LowerRight
=
===================
*/
void LowerRight(void)
{
printf("Move joystick to lower-right corner and press a button\n");
}
/*
===================
=
= CenterThrottle
=
===================
*/
void CenterThrottle(void)
{
printf("Center the throttle control and press a button\n");
}
/*
===================
=
= CenterRudder
=
===================
*/
void CenterRudder(void)
{
printf("Center the rudder control and press a button\n");
}
void main()
{
char *song;
char *voc;
volatile int32_t lasttime;
RegisterShutdownFunction(ShutDown);
KB_Startup();
timerhandle = TIME_AddTimer(40, &timer);
//CONFIG_GetSetupFilename();
CONFIG_ReadSetup();
CONTROL_Startup(1, &GetTime, 1500);
SetupGameButtons();
MusicStartup();
SoundStartup();
RTS_Init(RTSName);
// load in some test data
LoadFile("test.mid",&song);
LoadFile("test.voc",&voc);
// start playing a song
MUSIC_PlaySong(song, MUSIC_LoopSong);
lasttime = timer;
while (1)
{
int32_t i;
ControlInfo info;
while (lasttime==timer)
{
ServiceEvents();
}
lasttime = timer;
// printf("timer=%ld\n",timer);
CONTROL_GetInput(&info);
if (
info.dx!=0 ||
info.dy!=0 ||
info.dz!=0 ||
info.dpitch!=0 ||
info.dyaw!=0 ||
info.droll!=0
)
printf("x=%6ld y=%6ld z=%6ld yaw=%6ld pitch=%6ld roll=%6ld\n",
info.dx,info.dy,info.dz,info.dyaw,info.dpitch,info.droll);
// Get Keyboard input and set appropiate game function states
for (i=0; i<NUMGAMEFUNCTIONS; i++)
{
if (BUTTON(i) && !BUTTONHELD(i))
{
printf("%s\n",gamefunctions[i]);
}
}
for (i=0; i<10; i++)
{
if (KB_KeyPressed(sc_F1+i))
{
uint8_t *ptr;
KB_ClearKeyDown(sc_F1+i);
ptr = (uint8_t *)RTS_GetSound(i);
FX_PlayVOC(ptr, 0, 255, 255, 255, 255, 0);
}
}
// Check to see if fire is being pressed so we can play a sound
if (BUTTON(gamefunc_Fire) && !BUTTONHELD(gamefunc_Fire))
{
FX_PlayVOC(voc, 0, 255, 255, 255, 255, 0);
}
// Check to see if we want to exit
if (KB_KeyPressed(sc_Escape))
{
break;
}
}
ShutDown();
}
#endif