www.pudn.com > BucklandSimpleSoccer.rar > ParamLoader.h
#ifndef PARAMLOADER #define PARAMLOADER #pragma warning(disable:4800) //------------------------------------------------------------------------ // //Name: ParamLoader.h // //Desc: singleton class to handle the loading of default parameter // values from an initialization file: 'params.ini' // //Author: Mat Buckland 2003 (fup@ai-junkie.com) // //------------------------------------------------------------------------ #include#include #include #include "constants.h" #include "misc/iniFileLoaderBase.h" #define Prm (*ParamLoader::Instance()) class ParamLoader : public iniFileLoaderBase { private: ParamLoader():iniFileLoaderBase("Params.ini") { GoalWidth = GetNextParameterDouble(); NumSupportSpotsX = GetNextParameterInt(); NumSupportSpotsY = GetNextParameterInt(); Spot_PassSafeScore = GetNextParameterDouble(); Spot_CanScoreFromPositionScore = GetNextParameterDouble(); Spot_DistFromControllingPlayerScore = GetNextParameterDouble(); Spot_ClosenessToSupportingPlayerScore = GetNextParameterDouble(); Spot_AheadOfAttackerScore = GetNextParameterDouble(); SupportSpotUpdateFreq = GetNextParameterDouble(); ChancePlayerAttemptsPotShot = GetNextParameterDouble(); ChanceOfUsingArriveTypeReceiveBehavior = GetNextParameterDouble(); BallSize = GetNextParameterDouble(); BallMass = GetNextParameterDouble(); Friction = GetNextParameterDouble(); KeeperInBallRange = GetNextParameterDouble(); PlayerInTargetRange = GetNextParameterDouble(); PlayerKickingDistance = GetNextParameterDouble(); PlayerKickFrequency = GetNextParameterDouble(); PlayerMass = GetNextParameterDouble(); PlayerMaxForce = GetNextParameterDouble(); PlayerMaxSpeedWithBall = GetNextParameterDouble(); PlayerMaxSpeedWithoutBall = GetNextParameterDouble(); PlayerMaxTurnRate = GetNextParameterDouble(); PlayerScale = GetNextParameterDouble(); PlayerComfortZone = GetNextParameterDouble(); PlayerKickingAccuracy = GetNextParameterDouble(); NumAttemptsToFindValidStrike = GetNextParameterInt(); MaxDribbleForce = GetNextParameterDouble(); MaxShootingForce = GetNextParameterDouble(); MaxPassingForce = GetNextParameterDouble(); WithinRangeOfHome = GetNextParameterDouble(); WithinRangeOfSupportSpot = GetNextParameterDouble(); MinPassDist = GetNextParameterDouble(); GoalkeeperMinPassDist = GetNextParameterDouble(); GoalKeeperTendingDistance = GetNextParameterDouble(); GoalKeeperInterceptRange = GetNextParameterDouble(); BallWithinReceivingRange = GetNextParameterDouble(); bStates = GetNextParameterBool(); bIDs = GetNextParameterBool(); bSupportSpots = GetNextParameterBool(); bRegions = GetNextParameterBool(); bShowControllingTeam = GetNextParameterBool(); bViewTargets = GetNextParameterBool(); bHighlightIfThreatened = GetNextParameterBool(); FrameRate = GetNextParameterInt(); SeparationCoefficient = GetNextParameterDouble(); ViewDistance = GetNextParameterDouble(); bNonPenetrationConstraint = GetNextParameterBool(); BallWithinReceivingRangeSq = BallWithinReceivingRange * BallWithinReceivingRange; KeeperInBallRangeSq = KeeperInBallRange * KeeperInBallRange; PlayerInTargetRangeSq = PlayerInTargetRange * PlayerInTargetRange; PlayerKickingDistance += BallSize; PlayerKickingDistanceSq = PlayerKickingDistance * PlayerKickingDistance; PlayerComfortZoneSq = PlayerComfortZone * PlayerComfortZone; GoalKeeperInterceptRangeSq = GoalKeeperInterceptRange * GoalKeeperInterceptRange; WithinRangeOfSupportSpotSq = WithinRangeOfSupportSpot * WithinRangeOfSupportSpot; } public: static ParamLoader* Instance(); double GoalWidth; int NumSupportSpotsX; int NumSupportSpotsY; //these values tweak the various rules used to calculate the support spots double Spot_PassSafeScore; double Spot_CanScoreFromPositionScore; double Spot_DistFromControllingPlayerScore; double Spot_ClosenessToSupportingPlayerScore; double Spot_AheadOfAttackerScore; double SupportSpotUpdateFreq ; double ChancePlayerAttemptsPotShot; double ChanceOfUsingArriveTypeReceiveBehavior; double BallSize; double BallMass; double Friction; double KeeperInBallRange; double KeeperInBallRangeSq; double PlayerInTargetRange; double PlayerInTargetRangeSq; double PlayerMass; //max steering force double PlayerMaxForce; double PlayerMaxSpeedWithBall; double PlayerMaxSpeedWithoutBall; double PlayerMaxTurnRate; double PlayerScale; double PlayerComfortZone; double PlayerKickingDistance; double PlayerKickingDistanceSq; double PlayerKickFrequency; double MaxDribbleForce; double MaxShootingForce; double MaxPassingForce; double PlayerComfortZoneSq; //in the range zero to 1.0. adjusts the amount of noise added to a kick, //the lower the value the worse the players get double PlayerKickingAccuracy; //the number of times the SoccerTeam::CanShoot method attempts to find //a valid shot int NumAttemptsToFindValidStrike; //the distance away from the center of its home region a player //must be to be considered at home double WithinRangeOfHome; //how close a player must get to a sweet spot before he can change state double WithinRangeOfSupportSpot; double WithinRangeOfSupportSpotSq; //the minimum distance a receiving player must be from the passing player double MinPassDist; double GoalkeeperMinPassDist; //this is the distance the keeper puts between the back of the net //and the ball when using the interpose steering behavior double GoalKeeperTendingDistance; //when the ball becomes within this distance of the goalkeeper he //changes state to intercept the ball double GoalKeeperInterceptRange; double GoalKeeperInterceptRangeSq; //how close the ball must be to a receiver before he starts chasing it double BallWithinReceivingRange; double BallWithinReceivingRangeSq; //these values control what debug info you can see bool bStates; bool bIDs; bool bSupportSpots; bool bRegions; bool bShowControllingTeam; bool bViewTargets; bool bHighlightIfThreatened; int FrameRate; double SeparationCoefficient; //how close a neighbour must be before an agent perceives it double ViewDistance; //zero this to turn the constraint off bool bNonPenetrationConstraint; }; #endif