123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524 |
- //! Car's sound controller list. (native, do not change or extend)
- enum CarSoundCtrl
- {
- // simulation
- ENGINE, //!< indicates if engine is ON
- RPM, //!< engine's RPM
- SPEED, //!< speed of the car in km/h
- // miscellaneous
- DOORS, //!< indicates if doors are open
- PLAYER //!< indicates if driver is controlled by player
- };
- //! Type of vehicle's fluid. (native, do not change or extend)
- enum CarFluid
- {
- FUEL,
- OIL,
- BRAKE,
- COOLANT,
- USER1, //!< reserved for user / modding support
- USER2, //!< reserved for user / modding support
- USER3, //!< reserved for user / modding support
- USER4 //!< reserved for user / modding support
- };
- //! Enumerated gearbox types. (native, do not change or extend)
- enum CarGearboxType
- {
- MANUAL, //!< classic manual transmission with friction plates between engine and gearbox
- AUTOMATIC //!< automatic transmission with torque converter between engine and gearbox
- }
- //! Enumerated vehicle's gears. (native, do not change or extend)
- enum CarGear
- {
- REVERSE,
- NEUTRAL,
- FIRST,
- SECOND,
- THIRD,
- FOURTH,
- FIFTH,
- SIXTH,
- SEVENTH,
- EIGTH,
- NINTH,
- TENTH,
- ELEVENTH,
- TWELFTH,
- THIRTEENTH,
- FOURTEENTH,
- FIFTEENTH,
- SIXTEENTH
- };
- //! Enumerated automatic gearbox modes. (native, do not change or extend)
- enum CarAutomaticGearboxMode
- {
- P, //!< park
- R, //!< reverse
- N, //!< neutral
- D //!< drive
- };
- //! Enumerated car wheel water state. (native, do not change or extend)
- enum CarWheelWaterState
- {
- ON_LAND, //!< if the wheel is on or above land
- IN_WATER, //!< if the wheel is partially within some water plane
- UNDER_WATER //!< if the wheel is under a water plane
- };
- //! Base native class for all motorized wheeled vehicles.
- class Car extends Transport
- {
- //! DEPRECATED, left for backwards compatibility, the methods of this class are now directly accessible on Car itself
- proto native CarController GetController();
-
- //! Returns the current speed of the vehicle in km/h.
- proto native float GetSpeedometer();
-
- //! Returns the current speed of the vehicle in km/h. Value is absolute
- float GetSpeedometerAbsolute()
- {
- return Math.AbsFloat(GetSpeedometer());
- }
- override bool IsAreaAtDoorFree( int currentSeat, float maxAllowedObjHeight = 0.5, float horizontalExtents = 0.5, float playerHeight = 1.7 )
- {
- vector transform[4];
-
- vector extents;
-
- extents[0] = horizontalExtents;
- extents[1] = playerHeight;
- extents[2] = horizontalExtents;
- float speed = GetSpeedometerAbsolute();
- if (speed > 8)
- extents[2] = extents[2] * 6;
- if (speed > 8)
- extents[0] = 2;
-
- return IsAreaAtDoorFree( currentSeat, maxAllowedObjHeight, extents, transform );
- }
-
- override Shape DebugFreeAreaAtDoor( int currentSeat, float maxAllowedObjHeight = 0.5, float horizontalExtents = 0.5, float playerHeight = 1.7 )
- {
- int color = ARGB(20, 0, 255, 0);
-
- vector transform[4];
-
- vector extents;
-
- extents[0] = horizontalExtents;
- extents[1] = playerHeight;
- extents[2] = horizontalExtents;
- float speed = GetSpeedometerAbsolute();
- if (speed > 8)
- extents[2] = extents[2] * 6;
- if (speed > 8)
- extents[0] = 2;
-
- if (!IsAreaAtDoorFree( currentSeat, maxAllowedObjHeight, extents, transform ))
- {
- color = ARGB(20, 255, 0, 0);
- }
-
- Shape shape = Debug.DrawBox(-extents * 0.5, extents * 0.5, color);
- shape.SetMatrix(transform);
- return shape;
- }
-
- protected bool DetectFlippedUsingWheels(VehicleFlippedContext ctx, bool disallowSide)
- {
- if (disallowSide && (vector.Dot(GetDirectionUp(), vector.Up) < 0.7))
- {
- // return as "flipped", vehicle isn't pointing enough up to be reasonably certain
- return true;
- }
-
- int wheelCount = WheelCount();
-
- for (int wheelIdx = 0; wheelIdx < wheelCount; wheelIdx++)
- {
- if (!WheelHasContact(wheelIdx))
- {
- // wheel not in contact, then we could be flipped, we assume there exist other predicates
- return true;
- }
- }
-
- // all wheels in contact (or zero registered wheels), then we are in contact
- return false;
- }
-
- //-----------------------------------------------------------------------------
- // controls
- //! Returns the current steering value in range <-1, 1>.
- proto native float GetSteering();
- /*!
- Sets the steering value.
- \param in should be in range <-1, 1>
- \param analog indicates if the input value was taken from analog controller
- */
- proto native void SetSteering( float in, bool analog = false );
- //! Returns the current thrust turbo modifier value in range <0, 1>.
- proto native float GetThrustTurbo();
- //! Returns the current thrust gentle modifier value in range <0, 1>.
- proto native float GetThrustGentle();
- //! Returns the current thrust value in range <0, 1>.
- proto native float GetThrust();
- /*!
- Sets the thrust value.
- \param in should be in range <0, 1>
- \param gentle should be in range <0, 1>, thrust modifier
- \param turbo should be in range <0, 1>, thrust modifier
- */
- proto native void SetThrust( float in, float gentle = 0, float turbo = 0 );
- //! Returns the current brake value in range <0, 1>.
- proto native float GetBrake();
- /*!
- Sets the brake value.
- \param in should be in range <0, 1>
- \param panic should be in range <0, 1>
- */
- proto native void SetBrake( float in, float panic = 0, bool gentle = false );
-
- //! Returns the current handbrake value in range <0, 1>.
- proto native float GetHandbrake();
- /*!
- Sets the handbrake value.
- \param in should be in range <0, 1>
- */
- proto native void SetHandbrake( float in );
-
- /*!
- Sets if brakes should activate without a driver present
- */
- proto native void SetBrakesActivateWithoutDriver( bool activate = true );
-
- //! Returns the current clutch value in range <0, 1>.
- proto native float GetClutch();
- /*!
- Sets the clutch state.
- */
- proto native void SetClutchState( bool in );
- //! Returns index of the current gear.
- proto native int GetGear();
- proto native void ShiftUp();
- proto native void ShiftTo( CarGear gear );
- proto native void ShiftDown();
- //-----------------------------------------------------------------------------
- //-----------------------------------------------------------------------------
- // fluids
- /*!
- Returns tank capacity for the specified vehicle's fluid.
- \param fluid the specified fluid type
- */
- proto native float GetFluidCapacity( CarFluid fluid );
- /*!
- Returns fraction value (in range <0, 1>)
- of the current state of the specified vehicle's fluid.
- \param[in] fluid the specified fluid type
- */
- proto native float GetFluidFraction( CarFluid fluid );
- //! Removes from the specified fluid the specified amount.
- proto native void Leak( CarFluid fluid, float amount );
- //! Removes all the specified fluid from vehicle.
- proto native void LeakAll( CarFluid fluid );
- //! Adds to the specified fluid the specified amount.
- proto native void Fill( CarFluid fluid, float amount );
- /*!
- Is called every time when the specified vehicle's fluid level
- changes eg. when vehicle is consuming fuel.
- \param[in] fluid fluid identifier, \see CarFluid
- \param[in] newValue new fluid level
- \param[in] oldValue previous fluid level before change
- */
- void OnFluidChanged( CarFluid fluid, float newValue, float oldValue ) {}
- //-----------------------------------------------------------------------------
- //-----------------------------------------------------------------------------
- // engine
- //! Returns engine's min operating rpm
- proto native float EngineGetRPMMin();
-
- //! Returns engine's idle rpm before engine stalls.
- proto native float EngineGetRPMIdle();
-
- //! Returns engine's max rpm before engine blows up.
- proto native float EngineGetRPMMax();
- //! Returns engine's maximal working rpm without damaging the engine.
- proto native float EngineGetRPMRedline();
- //! Returns engine's rpm value.
- proto native float EngineGetRPM();
- //! Returns true when engine is running, false otherwise.
- proto native bool EngineIsOn();
- //! Starts the engine.
- proto native void EngineStart();
- /*!
- Is called every time the game wants to start the engine.
- \return true if the engine can start, false otherwise.
- */
- bool OnBeforeEngineStart()
- {
- // engine can start by default
- return true;
- }
- //! Is called every time the engine starts.
- void OnEngineStart() {}
- //! Stops the engine.
- proto native void EngineStop();
- //! Is called every time the engine stops.
- void OnEngineStop() {}
- //! Get actual position of engine (model space)
- proto native vector GetEnginePos();
- //! Override the position of engine (model space)
- proto native void SetEnginePos(vector pos);
- //-----------------------------------------------------------------------------
- //-----------------------------------------------------------------------------
- // gearbox
- //! Returns total number of gears.
- proto native int GetGearsCount();
- //! Returns gearbox type. See CarGearboxType enum for more info.
- proto native CarGearboxType GearboxGetType();
- //! Returns gearbox mode. This is useful when car has automatic gearbox.
- proto native CarAutomaticGearboxMode GearboxGetMode();
- /*!
- Is called every time when the simulation changed gear.
- \param[in] newGear new gear level
- \param[in] oldGear previous gear level before gear shift
- */
- void OnGearChanged( int newGear, int oldGear )
- {
- }
- //-----------------------------------------------------------------------------
- //-----------------------------------------------------------------------------
- // wheels
- //! Returns true if any of the wheels are locked in terms of its movement.
- proto native bool WheelIsAnyLocked();
- /*!
- Returns the raw angular velocity of the wheel, unstable value
- \param[in] wheelIdx index of the wheel, they are counted from left-front to rear-right
- */
- proto native float WheelGetAngularVelocity( int wheelIdx );
- /*!
- Returns true if given wheel is making any contact
- \param[in] wheelIdx index of the wheel, they are counted from left-front to rear-right
- */
- proto native bool WheelHasContact( int wheelIdx );
- /*!
- Returns the position of contact in world space, only valid if there was an actual contact
- \param[in] wheelIdx index of the wheel, they are counted from left-front to rear-right
- */
- proto native vector WheelGetContactPosition( int wheelIdx );
- /*!
- Returns the normal of contact in world space, only valid if there was an actual contact
- \param[in] wheelIdx index of the wheel, they are counted from left-front to rear-right
- */
- proto native vector WheelGetContactNormal( int wheelIdx );
- /*!
- Returns the direction pointing forwards that the wheel is facing
- \param[in] wheelIdx index of the wheel, they are counted from left-front to rear-right
- */
- proto native vector WheelGetDirection( int wheelIdx );
- /*!
- Returns the surface that the wheel is nearby
- \param[in] wheelIdx index of the wheel, they are counted from left-front to rear-right
- */
- proto native SurfaceInfo WheelGetSurface( int wheelIdx );
- /*!
- Returns the state that the wheel is in with water
- \param[in] wheelIdx index of the wheel, they are counted from left-front to rear-right
- */
- proto native CarWheelWaterState WheelGetWaterState( int wheelIdx );
- /*!
- Returns the entity attached that represents the wheel
- \param[in] wheelIdx index of the wheel, they are counted from left-front to rear-right
- */
- proto native EntityAI WheelGetEntity( int wheelIdx );
- /*!
- Returns true if given wheel is locked in terms of its movement.
- \param[in] wheelIdx index of the wheel, they are counted from left-front to rear-right
- */
- proto native bool WheelIsLocked( int wheelIdx );
-
- //! How many wheel can be attached to a car (hubs only)
- proto native int WheelCount();
-
- //! Number of actually attached wheels (hubs only)
- proto native int WheelCountPresent();
- //-----------------------------------------------------------------------------
- //-----------------------------------------------------------------------------
- // events
- /*!
- Is called every time when vehicle collides with other object.
- \param[in] zoneName configured vehicle's zone that was hit
- \param[in] localPos position where the vehicle was hit in vehicle's space
- \param[in] other object with which the vehicle is colliding
- \param[in] data contact properties
- */
- void OnContact( string zoneName, vector localPos, IEntity other, Contact data ) {}
- /*!
- Is called every sound simulation step.
- In this callback, user can modify behaviour of sound controllers.
- \param[in] ctrl sound controller identifier, \see CarSoundCtrl
- \param[in] oldValue already computed value by the game code
- \return new value of the specified sound controller.
- */
- float OnSound( CarSoundCtrl ctrl, float oldValue )
- {
- // just use the computed value by the game code
- return oldValue;
- }
- /*!
- Is called after every input simulation step.
- Note that the player character and other systems can always change the internal state.
- It is highly recommended to store state of custom inputs elsewhere and call Setters here.
- \param[in] dt frame time in seconds
- */
- void OnInput( float dt ) {}
- /*!
- Is called every game frame.
- \param[in] dt frame time in seconds
- */
- void OnUpdate( float dt ) {}
- //-----------------------------------------------------------------------------
- // implemented only in internal configuration
- proto native void ForcePosition( vector pos );
- // implemented only in internal configuration
- proto native void ForceDirection( vector dir );
- };
- //! DEPRECATED class left for backwards compatibility, methods are available on car itself now
- class CarController
- {
- private void CarController() {}
- private void ~CarController() {}
-
- //! Returns the current steering value in range <-1, 1>.
- proto float GetSteering();
- /*!
- Sets the steering value.
- \param in should be in range <-1, 1>
- \param analog indicates if the input value was taken from analog controller
- */
- proto void SetSteering( float in, bool analog = false );
- //! Returns the current thrust turbo modifier value in range <0, 1>.
- proto float GetThrustTurbo();
- //! Returns the current thrust gentle modifier value in range <0, 1>.
- proto float GetThrustGentle();
- //! Returns the current thrust value in range <0, 1>.
- proto float GetThrust();
- /*!
- Sets the thrust value.
- \param in should be in range <0, 1>
- \param gentle should be in range <0, 1>, thrust modifier
- \param turbo should be in range <0, 1>, thrust modifier
- */
- proto void SetThrust( float in, float gentle = 0, float turbo = 0 );
- //! Returns the current brake value in range <0, 1>.
- proto float GetBrake();
- /*!
- Sets the brake value.
- \param in should be in range <0, 1>
- \param panic should be in range <0, 1>
- */
- proto void SetBrake( float in, float panic = 0 );
- //! Returns index of the current gear.
- proto int GetGear();
- proto void ShiftUp();
- proto void ShiftTo( CarGear gear );
- proto void ShiftDown();
- };
|