A more more input positional logic
This commit is contained in:
parent
2ca7d8bb0e
commit
a3a3c6fee8
@ -46,19 +46,24 @@
|
||||
* Pre-processor Definitions
|
||||
****************************************************************************/
|
||||
|
||||
/* Number of units player moves forward or backward. */
|
||||
|
||||
#define STEP_DISTANCE 15
|
||||
|
||||
/****************************************************************************
|
||||
* Public Types
|
||||
****************************************************************************/
|
||||
|
||||
struct trv_input_s
|
||||
{
|
||||
int16_t fwdrate; /* Forward motion rate. Negative is backward */
|
||||
int16_t leftrate; /* Left motion rate. Negative is right */
|
||||
int16_t yawrate; /* Yaw turn rate. Positive is to the left */
|
||||
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 */
|
||||
};
|
||||
|
||||
/****************************************************************************
|
||||
* Public Types
|
||||
****************************************************************************/
|
||||
|
||||
/****************************************************************************
|
||||
* 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 */
|
||||
};
|
||||
|
||||
/****************************************************************************
|
||||
* 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
|
||||
****************************************************************************/
|
||||
|
@ -39,6 +39,8 @@
|
||||
****************************************************************************/
|
||||
|
||||
#include "trv_types.h"
|
||||
#include "trv_world.h"
|
||||
#include "trv_trigtbl.h"
|
||||
#include "trv_input.h"
|
||||
|
||||
#if defined(CONFIG_GRAPHICS_TRAVELER_JOYSTICK)
|
||||
@ -46,6 +48,7 @@
|
||||
# include <errno.h>
|
||||
|
||||
#if defined(CONFIG_GRAPHICS_TRAVELER_AJOYSTICK)
|
||||
# include <fixedmath.h>
|
||||
# include <nuttx/input/ajoystick.h>
|
||||
#elif defined(CONFIG_GRAPHICS_TRAVELER_DJOYSTICK)
|
||||
# include <nuttx/input/djoystick.h>
|
||||
@ -68,11 +71,11 @@ struct trv_input_info_s
|
||||
int fd; /* Open driver descriptor */
|
||||
#ifdef CONFIG_GRAPHICS_TRAVELER_AJOYSTICK
|
||||
int16_t centerx; /* Center X position */
|
||||
int16_t maxleft; /* Maximum left X position */
|
||||
int16_t maxright; /* Maximum right x position */
|
||||
b16_t leftslope; /* Slope for left of center */
|
||||
b16_t rightslope; /* Slope for left of center */
|
||||
int16_t centery; /* Center Y position */
|
||||
int16_t maxforward; /* Maximum forward Y position */
|
||||
int16_t maxback; /* Maximum backward Y position */
|
||||
b16_t fwdslope; /* Slope for forward from center */
|
||||
b16_t backslope; /* Slope for backward from center */
|
||||
#endif
|
||||
#elif defined(CONFIG_GRAPHICS_TRAVELER_NX_XYINPUT)
|
||||
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_AJOYSTICK)
|
||||
struct ajoy_sample_s sample;
|
||||
int16_t move_rate;
|
||||
int16_t turn_rate;
|
||||
ssize_t nread;
|
||||
|
||||
/* Read data from the analog joystick */
|
||||
@ -187,25 +192,131 @@ void trv_input_read(void)
|
||||
#warning Missing logic
|
||||
|
||||
#elif defined(CONFIG_GRAPHICS_TRAVELER_DJOYSTICK)
|
||||
struct djoy_sample_s sample;
|
||||
struct djoy_buttonset_t buttonset;
|
||||
ssize_t nread;
|
||||
|
||||
/* 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)
|
||||
{
|
||||
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);
|
||||
}
|
||||
|
||||
/* 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)
|
||||
/* Make position decision based on last sampled X/Y input data */
|
||||
#warning Missing logic
|
||||
|
Loading…
Reference in New Issue
Block a user