123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439 |
- /** /**
- * \defgroup World World
- * @{
- */
- //----------------------------------------------
- /**
- * \defgroup WorldCommon World
- * @{
- */
- typedef int[] WorldHandle;
- proto native float GetWorldTime();
- /*! Sets current world. It allows to work with entities outside world processing
- // return previous world
- */
- proto native WorldHandle SetCurrentWorld(WorldHandle world);
- //proto native void SchedulePreload(vector pos, float radius);
- proto native IEntity FindEntityByName(IEntity worldEnt, string name);
- proto native IEntity FindEntityByID(IEntity worldEnt, int ID);
- //!returns number of active (simulated) Entities in the world
- proto native int GetNumActiveEntities(IEntity worldEntity);
- //!returns active entity
- proto native IEntity GetActiveEntity(IEntity worldEntity, int index);
- //@}
- //----------------------------------------------
- /**
- * \defgroup Camera Camera
- * @{
- */
- enum CameraType
- {
- PERSPECTIVE,
- ORTHOGRAPHIC
- };
- //! sets which camera will be a listener (for sound engine)
- proto native void SetListenerCamera(int camera);
- /*!
- Changes camera position
- \param cam Index of camera
- \param origin position
- \param angle orientation
- */
- proto native void SetCamera(int cam, vector origin, vector angle);
- //! Changes camera matrix
- proto native void SetCameraEx(int cam, const vector mat[4]);
- //!Returns current camera transformation
- proto native void GetCamera(int cam, out vector mat[4]);
- proto native void SetCameraVerticalFOV(int cam, float fovy);
- proto native void SetCameraFarPlane(int cam, float farplane); //default 160000 units
- proto native void SetCameraNearPlane(int cam, float nearplane); //default 5 units
- proto native void SetCameraType(int cam, CameraType type);
- /*!
- \brief Post-process effect type.
- \attention Keep enum names in synch with post-process effect material class names. Postfix "Effect" is appended automatically.
- */
- enum PostProcessEffectType
- {
- None,
- UnderWater,
- SSAO,
- DepthOfField,
- HBAO,
- RotBlur,
- GodRays,
- Rain,
- Snowfall,
- FilmGrain,
- RadialBlur,
- ChromAber,
- WetDistort,
- DynamicBlur,
- ColorGrading,
- Colors,
- Glow,
- SMAA,
- FXAA,
- Median,//unused?
- SunMask,
- GaussFilter,
- SSR, //not available
- Distort,
- Ghost
- };
- /*!
- set postprocess effect to camera
- To disable effect in some prioroty ppEffect, just set effectName or name to NULL
- \param cam number of camera
- \param priority priority of effect
- \param type type of effect
- \param materialPath material
- */
- proto native void SetCameraPostProcessEffect(int cam, int priority, PostProcessEffectType type, string materialPath);
-
- //ent can be NULL for world-space coords
- proto vector ProjectVector(int cam, IEntity ent, vector vec);
- proto vector UnprojectVector(int cam, float x, float y, vector dir);
- //@}
- //----------------------------------------------
- /**
- * \defgroup Light Light API
- * @{
- */
- //!Light handle
- typedef int[] HLIGHT;
- enum LightType
- {
- POINT, //< point light, all directional light
- SPOT, //< spot light, direction is determined by owner (entity)
- DIRECTIONAL,
- AMBIENT
- };
- enum LightFlags
- {
- /*!
- Dynamic light. There is limit 512 dynamic lights per world and
- 32 per camera view. They are faster when moving and changing shape.
- Also they are always attached to owner entity
- */
- DYNAMIC,
- CASTSHADOW,
- //! for cheaper dynamic lights, like muzzle flashes (might use cheaper rendering method)
- CHEAP
- };
- /*!
- creates light
- */
- proto HLIGHT AddLight(IEntity owner, LightType type, LightFlags flags, float radius, vector color);
- //!removes light
- proto native bool RemoveLight(HLIGHT light);
- proto native bool SetLightEx(HLIGHT light, float radius, vector color);
- //!sets lookup texture for projection lights
- proto native bool SetLightTexture(HLIGHT light, string cubemap);
- proto native int SetLightFlags(HLIGHT light, LightFlags flags);
- proto native int ClearLightFlags(HLIGHT light, LightFlags flags);
- //!Sets light cone in degrees (for LightType.SPOT).
- proto native bool SetLightCone(HLIGHT light, float cone);
- /*!
- scene multiplicator of light (based on measured scene light levels) - preexposure of light
- */
- proto native float GetSceneHDRMul(int camera);
- //@}
- //----------------------------------------------
- /**
- * \defgroup WorldTrace Trace&Visibility API
- * @{
- */
- enum TraceFlags
- {
- BONES, //< tests collision geometries around bones of animated objects
- ENTS, //< tests entities
- WORLD, //< tests world bounding box
- ONLY_PHYSICS,
- WATER, //< tests collision with water surface
- PASSTRANSLUCENT,//< Do not intersects with entities with EntityFlags.TRANSLUCENT set
- RAGDOLLS, //< tests ragdolls
- VISTEST, //< performs visibility test first. Not necessary for entities receiving EntityEvent.VISIBLE, because there is a certainty that a camera will see them
- NOTRACE,
- TRANSPARENT_OCCLUDERS
- };
- enum TraceShape
- {
- LINE,
- BOX,
- OBB,
- SPHERE
- };
- //! collision and tracing
- //! WARNING: Non-managed, needs manual delete call, should not be ref'd
- class TraceContact
- {
- float Fraction;
- int Content;
- int Surfparm;
- int MaterialFlags;
- int Triangle;
- int SurfaceID;
- owned string MaterialName;
- owned string OriginalMaterialName;
- float Plane[4];
- vector Point;
- }
- proto native bool TraceLineToEntity(IEntity ent, vector start, vector end, out TraceContact contact);
- //bool FilterCallback(Class target [, vector rayorigin, vector raydirection])
- class TraceParam: Managed
- {
- vector Start;
- vector End;
- int LayerMask = 0xffffffff;
- TraceFlags Flags;
- IEntity Exclude;
-
- };
- class TraceSphere: TraceParam
- {
- float Radius;
- };
- class TraceBox: TraceParam
- {
- vector Mins;
- vector Maxs;
- };
- class TraceOBB: TraceBox
- {
- vector Mat[3];
- };
- /*!
- traces line start->end, return 0..1 if trace was sucessfull.
- // It take bboux from ent
- // flag like in P2PVisibilityEx will be added
- //OUTPUT:
- \param cent [out] traced entity
- \param plane [out] traced polygon plane (X,Y,Z,D)
- \param surfparm [out] traced surface parameters
- \returns value 0...1, percentage of a path traveled
- */
- proto volatile float TraceMove(TraceParam param, out IEntity cent, out float plane[4], out int surfparm, func filtercallback);
- /*!
- tests visibility
- \param from
- \param to
- \param flags
- //TraceFlags.VISTEST -
- //TraceFlags.DETAIL - test agains detail brushes
- //TraceFlags.ENT - test against brush entities
- //TraceFlags.NOTRACE - doesn't test geometry (has meaning in conjuction with s TraceFlags.VISTEST)
- \returns true is visible/false not visibel
- */
- proto native int P2PVisibilityEx(vector from, vector to,int flags);
- //! finds all entities in a radius
- proto int SphereQuery(vector origin, float radius, out IEntity visents[], int ents, int fmask);
- /*!tests if bbox is visible according to view-frustum and PVS
- \param flags & 1 - test also PVS
- \returns true/false is/isn't visible
- */
- proto native bool IsBoxVisible(vector mins, vector maxs, int flags);
- /*!finds all visible entities (rought, according to a visibility. It is convinient for entitie selection where we want to do more precise visibility test)
- \param origin - position it is looked from
- \param look - look direction
- \param angle - view angle (usuably 90). -1 if we do not care about the view angle
- \param ents - array to which entities will be stored
- \param maxents - length of the array (prevents overflowing the array)
- \param fmask - flag mask (SetFlags()). Entity must have all flags set.
- it is possible to use reserved flags like EntityFlags.USER1, EntityFlags.USER2, EntityFlags.USER6 for fast finding of entities in custom categories
- */
- proto int VisEntities(vector origin, vector look, float angle, float radius, out IEntity ents[2], int maxents, int fmask);
- /*!
- Object that handles visibility on GPU. Used for coronas etc.
- */
- class OcclusionQuery
- {
- proto private void ~OcclusionQuery();
- /*!
- return Query result
- \returns -1 result is not ready yet, try it later.
- >0 point is visible
- ==0 point is not visible
- */
- proto native int GetResult();
- //!Sets world position
- proto native void SetPosition(vector pos);
- //!Destroys the object
- proto native void Destroy();
- };
- //@}
- //----------------------------------------------
- /**
- * \defgroup Decals Decals API
- * @{
- */
- typedef int[] hDecal;
- /*!
- Creates single visual mark, e.g. from shots
- //when lifetime=0, pointer to decal is returned, that can be removed by RemoveDecal then
- \param entity entity where the landmark should be created
- \param origin first point of the decal, nothing is done now
- \param project projection direction (length is far clipping distance)
- \param nearclip near clipping distance
- \param materialName Material used for decal
- \param lifetime Lifetime in seconds
- \param flags Not used ATM
- \return Decal pointer or null
- */
- proto native hDecal CreateDecal(IEntity entity, vector origin, vector project, float nearclip, float angle, float size, string materialName, float lifetime, int flags);
- proto native void RemoveDecal(hDecal decal);
- /*!
- Creates continous visual mark, e.g. from wheel when a car is moving on the ground
- \param entity entity where the landmark should be created (only terrain is supported ATM)
- \param origin first point of the decal, nothing is done now
- \param normal normal of surface
- \param edgesize Edge size of decal
- \param lifetime Lifetime in seconds
- \param materialName Material used for decal
- \param prev Previous decal, we are connecting to
- \param alpha translucency of point
- \return Decal pointer or null
- */
- proto native hDecal CreateLandMarkDecal(IEntity entity, vector origin, vector normal, float edgeSize, float lifeTime, string materialName, hDecal prevDecal, float alpha);
- /*!
- is it possible to add new point to landmark decal?
- \param lmDecal entity to add new landmark point
- \param entity entity to add new landmark point
- \param mat material of decal
- \param newpoint new point to add
- \return
- LMD_ERROR = error when adding new point (invalid decal)
- LMD_VALID = can add new point
- LMD_DIFF_ENT = new point is on different entity
- LMD_TOO_FAR = new point is too far from previous point
- */
- proto native int CanAddToLandMarkDecal(hDecal lmDecal, IEntity entity, string mat, vector newPoint);
- /*!
- add new point to decal, internally, new point is added when previous point is in some
- distance or the angle is more than some threshold
- \param lmDecal entity to add new landmark point
- \param point contact point
- \param normal normal of contact
- \param alpha translucency in point
- \return true if everything was OK, false if not. In this case, the application MUST not used later the pointer to decal, it's finalized internally !
- */
- proto native bool AddPointToLandMarkDecal(hDecal lmDecal, vector point, vector normal, float alpha);
- /*!
- finalize landmark adding, e.g. when entity lose contact with ground -> the pointer to decal
- should have only world and entity if it has something to render, otherwise it's destroyed here
- \param lmDecal entity to add new landmark point
- \param addAlpha if to add last point with transition to zero alpha
- \param alphaDist distance to add last point
- */
- proto native void FinalizeLandMarkDecal(hDecal lmDecal, bool addAlpha, float alphaDist);
- /*!
- return if landmark was finalized
- \param lmDecal decal to test
- */
- proto native bool IsLandMarkFinalized(hDecal lmDecal);
- /*!
- return last landmark point or -65535.0 in all components
- \param lmDecal decal to test
- */
- proto native vector GetLastLandMarkPoint(hDecal lmDecal);
- /*!
- set global parameters for landmark generation
- \param minSegmentLength minimum length segment, when new point is added (4 default), when is less, just the end position is on the fly updated
- \param maxSegmentLength maximum segment length, when length is bigger, the path is finished
- \param degAngle angle in degrees, when is more, the path is finished
- */
- proto native void SetGlobalLandMarkParams(float minSegmentLength, float maxSegmentLength, float degAngle);
- //@}
- //----------------------------------------------
- /**
- * \defgroup Ocean Ocean API
- * @{
- */
- /*!
- Is ocean availabled
- */
- proto native bool IsOcean();
- /*!
- Get water ocean height at given point
- \param worldX world x position
- \param worldZ world z position
- */
- proto native float GetOceanHeight(float worldX, float worldZ);
- /*!
- Get water ocean height and displacement at given point, returns vector(displaceX, height, displaceZ)
- \param worldX world x position
- \param worldZ world z position
- */
- proto native vector GetOceanHeightAndDisplace(float worldX, float worldZ);
- //@}
- //@}
-
|