Book Image

CryENGINE Game Programming with C++, C#, and Lua

Book Image

CryENGINE Game Programming with C++, C#, and Lua

Overview of this book

CryENGINE is a complete 3D game development solution that can run on multiple platforms. It is orientated around giving intuitive tools to the developer. A variety of interactive video games can be created using CryENGINE. CryENGINE is one of the most beginner-friendly engines out there to learn. If you are interested in diving into the various systems and understanding their workings in a way that is easily understood, then this book is for you. This book provides you with the knowledge to tame the powerful but hard-to-master CryENGINE. CryENGINE Game Programming with C++, C#, and Lua dives into the various systems and explains their workings in a way that can be easily understood by developers of all levels. It provides knowledge on the engine along with step-by-step exercises and detailed information on the backend implementation of the subsystems, giving you an excellent foundation to build upon when developing your own CryENGINE games. Written by developers with years of CryENGINE experience, this book breaks down the common confusion that encompasses the CryENGINE engine code, guiding you through a series of chapters aimed towards giving you the ability to create your own games in a rapid yet productive fashion. You will learn everything you need to know in order to create your own CryENGINE-powered games as well as detailed information on how to use the engine to your advantage. By teaching systems such as audio, particle effects, rendering, AI, networking, and more, we'll be exposing the most inner parts of CryENGINE that commonly confuse programmers. If you want to quickly gain the knowledge required to create your own CryENGINE game title, then this book is for you.
Table of Contents (19 chapters)
CryENGINE Game Programming with C++, C#, and Lua
Credits
About the Authors
About the Reviewers
www.PacktPub.com
Preface
Index

Ray world intersections


Using the IPhysicalWorld::RayWorldIntersection function, we can cast a ray from one point of our world to another to detect distance to specific objects, surface types, normal of ground, and more.

RayWorldIntersection is pretty easy to use, and we can prove it! To start off, see the following example of a ray cast:

  ray_hit hit;

  Vec3 origin = pEntity->GetWorldPos();
  Vec3 dir = Vec3(0, 0, -1);

  int numHits = gEnv->pPhysicalWorld->RayWorldIntersection(origin, dir, ent_static | ent_terrain, rwi_stop_at_pierceable | rwi_colltype_any, &hit, 1);
  if(numHits > 0)
  {
    // Hit something!
  }

The ray_hit struct

A reference to our ray_hit hit variable is passed to RayWorldIntersection, and is where we'll be able to retrieve all of the information about the ray hit.

Commonly used member variables

  • float dist: This is the distance from the origin (in our case the position of our entity) to the place where the ray hit.

  • IPhysicalEntity *pCollider: This is the...