A more more input positional logic
This commit is contained in:
parent
2ca7d8bb0e
commit
a3a3c6fee8
@ -46,19 +46,24 @@
|
|||||||
* Pre-processor Definitions
|
* Pre-processor Definitions
|
||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
|
|
||||||
|
/* Number of units player moves forward or backward. */
|
||||||
|
|
||||||
|
#define STEP_DISTANCE 15
|
||||||
|
|
||||||
|
/****************************************************************************
|
||||||
|
* Public Types
|
||||||
|
****************************************************************************/
|
||||||
|
|
||||||
struct trv_input_s
|
struct trv_input_s
|
||||||
{
|
{
|
||||||
int16_t fwdrate; /* Forward motion rate. Negative is backward */
|
int16_t fwdrate; /* Forward motion rate. Negative is backward */
|
||||||
int16_t leftrate; /* Left motion rate. Negative is right */
|
int16_t leftrate; /* Left motion rate. Negative is right */
|
||||||
int16_t yawrate; /* Yaw turn rate. Positive is to the left */
|
int16_t yawrate; /* Yaw turn rate. Positive is to the left */
|
||||||
int16_t pitchrate; /* Pitch turn rate. Positive is upward */
|
int16_t pitchrate; /* Pitch turn rate. Positive is upward */
|
||||||
|
int16_t stepheight; /* Size a a vertical step, if applicable */
|
||||||
bool dooropen; /* True: Open a door */
|
bool dooropen; /* True: Open a door */
|
||||||
};
|
};
|
||||||
|
|
||||||
/****************************************************************************
|
|
||||||
* Public Types
|
|
||||||
****************************************************************************/
|
|
||||||
|
|
||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
* Public Data
|
* Public Data
|
||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
|
75
graphics/traveler/include/trv_trigtbl.h
Normal file
75
graphics/traveler/include/trv_trigtbl.h
Normal file
@ -0,0 +1,75 @@
|
|||||||
|
/****************************************************************************
|
||||||
|
* apps/graphics/traveler/include/trv_trigtbl.h
|
||||||
|
*
|
||||||
|
* Copyright (C) 2014 Gregory Nutt. All rights reserved.
|
||||||
|
* Author: Gregory Nutt <gnutt@nuttx.org>
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions
|
||||||
|
* are met:
|
||||||
|
*
|
||||||
|
* 1. Redistributions of source code must retain the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer.
|
||||||
|
* 2. Redistributions in binary form must reproduce the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer in
|
||||||
|
* the documentation and/or other materials provided with the
|
||||||
|
* distribution.
|
||||||
|
* 3. Neither the name NuttX nor the names of its contributors may be
|
||||||
|
* used to endorse or promote products derived from this software
|
||||||
|
* without specific prior written permission.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||||
|
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||||
|
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
|
||||||
|
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
|
||||||
|
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||||
|
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
|
||||||
|
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
|
||||||
|
* OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
|
||||||
|
* AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||||
|
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
|
||||||
|
* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||||
|
* POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*
|
||||||
|
****************************************************************************/
|
||||||
|
|
||||||
|
#ifndef __APPS_GRAPHICS_TRAVELER_INCLUDE_TRV_TRIGTBL_H
|
||||||
|
#define __APPS_GRAPHICS_TRAVELER_INCLUDE_TRV_TRIGTBL_H
|
||||||
|
|
||||||
|
/****************************************************************************
|
||||||
|
* Included Files
|
||||||
|
****************************************************************************/
|
||||||
|
|
||||||
|
#include "trv_types.h"
|
||||||
|
|
||||||
|
/****************************************************************************
|
||||||
|
* Pre-processor Definitions
|
||||||
|
****************************************************************************/
|
||||||
|
|
||||||
|
/* These are definitions of commonly used angles. */
|
||||||
|
|
||||||
|
#define TWOPI 1920
|
||||||
|
#define PI 960
|
||||||
|
#define HALFPI 480
|
||||||
|
#define QTRPI 240
|
||||||
|
|
||||||
|
/* Here are definitions for those who prefer degrees */
|
||||||
|
/* NOTE: ANGLE_60 and ANGLE_30 are special values. They were */
|
||||||
|
/* chosen to match the horizontal screen resolution of 320 pixels. */
|
||||||
|
/* These, in fact, drive the entire angular measurement system */
|
||||||
|
|
||||||
|
#define ANGLE_0 0
|
||||||
|
#define ANGLE_6 32
|
||||||
|
#define ANGLE_9 48
|
||||||
|
#define ANGLE_30 160
|
||||||
|
#define ANGLE_60 320
|
||||||
|
#define ANGLE_90 480
|
||||||
|
#define ANGLE_180 960
|
||||||
|
#define ANGLE_270 1440
|
||||||
|
#define ANGLE_360 1920
|
||||||
|
|
||||||
|
/****************************************************************************
|
||||||
|
* Public Function Prototypes
|
||||||
|
****************************************************************************/
|
||||||
|
|
||||||
|
#endif /* __APPS_GRAPHICS_TRAVELER_INCLUDE_TRV_TRIGTBL_H */
|
@ -59,6 +59,27 @@ struct trv_camera_s
|
|||||||
int16_t pitch; /* Camera pitch orientation */
|
int16_t pitch; /* Camera pitch orientation */
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/****************************************************************************
|
||||||
|
* Public Data
|
||||||
|
****************************************************************************/
|
||||||
|
/* This is the starting position and orientation of the camera in the world */
|
||||||
|
|
||||||
|
extern struct trv_camera_s g_initial_camera;
|
||||||
|
|
||||||
|
/* This is the height of player (distance from the camera Z position to
|
||||||
|
* the position of the player's "feet"
|
||||||
|
*/
|
||||||
|
|
||||||
|
extern trv_coord_t g_player_height;
|
||||||
|
|
||||||
|
/* This is size of something that the player can step over when "walking" */
|
||||||
|
|
||||||
|
extern trv_coord_t g_walk_stepheight;
|
||||||
|
|
||||||
|
/* This is size of something that the player can step over when "running" */
|
||||||
|
|
||||||
|
extern trv_coord_t g_run_stepheight;
|
||||||
|
|
||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
* Public Function Prototypes
|
* Public Function Prototypes
|
||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
|
@ -39,6 +39,8 @@
|
|||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
|
|
||||||
#include "trv_types.h"
|
#include "trv_types.h"
|
||||||
|
#include "trv_world.h"
|
||||||
|
#include "trv_trigtbl.h"
|
||||||
#include "trv_input.h"
|
#include "trv_input.h"
|
||||||
|
|
||||||
#if defined(CONFIG_GRAPHICS_TRAVELER_JOYSTICK)
|
#if defined(CONFIG_GRAPHICS_TRAVELER_JOYSTICK)
|
||||||
@ -46,6 +48,7 @@
|
|||||||
# include <errno.h>
|
# include <errno.h>
|
||||||
|
|
||||||
#if defined(CONFIG_GRAPHICS_TRAVELER_AJOYSTICK)
|
#if defined(CONFIG_GRAPHICS_TRAVELER_AJOYSTICK)
|
||||||
|
# include <fixedmath.h>
|
||||||
# include <nuttx/input/ajoystick.h>
|
# include <nuttx/input/ajoystick.h>
|
||||||
#elif defined(CONFIG_GRAPHICS_TRAVELER_DJOYSTICK)
|
#elif defined(CONFIG_GRAPHICS_TRAVELER_DJOYSTICK)
|
||||||
# include <nuttx/input/djoystick.h>
|
# include <nuttx/input/djoystick.h>
|
||||||
@ -68,11 +71,11 @@ struct trv_input_info_s
|
|||||||
int fd; /* Open driver descriptor */
|
int fd; /* Open driver descriptor */
|
||||||
#ifdef CONFIG_GRAPHICS_TRAVELER_AJOYSTICK
|
#ifdef CONFIG_GRAPHICS_TRAVELER_AJOYSTICK
|
||||||
int16_t centerx; /* Center X position */
|
int16_t centerx; /* Center X position */
|
||||||
int16_t maxleft; /* Maximum left X position */
|
b16_t leftslope; /* Slope for left of center */
|
||||||
int16_t maxright; /* Maximum right x position */
|
b16_t rightslope; /* Slope for left of center */
|
||||||
int16_t centery; /* Center Y position */
|
int16_t centery; /* Center Y position */
|
||||||
int16_t maxforward; /* Maximum forward Y position */
|
b16_t fwdslope; /* Slope for forward from center */
|
||||||
int16_t maxback; /* Maximum backward Y position */
|
b16_t backslope; /* Slope for backward from center */
|
||||||
#endif
|
#endif
|
||||||
#elif defined(CONFIG_GRAPHICS_TRAVELER_NX_XYINPUT)
|
#elif defined(CONFIG_GRAPHICS_TRAVELER_NX_XYINPUT)
|
||||||
trv_coord_t xpos; /* Reported X position */
|
trv_coord_t xpos; /* Reported X position */
|
||||||
@ -169,6 +172,8 @@ void trv_input_read(void)
|
|||||||
#if defined(CONFIG_GRAPHICS_TRAVELER_JOYSTICK)
|
#if defined(CONFIG_GRAPHICS_TRAVELER_JOYSTICK)
|
||||||
#if defined(CONFIG_GRAPHICS_TRAVELER_AJOYSTICK)
|
#if defined(CONFIG_GRAPHICS_TRAVELER_AJOYSTICK)
|
||||||
struct ajoy_sample_s sample;
|
struct ajoy_sample_s sample;
|
||||||
|
int16_t move_rate;
|
||||||
|
int16_t turn_rate;
|
||||||
ssize_t nread;
|
ssize_t nread;
|
||||||
|
|
||||||
/* Read data from the analog joystick */
|
/* Read data from the analog joystick */
|
||||||
@ -187,25 +192,131 @@ void trv_input_read(void)
|
|||||||
#warning Missing logic
|
#warning Missing logic
|
||||||
|
|
||||||
#elif defined(CONFIG_GRAPHICS_TRAVELER_DJOYSTICK)
|
#elif defined(CONFIG_GRAPHICS_TRAVELER_DJOYSTICK)
|
||||||
struct djoy_sample_s sample;
|
struct djoy_buttonset_t buttonset;
|
||||||
ssize_t nread;
|
ssize_t nread;
|
||||||
|
|
||||||
/* Read data from the discrete joystick */
|
/* Read data from the discrete joystick */
|
||||||
|
|
||||||
nread = read(g_trv_input_info.fd, &sample, sizeof(struct djoy_sample_s));
|
nread = read(g_trv_input_info.fd, &buttonset, sizeof(djoy_buttonset_t));
|
||||||
if (nread < 0)
|
if (nread < 0)
|
||||||
{
|
{
|
||||||
trv_abort("ERROR: Joystick read error: %d\n", errno);
|
trv_abort("ERROR: Joystick read error: %d\n", errno);
|
||||||
}
|
}
|
||||||
else if (nread != sizeof(struct djoy_sample_s))
|
else if (nread != sizeof(struct djoy_buttonset_t))
|
||||||
{
|
{
|
||||||
trv_abort("ERROR: Unexpected joystick read size: %ld\n", (long)nread);
|
trv_abort("ERROR: Unexpected joystick read size: %ld\n", (long)nread);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Determine the input data to return to the POV logic */
|
/* Determine the input data to return to the POV logic */
|
||||||
#warning Missing logic
|
|
||||||
|
|
||||||
#endif
|
if ((buttonset & DJOY_BUTTON_RUN_BIT) != 0)
|
||||||
|
{
|
||||||
|
/* Run faster/step higher */
|
||||||
|
|
||||||
|
g_trv_input.stepheight = g_run_step_height;
|
||||||
|
move_rate = 2 * STEP_DISTANCE;
|
||||||
|
turn_rate = ANGLE_9;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
/* Normal walking rate and stepping height */
|
||||||
|
|
||||||
|
g_trv_input.stepheight = g_walk_step_height;
|
||||||
|
move_rate = STEP_DISTANCE;
|
||||||
|
turn_rate = ANGLE_6;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Move forward or backward OR look up or down */
|
||||||
|
|
||||||
|
g_trv_input.pitchrate = 0;
|
||||||
|
g_trv_input.fwdrate = 0;
|
||||||
|
|
||||||
|
switch (buttonset & (DJOY_UP_BIT | DJOY_DOWN_BIT))
|
||||||
|
{
|
||||||
|
case 0:
|
||||||
|
case (DJOY_UP_BIT | DJOY_DOWN_BIT):
|
||||||
|
/* Don't move, don't nod */
|
||||||
|
|
||||||
|
break;
|
||||||
|
|
||||||
|
case DJOY_UP_BIT:
|
||||||
|
if ((buttonset & DJOY_BUTTON_FIRE_BIT) != 0)
|
||||||
|
{
|
||||||
|
/* Look upward */
|
||||||
|
|
||||||
|
g_trv_input.pitchrate = turn_rate;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
/* Move forward */
|
||||||
|
|
||||||
|
g_trv_input.fwdrate = move_rate;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case DJOY_DOWN_BIT:
|
||||||
|
if ((buttonset & DJOY_BUTTON_FIRE_BIT) != 0)
|
||||||
|
{
|
||||||
|
/* Look downward */
|
||||||
|
|
||||||
|
g_trv_input.pitchrate = -turn_rate;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
/* Move Backward */
|
||||||
|
|
||||||
|
g_trv_input.fwdrate = -move_rate;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Move forward or backward OR look up or down */
|
||||||
|
|
||||||
|
g_trv_input.yawrate = 0;
|
||||||
|
g_trv_input.leftrate = 0;
|
||||||
|
|
||||||
|
switch (buttonset & (DJOY_LEFT_BIT | DJOY_RIGHT_BIT))
|
||||||
|
{
|
||||||
|
case 0:
|
||||||
|
case (DJOY_LEFT_BIT | DJOY_RIGHT_BIT):
|
||||||
|
/* Don't move, don't nod */
|
||||||
|
|
||||||
|
break;
|
||||||
|
|
||||||
|
case DJOY_LEFT_BIT:
|
||||||
|
if ((buttonset & DJOY_BUTTON_FIRE_BIT) != 0)
|
||||||
|
{
|
||||||
|
/* Turn left */
|
||||||
|
|
||||||
|
g_trv_input.yawrate = turn_rate;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
/* Move left */
|
||||||
|
|
||||||
|
g_trv_input.leftrate = move_rate;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case DJOY_RIGHT_BIT:
|
||||||
|
if ((buttonset & DJOY_BUTTON_FIRE_BIT) != 0)
|
||||||
|
{
|
||||||
|
/* Turn right */
|
||||||
|
|
||||||
|
g_trv_input.yawrate = -turn_rate;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
/* Move right */
|
||||||
|
|
||||||
|
g_trv_input.leftrate = -move_rate;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
g_trv_input.leftrate = ((buttonset & DJOY_BUTTON_SELECT) != 0);
|
||||||
|
|
||||||
|
#endif /* CONFIG_GRAPHICS_TRAVELER_DJOYSTICK */
|
||||||
#elif defined(CONFIG_GRAPHICS_TRAVELER_NX_XYINPUT)
|
#elif defined(CONFIG_GRAPHICS_TRAVELER_NX_XYINPUT)
|
||||||
/* Make position decision based on last sampled X/Y input data */
|
/* Make position decision based on last sampled X/Y input data */
|
||||||
#warning Missing logic
|
#warning Missing logic
|
||||||
|
Loading…
x
Reference in New Issue
Block a user