#pragma once #include "point3d.h" #include "vector2d.h" #include "resource.h" #include "notation.h" class Entity; //########################################################################## //##################### Reticle::ModelResource ####################### //########################################################################## struct Reticle__ModelResource { Vector2DOf reticlePosition; }; //########################################################################## //########################### Class Reticle ######################### //########################################################################## class Reticle SIGNATURED { public: enum ReticleState { ReticleOff, // Reticle is invisible ReticleOn, // Reticle is visible (may be more than one "on" state added later) }; enum ReticleElements // these are bits that turn parts of the reticle on and off { FrontFiringWeaponsOn = 0x00000001, // Display Front firing weapons RearFiringWeaponsOn = 0x00000002, // Display rear firing weapons LeftFiringWeaponsOn = 0x00000004, // Display left firing weapons RightFiringWeaponsOn = 0x00000008, // Display right firing weapons WeaponsControlGroup = 0x0000000F, // Mask defining the weapons group TargetDesignatorOn = 0x00000010, // Display target designator box and direction arrows PrimaryHudOn = 0x00000020, // if set, you get the full hud, if not just a simple x AllEnabledGroup = 0xFFFFFFFF, // All bits on }; Vector2DOf reticlePosition; // screen position -1.0 -> +1.0 ReticleState reticleState; // current state of reticle, graphic to display Logical pickPointingOn; // Pick point intersection testing on/off Point3D rayIntersection; // Current pickpoint intersection in 3d world Entity *targetEntity; // entity being targeted int targetDamageZone; // damage zone on the entity ReticleElements reticleElementMask; // controls what parts of the reticle are displayed Reticle(); Logical TestInstance() const; typedef Reticle__ModelResource ModelResource; static ResourceDescription::ResourceID CreateModelResource( ResourceFile *resource_file, const char* model_name, NotationFile *map_file, const ResourceDirectories *directories, ModelResource *model = NULL ); };