Add door animation logic
This commit is contained in:
parent
a9c4227811
commit
5f384d9d21
@ -46,7 +46,7 @@ STACKSIZE = 2048
|
||||
# Hello, World! Example
|
||||
|
||||
ASRCS =
|
||||
CSRCS = trv_color.c trv_graphics.c trv_input.c trv_mem.c trv_pov.c
|
||||
CSRCS = trv_color.c trv_doors.c trv_graphics.c trv_input.c trv_mem.c trv_pov.c
|
||||
MAINSRC = trv_main.c
|
||||
|
||||
ifeq ($(CONFIG_NX),y)
|
||||
|
@ -1,5 +1,6 @@
|
||||
/****************************************************************************
|
||||
* apps/graphics/traveler/include/trv_bitmaps.h
|
||||
* This file contains definitions for the texture bitmaps
|
||||
*
|
||||
* Copyright (C) 2014 Gregory Nutt. All rights reserved.
|
||||
* Author: Gregory Nutt <gnutt@nuttx.org>
|
||||
|
125
graphics/traveler/include/trv_plane.h
Normal file
125
graphics/traveler/include/trv_plane.h
Normal file
@ -0,0 +1,125 @@
|
||||
/****************************************************************************
|
||||
* apps/graphics/traveler/include/trv_plane.h
|
||||
* This file contains definitions for the world planes
|
||||
*
|
||||
* 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_PLANE_H
|
||||
#define __APPS_GRAPHICS_TRAVELER_INCLUDE_TRV_PLANE_H
|
||||
|
||||
/****************************************************************************
|
||||
* Included Files
|
||||
****************************************************************************/
|
||||
|
||||
#include "trv_types.h"
|
||||
|
||||
/****************************************************************************
|
||||
* Pre-processor Definitions
|
||||
****************************************************************************/
|
||||
|
||||
/* These are bit-field definitions for the struct trv_rect_data_s attribute field
|
||||
* STATIC settings
|
||||
*/
|
||||
|
||||
#define SHADED_PLANE 0x01
|
||||
#define TRANSPARENT_PLANE 0x02
|
||||
#define DOOR_PLANE 0x04
|
||||
|
||||
/* DYNAMIC settings */
|
||||
|
||||
#define OPEN_DOOR_PLANE 0x08
|
||||
#define MOVING_DOOR_PLANE 0x10
|
||||
|
||||
/* Legal values of texture scaling in struct trv_rect_data_s */
|
||||
|
||||
#define ONEX_SCALING 0
|
||||
#define TW0X_SCALING 1
|
||||
#define FOURX_SCALING 2
|
||||
#define MAXX_SCALING 2
|
||||
|
||||
/* These macros are used to test the various texture attributes */
|
||||
|
||||
#define IS_NORMAL(r) (((r)->attribute & ~SHADED_PLANE) == 0)
|
||||
#define IS_SHADED(r) (((r)->attribute & SHADED_PLANE) != 0)
|
||||
#define IS_TRANSPARENT(r) (((r)->attribute & TRANSPARENT_PLANE) != 0)
|
||||
#define IS_DOOR(r) (((r)->attribute & DOOR_PLANE) != 0)
|
||||
#define IS_OPEN_DOOR(r) (((r)->attribute & OPEN_DOOR_PLANE) != 0)
|
||||
#define IS_CLOSED_DOOR(r) ((IS_DOOR(R)) && (!IS_OPEN_DOOR(r)))
|
||||
#define IS_MOVING_DOOR(r) (((r)->attribute & MOVING_DOOR_PLANE) != 0)
|
||||
#define IS_PASSABLE(r) IS_OPEN_DOOR(r)
|
||||
|
||||
/****************************************************************************
|
||||
* Public Types
|
||||
****************************************************************************/
|
||||
|
||||
typedef uint8_t attrib_t; /* Max attributes = 8 */
|
||||
|
||||
struct trv_rect_data_s
|
||||
{
|
||||
trv_coord_t plane; /* defines the plane that the rect lies in */
|
||||
trv_coord_t hstart; /* defines the starting "horizontal" position */
|
||||
trv_coord_t hend; /* defines the ending "horizontal" position */
|
||||
trv_coord_t vstart; /* defines the starting "vertical" position */
|
||||
trv_coord_t vend; /* defines the ending "vertical" position */
|
||||
attrib_t attribute; /* bit-encoded attributes of the plane */
|
||||
uint8_t texture; /* defines the texture that should be applied */
|
||||
uint8_t scale; /* defines the scaling of the texture */
|
||||
};
|
||||
#define RESIZEOF_TRVRECTDATA_T 13
|
||||
|
||||
struct trv_rect_list_s
|
||||
{
|
||||
struct trv_rect_list_s *flink; /* points at next rectangle in a list */
|
||||
struct trv_rect_list_s *blink; /* points at previous rectangle in a list */
|
||||
struct trv_rect_data_s d; /* the data which defines the rectangle */
|
||||
};
|
||||
|
||||
struct trv_rect_head_s
|
||||
{
|
||||
struct trv_rect_list_s *head; /* points to the start of the list */
|
||||
struct trv_rect_list_s *tail; /* points to the end of the list */
|
||||
};
|
||||
|
||||
struct trv_planefile_header_s
|
||||
{
|
||||
uint16_t nxrects;
|
||||
uint16_t nyrects;
|
||||
uint16_t nzrects;
|
||||
};
|
||||
#define SIZEOF_TRVPLANEFILEHEADER_T 6
|
||||
|
||||
/****************************************************************************
|
||||
* Public Function Prototypes
|
||||
****************************************************************************/
|
||||
|
||||
#endif /* __APPS_GRAPHICS_TRAVELER_INCLUDE_TRV_PLANE_H */
|
@ -55,13 +55,19 @@
|
||||
* Public Function Prototypes
|
||||
****************************************************************************/
|
||||
|
||||
extern trv_coord_t trv_rayclip_player_xmotion(FAR struct trv_camera_s *pov,
|
||||
trv_coord_t dist, int16_t yaw,
|
||||
trv_coord_t height);
|
||||
extern trv_coord_t trv_rayclip_player_ymotion(FAR struct trv_camera_s *pov,
|
||||
trv_coord_t dist, int16_t yaw,
|
||||
trv_coord_t height);
|
||||
extern trv_coord_t trv_ray_adjust_zpos(FAR struct trv_camera_s *pov,
|
||||
trv_coord_t trv_rayclip_player_xmotion(FAR struct trv_camera_s *pov,
|
||||
trv_coord_t dist, int16_t yaw,
|
||||
trv_coord_t height);
|
||||
trv_coord_t trv_rayclip_player_ymotion(FAR struct trv_camera_s *pov,
|
||||
trv_coord_t dist, int16_t yaw,
|
||||
trv_coord_t height);
|
||||
trv_coord_t trv_ray_adjust_zpos(FAR struct trv_camera_s *pov,
|
||||
trv_coord_t height);
|
||||
FAR struct trv_rect_data_s *trv_test_xplane(FAR struct trv_camera_s *pov,
|
||||
trv_coord_t dist, int16_t yaw,
|
||||
trv_coord_t height);
|
||||
FAR struct trv_rect_data_s *trv_test_yplane(FAR struct trv_camera_s *pov,
|
||||
trv_coord_t dist, int16_t yaw,
|
||||
trv_coord_t height);
|
||||
|
||||
#endif /* __APPS_GRAPHICS_TRAVELER_INCLUDE_TRV_RAYAVOID_H */
|
||||
|
@ -65,6 +65,7 @@
|
||||
|
||||
typedef uint8_t trv_pixel_t; /* Width of one pixel in rendering phase */
|
||||
typedef int16_t trv_coord_t; /* Contains one display coordinate */
|
||||
/* Max world size is +/- 65536/64 = 1024 */
|
||||
|
||||
/****************************************************************************
|
||||
* Public Function Prototypes
|
||||
|
@ -1,5 +1,6 @@
|
||||
/****************************************************************************
|
||||
* apps/graphics/traveler/include/trv_world.h
|
||||
* This file contains definitions for the world model
|
||||
*
|
||||
* Copyright (C) 2014 Gregory Nutt. All rights reserved.
|
||||
* Author: Gregory Nutt <gnutt@nuttx.org>
|
||||
|
336
graphics/traveler/src/trv_doors.c
Executable file
336
graphics/traveler/src/trv_doors.c
Executable file
@ -0,0 +1,336 @@
|
||||
/*******************************************************************************
|
||||
* apps/graphics/traveler/src/trv_doors.c
|
||||
* This file contains the logic which manages world door logic.
|
||||
*
|
||||
* 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.
|
||||
*
|
||||
****************************************************************************/
|
||||
|
||||
/****************************************************************************
|
||||
* Included Files
|
||||
****************************************************************************/
|
||||
|
||||
#include "trv_types.h"
|
||||
#include "trv_input.h"
|
||||
#include "trv_pov.h"
|
||||
#include "trv_plane.h"
|
||||
#include "trv_world.h"
|
||||
#include "trv_rayavoid.h"
|
||||
#include "trv_doors.h"
|
||||
|
||||
/****************************************************************************
|
||||
* Pre-processor Definitions
|
||||
****************************************************************************/
|
||||
|
||||
/* This is the door opening rate */
|
||||
|
||||
#define DOOR_ZSTEP 15
|
||||
#define DOOR_OPEN_WAIT 30
|
||||
|
||||
/****************************************************************************
|
||||
* Private Type Declarations
|
||||
***************************************************************************/
|
||||
|
||||
/* These are possible values for the g_opendoor state variable */
|
||||
|
||||
enum trv_door_state_e
|
||||
{
|
||||
DOOR_IDLE = 0, /* No door action in progress */
|
||||
DOOR_OPENING, /* A door is opening */
|
||||
DOOR_OPEN, /* A door is open */
|
||||
DOOR_CLOSING, /* A door is closing */
|
||||
};
|
||||
|
||||
/* This structure describes the characteristics of the door which currently
|
||||
* being opened.
|
||||
*/
|
||||
|
||||
struct trv_opendoor_s
|
||||
{
|
||||
FAR struct trv_rect_data_s *rect; /* Points to the current door rectangle */
|
||||
uint8_t state; /* State of the door being opened */
|
||||
trv_coord_t zbottom; /* Z-Coordinate of the bottom of the door */
|
||||
trv_coord_t zdistance; /* Distance which the door has moved */
|
||||
int16_t clock; /* This is clock which counts down the time
|
||||
* remaining to keep the door open */
|
||||
};
|
||||
|
||||
/****************************************************************************
|
||||
* Private Function Prototypes
|
||||
****************************************************************************/
|
||||
|
||||
static void trv_door_startopen(void);
|
||||
static void trv_door_animation(void);
|
||||
|
||||
/****************************************************************************
|
||||
* Public Data
|
||||
****************************************************************************/
|
||||
|
||||
/* Variables to track status of a door */
|
||||
|
||||
struct trv_opendoor_s g_opendoor;
|
||||
|
||||
/****************************************************************************
|
||||
* Private Data
|
||||
****************************************************************************/
|
||||
|
||||
/****************************************************************************
|
||||
* Private Functions
|
||||
****************************************************************************/
|
||||
|
||||
/****************************************************************************
|
||||
* Name: trv_door_startopen
|
||||
*
|
||||
* Description:
|
||||
*
|
||||
***************************************************************************/
|
||||
|
||||
static void trv_door_startopen (void)
|
||||
{
|
||||
FAR struct trv_rect_data_s *rect;
|
||||
|
||||
/* Check if a door is already opening */
|
||||
|
||||
if (g_opendoor.state == DOOR_IDLE)
|
||||
{
|
||||
/* Test if there is a door within three steps in front of the player */
|
||||
/* Try the X planes first */
|
||||
|
||||
rect = trv_test_xplane(&g_trv_player, 3*STEP_DISTANCE,
|
||||
g_trv_player.yaw, g_player_height);
|
||||
|
||||
/* If there is no X door in front of the player, then try the Y Planes
|
||||
* (it is assumed that there would not be doors this close in both
|
||||
* planes!)
|
||||
*/
|
||||
|
||||
if (!rect || !IS_DOOR(rect))
|
||||
{
|
||||
rect = trv_test_yplane(&g_trv_player, 3*STEP_DISTANCE,
|
||||
g_trv_player.yaw, g_player_height);
|
||||
}
|
||||
|
||||
/* Check if we found a door in either the X or Y plane. */
|
||||
|
||||
if (rect && IS_DOOR(rect))
|
||||
{
|
||||
/* We now have found a door to open. Set the door open sequence
|
||||
* in motion
|
||||
*/
|
||||
|
||||
g_opendoor.rect = rect;
|
||||
g_opendoor.state = DOOR_OPENING;
|
||||
g_opendoor.zbottom = rect->vstart;
|
||||
g_opendoor.zdistance = 0;
|
||||
|
||||
/* Mark the door's attribute to indicate that it is in motion */
|
||||
|
||||
rect->attribute |= MOVING_DOOR_PLANE;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/****************************************************************************
|
||||
* Name: trv_door_animation
|
||||
* Description:
|
||||
* This function is called every frame when a door is in motion.
|
||||
****************************************************************************/
|
||||
|
||||
static void trv_door_animation(void)
|
||||
{
|
||||
/* What we do next depends upon the state of the door state machine */
|
||||
|
||||
switch (g_opendoor.state)
|
||||
{
|
||||
/* A door is opening */
|
||||
|
||||
case DOOR_OPENING :
|
||||
|
||||
/* Raise the door a little */
|
||||
|
||||
g_opendoor.zbottom += DOOR_ZSTEP;
|
||||
g_opendoor.zdistance += DOOR_ZSTEP;
|
||||
|
||||
/* When the bottom of the door is above the player's head, we will
|
||||
* say that the door is open
|
||||
*/
|
||||
|
||||
if (g_opendoor.zbottom > g_trv_player.z)
|
||||
{
|
||||
g_opendoor.rect->attribute |= OPEN_DOOR_PLANE;
|
||||
}
|
||||
|
||||
/* Check if the door is fully open */
|
||||
|
||||
if (g_opendoor.zbottom >= g_opendoor.rect->vend)
|
||||
{
|
||||
/* Make sure that the door does not open wider than it is tall */
|
||||
|
||||
g_opendoor.zbottom = g_opendoor.rect->vend;
|
||||
g_opendoor.zdistance = g_opendoor.rect->vend - g_opendoor.rect->vstart;
|
||||
|
||||
/* The door is done opening, the next state is the DOOR_OPEN state
|
||||
* where we will hold the door open a while
|
||||
*/
|
||||
|
||||
g_opendoor.state = DOOR_OPEN;
|
||||
|
||||
/* Initialize the countdown timer which will determine how long
|
||||
* the door is held open
|
||||
*/
|
||||
|
||||
g_opendoor.clock = DOOR_OPEN_WAIT;
|
||||
}
|
||||
break;
|
||||
|
||||
/* The door is open */
|
||||
|
||||
case DOOR_OPEN :
|
||||
/* Decrement the door open clock. When it goes to zero, it is time
|
||||
* to begin closing the door
|
||||
*/
|
||||
|
||||
if (--g_opendoor.clock <= 0)
|
||||
{
|
||||
/* The door is done opening, the next state is the DOOR_CLOSING
|
||||
* states
|
||||
*/
|
||||
|
||||
g_opendoor.state = DOOR_CLOSING;
|
||||
|
||||
/* Lower the door a little */
|
||||
|
||||
g_opendoor.zbottom -= DOOR_ZSTEP;
|
||||
g_opendoor.zdistance -= DOOR_ZSTEP;
|
||||
|
||||
/* When the bottom of the door is below the player's head, we
|
||||
* will say that the door is closed
|
||||
*/
|
||||
|
||||
if (g_opendoor.zbottom <= g_trv_player.z)
|
||||
{
|
||||
g_opendoor.rect->attribute &= ~OPEN_DOOR_PLANE;
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
/* The door is closing */
|
||||
|
||||
case DOOR_CLOSING :
|
||||
/* Lower the door a little */
|
||||
|
||||
g_opendoor.zbottom -= DOOR_ZSTEP;
|
||||
g_opendoor.zdistance -= DOOR_ZSTEP;
|
||||
|
||||
/* When the bottom of the door is below the player's head, we will
|
||||
* say that the door is closed
|
||||
*/
|
||||
|
||||
if (g_opendoor.zbottom <= g_trv_player.z)
|
||||
{
|
||||
g_opendoor.rect->attribute &= ~OPEN_DOOR_PLANE;
|
||||
}
|
||||
|
||||
/* Check if the door is fully closed */
|
||||
|
||||
if (g_opendoor.zdistance <= 0)
|
||||
{
|
||||
/* Indicate that the door is no longer in motion */
|
||||
|
||||
g_opendoor.rect->attribute &= ~(OPEN_DOOR_PLANE|MOVING_DOOR_PLANE);
|
||||
|
||||
/* Indicate that the entire door movement sequence is done */
|
||||
|
||||
g_opendoor.rect = NULL;
|
||||
g_opendoor.state = DOOR_IDLE;
|
||||
}
|
||||
break;
|
||||
|
||||
/* There is nothing going on! */
|
||||
|
||||
case DOOR_IDLE :
|
||||
default :
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
/****************************************************************************
|
||||
* Public Functions
|
||||
****************************************************************************/
|
||||
|
||||
/****************************************************************************
|
||||
* Name: trv_door_initialize
|
||||
*
|
||||
* Description:
|
||||
* This function performs initialization of the door animation logic
|
||||
*
|
||||
****************************************************************************/
|
||||
|
||||
void trv_door_initialize(void)
|
||||
{
|
||||
/* Initialize the g_opendoor structure */
|
||||
|
||||
g_opendoor.rect = NULL;
|
||||
g_opendoor.state = DOOR_IDLE;
|
||||
}
|
||||
|
||||
/***************************************************************************
|
||||
* Name: trv_door_animate
|
||||
*
|
||||
* Description:
|
||||
* This function must be called on each cycle. It checks if the player
|
||||
* is attempting to open a door. If so, the appropriate door animation
|
||||
* is started. This function then calls trv_door_animation which must be
|
||||
* called on each cycle to perform the door movement.
|
||||
*
|
||||
***************************************************************************/
|
||||
|
||||
void trv_door_animate(void)
|
||||
{
|
||||
/* Check if the user is trying to open a door. */
|
||||
|
||||
if (g_trv_input.dooropen && g_opendoor.state == DOOR_IDLE)
|
||||
{
|
||||
|
||||
/* Start the door opening action */
|
||||
|
||||
trv_door_startopen();
|
||||
}
|
||||
|
||||
/* Process any necessary door movement animation on this cycle */
|
||||
|
||||
if (g_opendoor.state != DOOR_IDLE)
|
||||
{
|
||||
/* Perform the animation */
|
||||
|
||||
trv_door_animation();
|
||||
}
|
||||
}
|
@ -1,6 +1,5 @@
|
||||
/****************************************************************************
|
||||
* apps/graphics/traveler/trv_input.c
|
||||
* This file contains the main logic for the NuttX version of Traveler
|
||||
*
|
||||
* Copyright (C) 2014 Gregory Nutt. All rights reserved.
|
||||
* Author: Gregory Nutt <gnutt@nuttx.org>
|
||||
|
@ -1,5 +1,6 @@
|
||||
/****************************************************************************
|
||||
* apps/graphics/traveler/src/trv_mem.c
|
||||
* Memory management support
|
||||
*
|
||||
* Copyright (C) 2014 Gregory Nutt. All rights reserved.
|
||||
* Author: Gregory Nutt <gnutt@nuttx.org>
|
||||
|
@ -1,5 +1,6 @@
|
||||
/****************************************************************************
|
||||
* apps/graphics/traveler/trv_nxbkgd.c
|
||||
* NX background window callback handlers
|
||||
*
|
||||
* Copyright (C) 2014 Gregory Nutt. All rights reserved.
|
||||
* Author: Gregory Nutt <gnutt@nuttx.org>
|
||||
|
@ -1,5 +1,6 @@
|
||||
/****************************************************************************
|
||||
* apps/graphics/traveler/trv_nxlistener.c
|
||||
* NX server logic
|
||||
*
|
||||
* Copyright (C) 2014 Gregory Nutt. All rights reserved.
|
||||
* Author: Gregory Nutt <gnutt@nuttx.org>
|
||||
|
@ -1,5 +1,6 @@
|
||||
/****************************************************************************
|
||||
* apps/graphics/traveler/trv_pov.c
|
||||
* This file contains the logic which manages player's point-of-view (POV)
|
||||
*
|
||||
* Copyright (C) 2014 Gregory Nutt. All rights reserved.
|
||||
* Author: Gregory Nutt <gnutt@nuttx.org>
|
||||
|
Loading…
Reference in New Issue
Block a user