public FlyStraightBehaviour( SteeringManager manager ) : base(manager) { this.tag = "FlyStraight"; this.steeringWeight = 1.0f; seek = new SeekBehaviour (manager); }
/// <summary> /// Update the behavior. /// </summary> /// <param name="manager">The steering manager.</param> /// <param name="actor">The actor being updated.</param> /// <param name="dt">The time since the last update, in seconds. /// </param> /// <returns>The steering object.</returns> public override Steering Update(SteeringManager manager, Actor actor, float dt) { float threshold = base.MaxDistance; Vector3 accum = Vector3.zero; foreach (Actor f in Flock.Members) { if (base.IsAffecting(actor, f)) { Vector3 v = actor.Position - f.Position; float d = v.magnitude; float str = Mathf.Max(0.0f, (threshold - d) / threshold) * manager.MaxForce; accum += (v / d) * str; } } if (manager.IsPlanar) { accum.y = 0f; } return(new Steering(accum, Vector3.zero)); }
/// <summary> /// Update the behavior. /// </summary> /// <param name="manager">The steering manager.</param> /// <param name="actor">The actor being updated.</param> /// <param name="dt">The time since the last update, in seconds. /// </param> /// <returns>The steering object.</returns> protected override Steering FlockingUpdate(SteeringManager manager, Actor actor, float dt) { float smallestHitTime = float.PositiveInfinity; Vector3 tgt = Vector3.zero; bool hit = false; foreach (Actor other in Flock.Members) { Vector3 a = actor.Position - other.Position; Vector3 b = actor.Velocity - other.Velocity; // Calculate future hit time float hTime = -(Vector3.Dot(a, b)) / b.sqrMagnitude; // We want the smallest hit time but it must be greater // than zero. Zero and smaller means no collision if (hTime < smallestHitTime && hTime > 0) { smallestHitTime = hTime; // If we have the smallest hit time, compute where that // actor will be at that time and set it to the target hit = true; tgt = smallestHitTime * other.Velocity + other.Position; } } //Flee from the target if (hit) { target.Point = tgt; return flee.Update(manager, actor, dt); } return Steering.zero; }
protected override void OnStart() { base.OnStart(); if (FollowTarget != null) { followTargetController = FollowTarget.GetComponent <SceneObjController>(); } m_CheckAroundController = GetComponent <CheckAroundEntityController>(); if (m_CheckAroundController == null) { m_CheckAroundController = gameObject.AddComponent <CheckAroundEntityController>(); } m_MoveSpeed_Max = 0.1f; m_ForceSteer_Max = 1f; m_StopRadius = 0.5f; m_SlowingRadius = 1f; m_CurrentVelocity = Vector2.zero; m_TempMass = 1; m_Steering = new SteeringManager(this); m_PathfindingRequested = false; InitAnimComponent(); }
public override void Update() { float range = 50.0f; timeShot += Time.deltaTime; float fov = Mathf.PI / 4.0f; // Can I see the leader? GameObject leader = SteeringManager.Instance().currentScenario.leader; if ((leader.transform.position - entity.transform.position).magnitude > range) { entity.GetComponent <StateMachine>().SwicthState(new IdleState(entity)); } else { float angle; Vector3 toEnemy = (leader.transform.position - entity.transform.position); toEnemy.Normalize(); angle = (float)Math.Acos(Vector3.Dot(toEnemy, entity.transform.forward)); if (angle < fov) { if (timeShot > 0.25f) { GameObject lazer = new GameObject(); lazer.AddComponent <Lazer>(); lazer.transform.position = entity.transform.position; lazer.transform.forward = entity.transform.forward; timeShot = 0.0f; } } } }
public override sealed Steering Update(SteeringManager manager, Actor actor, float dt) { if(flock == null) { return Steering.zero; } return FlockingUpdate(manager, actor, dt); }
public void Update() { if (currentState != null) { SteeringManager.PrintMessage("Current state: " + currentState.Description()); currentState.Update(); } }
public override void Enter() { entity.GetComponent <SteeringBehaviours>().turnOffAll(); entity.GetComponent <SteeringBehaviours>().OffsetPursuitEnabled = true; entity.GetComponent <SteeringBehaviours>().ObstacleAvoidanceEnabled = true; entity.GetComponent <SteeringBehaviours>().offset = new Vector3(0, 0, 5); entity.GetComponent <SteeringBehaviours>().leader = SteeringManager.Instance().currentScenario.leader; }
// Use this for initialization void Start() { mSettingsScript = GetComponent <EnemySettings>(); mSteeringManager = new SteeringManager(); mSteeringManager.Initiate(this.gameObject, mSettingsScript); mTarget = GameObject.FindGameObjectWithTag("Player"); mRigidBody = GetComponent <Rigidbody>(); }
//public void Init(AnimationAnalyzer analyzer, FootstepPlanningTest planner, public void Init(AnimationAnalyzer analyzer, Planner planner, AnimationEngine animEngine, CollisionReaction collisionReact, NavMeshWayPoints navMeshWaypoints, SteeringManager steering, NeighbourAgents agents, NeighbourObstacles obstacles, PlaceFootSteps steps) { planning = planner; if (planning != null && !planning.initialized) { planning.Init(analyzer, agents, obstacles); } engine = animEngine; if (engine != null && !engine.initialized) { engine.Init(analyzer, planning, agents, obstacles); } collision = collisionReact; if (collision != null && !collision.initialized) { collision.Init(analyzer, planner, engine, agents, obstacles); } waypoints = navMeshWaypoints; //if (waypoints != null && !waypoints.initialized) // waypoints.Init(planning,steering,analyzer,agents,obstacles); neighborhood = agents; if (neighborhood != null && !neighborhood.initialized) { neighborhood.Init(); } footsteps = steps; if (footsteps != null && !footsteps.initiated) { footsteps.Init(analyzer, planner, engine, neighborhood, obstacles); } nObstacles = obstacles; if (nObstacles != null && !nObstacles.initialized) { nObstacles.Init(); } timeSinceLastPlan = 0; timeSinceLastWaypoints = 0; previousGoalPosition = planning.goalStateTransform.position; previousCurrentGoalPosition = planning.currentGoal; previousActionsSinceLastPlan = -1; newWaypoint = false; initialized = true; }
public void UpdateFlightControl(Vessel vessel) { control = GetControllerByVessel(vessel); if (steeringManager != null) { steeringManager = SteeringManagerProvider.SwapInstance(shared, steeringManager); steeringManager.Update(vessel); } }
public void Dispose() { Enabled = false; if (steeringManager != null) { SteeringManagerProvider.RemoveInstance(shared.Vessel); steeringManager = null; } }
private void Awake() { home = new GameObject(); pivot = new GameObject(); home.transform.position = transform.position; pivot.transform.position = new Vector3(transform.position.x, transform.position.y, transform.position.z + 1.5f); manager = new SteeringManager(); steering = new Vector3(0.0f, 0.0f, 0.0f); velocity = new Vector3(0.0f, 0.0f, 0.0f); }
public GameObject CreateBoid(Vector3 position, GameObject prefab) { GameObject boid; boid = (GameObject)SteeringManager.Instantiate(prefab); boid.tag = "boid"; boid.AddComponent <SteeringBehaviours>(); boid.transform.position = position; return(boid); }
// Use this for initialization //public void Init (FootstepPlanningTest planner, SteeringManager steeringManager, AnimationAnalyzer analyzer, NeighbourAgents agents, NeighbourObstacles obstacles, RootMotionComputer computer) { public void Init(Planner planner, SteeringManager steeringManager, AnimationAnalyzer analyzer, NeighbourAgents agents, NeighbourObstacles obstacles) { steering = steeringManager; planning = planner; if (planning != null && !planning.initialized) planning.Init(analyzer, agents, obstacles); navMeshLayer = 1 << LayerMask.NameToLayer("StaticWorld"); initialized = true; }
protected BMovableGameObject(Texture2D texture, float positionX, float positionY, float textureOffsetX, float textureOffsetY, float collisionBoxSizeX = 0.7f, float collisionBoxSizeY = 0.7f) : base(texture, positionX, positionY, textureOffsetX, textureOffsetY, collisionBoxSizeX, collisionBoxSizeY) { InputManager.AnyActionEvent += MoveToTarget; mSteering = new SteeringManager(this); mBloodAnimation = AnimationManager.GetAnimation(AnimationManager.Blood, this); mBloodAnimation.AnimationFinished = true; mBlood = TextureManager.GetTexture("blood", 32, 32, 0); InputManager.AnyActionEvent += StopMovement; Mass = 1; Position += QuadTree.ClampPosition(this); }
public override void Update() { float range = 50.0f; // Can I see the leader? GameObject leader = SteeringManager.Instance().currentScenario.leader; if ((leader.transform.position - entity.transform.position).magnitude < range) { // Is the leader inside my FOV entity.GetComponent <StateMachine>().SwicthState(new AttackingState(entity)); } }
/// <summary> /// Update the behavior. /// </summary> /// <param name="manager">The steering manager.</param> /// <param name="actor">The actor being updated.</param> /// <param name="dt">The time since the last update, in seconds. /// </param> /// <returns>The steering object.</returns> protected override Steering FlockingUpdate(SteeringManager manager, Actor actor, float dt) { int count = 0; Vector3 avg = Vector3.zero; foreach (Actor f in Flock.Members) { avg += f.Position; count++; } target.Point = count > 0 ? avg / count : avg; return seeker.Update(manager, actor, dt); }
public BankHardRightBehaviour(SteeringManager manager) : base(manager) { this.tag = "BankHardRight"; this.radius = 400; this.dist = 600; this.pointOnSphere = Vector3.zero; this.sphere = new GameObject(); this.sphere.name = "BankHardRight"; seek = new SeekBehaviour(manager); }
// Use this for initialization //public void Init (FootstepPlanningTest planner, SteeringManager steeringManager, AnimationAnalyzer analyzer, NeighbourAgents agents, NeighbourObstacles obstacles, RootMotionComputer computer) { public void Init(Planner planner, SteeringManager steeringManager, AnimationAnalyzer analyzer, NeighbourAgents agents, NeighbourObstacles obstacles) { steering = steeringManager; planning = planner; if (planning != null && !planning.initialized) { planning.Init(analyzer, agents, obstacles); } navMeshLayer = 1 << LayerMask.NameToLayer("StaticWorld"); initialized = true; }
public BankHardRightBehaviour( SteeringManager manager ) : base(manager) { this.tag = "BankHardRight"; this.radius = 400; this.dist = 600; this.pointOnSphere = Vector3.zero; this.sphere = new GameObject (); this.sphere.name = "BankHardRight"; seek = new SeekBehaviour (manager); }
void Start() { myTransform = transform; steering = GetComponent <SteeringManager>(); if (steering == null) { Debug.LogError("No steering manager found!"); } model = myTransform.Find(modelName); if (model == null) { Debug.LogWarning("No steerable model found!"); } OnStart(); }
/// <summary> /// After a decouple or part explosion, it's possible for this vessel to /// still have an assigned flight control parameter that is coming from /// a kOS core that is no longer on this vessel but is instead on the newly /// branched vessel we left behind. If so, that parameter needs to be /// removed from this vessel. The new kOSVesselModule will take care of /// making a new parameter on the new vessel, but this kOSVesselModule needs /// to detach it from this one. /// </summary> private void ResetPhysicallyDetachedParameters() { List <string> removeKeys = new List <string>(); foreach (string key in flightControlParameters.Keys) { IFlightControlParameter p = flightControlParameters[key]; if (p.GetShared() != null && p.GetShared().Vessel != null && Vessel != null && p.GetShared().Vessel.id != Vessel.id) { removeKeys.Add(key); } } foreach (string key in removeKeys) { SafeHouse.Logger.SuperVerbose(string.Format( "kOSVesselModule: re-defaulting parameter \"{0}\" because it's on a detached part of the vessel.", key)); RemoveFlightControlParameter(key); IFlightControlParameter p = null; if (key.Equals("steering")) { p = new SteeringManager(Vessel); } else if (key.Equals("throttle")) { p = new ThrottleManager(Vessel); } else if (key.Equals("wheelsteering")) { p = new WheelSteeringManager(Vessel); } else if (key.Equals("wheelthrottle")) { p = new WheelThrottleManager(Vessel); } else if (key.Equals("flightcontrol")) { p = new FlightControl(Vessel); } if (p != null) { AddFlightControlParameter(key, p); } } foundWrongVesselAutopilot = false; }
/// <summary> /// Update the behavior. /// </summary> /// <param name="manager">The steering manager.</param> /// <param name="actor">The actor being updated.</param> /// <param name="dt">The time since the last update, in seconds. /// </param> /// <returns>The steering object.</returns> public override Steering Update(SteeringManager manager, Actor actor, float dt) { int count = 0; Vector3 avg = Vector3.zero; foreach (Actor f in Flock.Members) { if (base.IsAffecting(actor, f)) { avg += f.Position; count++; } } target.Point = count > 0 ? avg / count : avg; return(seeker.Update(manager, actor, dt)); }
public FlightCtrlParam(string name, SharedObjects sharedObjects) { this.name = name; shared = sharedObjects; control = GetControllerByVessel(sharedObjects.Vessel); binding = sharedObjects.BindingMgr; Enabled = false; value = null; if (string.Equals(name, "steering", StringComparison.CurrentCultureIgnoreCase)) { steeringManager = SteeringManagerProvider.GetInstance(sharedObjects); } HookEvents(); }
protected void Awake() { actor = GetComponent<GameObjectActor>(); if(!actor) { Debug.LogError("Steering manager is not attached to an actor!"); } manager = new SteeringManager(); behaviors = new Dictionary<string, SteeringBehaviorProxy>(); foreach(SteeringBehaviorAsset asset in steeringAssets) { SteeringBehaviorProxy proxy = new SteeringBehaviorProxy(asset); behaviors[asset.name] = proxy; foreach(SteeringBehavior behavior in proxy.behaviors) { manager.AddBehavior(behavior); } } }
/// <summary> /// Update the behavior. /// </summary> /// <param name="manager">The steering manager.</param> /// <param name="actor">The actor being updated.</param> /// <param name="dt">The time since the last update, in seconds. /// </param> /// <returns>The steering object.</returns> protected override Steering FlockingUpdate(SteeringManager manager, Actor actor, float dt) { Vector3 accum = Vector3.zero; int count = 0; foreach (Actor f in Flock.Members) { Vector3 vel = f.Velocity; vel.Normalize(); accum += vel; count++; } accum /= count > 0 ? count : 1.0f; return new Steering(SteerToward(manager, actor, actor.Position + accum, dt), Vector3.zero); }
public GameObject CreateCamFollower(GameObject leader, Vector3 offset) { GameObject camFollower = new GameObject(); camFollower.tag = "camFollower"; camFollower.AddComponent <SteeringBehaviours>(); camFollower.GetComponent <SteeringBehaviours>().leader = leader; camFollower.GetComponent <SteeringBehaviours>().offset = offset; camFollower.transform.position = leader.transform.TransformPoint(offset); camFollower.GetComponent <SteeringBehaviours> ().OffsetPursuitEnabled = true; //camFighter.GetComponent<SteeringBehaviours>().turnOn(SteeringBehaviours.behaviour_type.wall_avoidance); camFollower.GetComponent <SteeringBehaviours> ().ObstacleAvoidanceEnabled = true; SteeringManager.Instance().camFighter = camFollower; GameObject.FindGameObjectWithTag("MainCamera").transform.position = camFollower.transform.position; return(camFollower); }
public AvoidLockOnRightLeftBehaviour(SteeringManager manager) : base(manager) { this.tag = "AvoidLockOnRightLeft"; this.left = false; this.timeMax = 4.0f; this.radius = 200; this.dist = 400; this.pointOnSphere = Vector3.zero; this.sphere = new GameObject(); this.sphere.name = "AvoidLockOnSphere"; seek = new SeekBehaviour(manager); }
//public void Init(AnimationAnalyzer analyzer, FootstepPlanningTest planner, public void Init(AnimationAnalyzer analyzer, Planner planner, AnimationEngine animEngine, CollisionReaction collisionReact, NavMeshWayPoints navMeshWaypoints, SteeringManager steering, NeighbourAgents agents, NeighbourObstacles obstacles, PlaceFootSteps steps) { planning = planner; if (planning != null && !planning.initialized) planning.Init(analyzer,agents,obstacles); engine = animEngine; if (engine != null && !engine.initialized) engine.Init(analyzer,planning,agents,obstacles); collision = collisionReact; if (collision != null && !collision.initialized) collision.Init(analyzer,planner,engine,agents,obstacles); waypoints = navMeshWaypoints; //if (waypoints != null && !waypoints.initialized) // waypoints.Init(planning,steering,analyzer,agents,obstacles); neighborhood = agents; if (neighborhood != null && !neighborhood.initialized) neighborhood.Init(); footsteps = steps; if (footsteps != null && !footsteps.initiated) footsteps.Init(analyzer,planner,engine,neighborhood,obstacles); nObstacles = obstacles; if (nObstacles != null && !nObstacles.initialized) nObstacles.Init(); timeSinceLastPlan = 0; timeSinceLastWaypoints = 0; previousGoalPosition = planning.goalStateTransform.position; previousCurrentGoalPosition = planning.currentGoal; previousActionsSinceLastPlan = -1; newWaypoint = false; initialized = true; }
/// <summary> /// Update the behavior. /// </summary> /// <param name="manager">The steering manager.</param> /// <param name="actor">The actor being updated.</param> /// <param name="dt">The time since the last update, in seconds. /// </param> /// <returns>The steering object.</returns> protected override Steering FlockingUpdate(SteeringManager manager, Actor actor, float dt) { Vector3 accum = Vector3.zero; foreach (Actor f in Flock.Members) { Vector3 v = actor.Position - f.Position; float d = v.magnitude; float str = Mathf.Max(0.0f, (threshold - d) / threshold) * manager.MaxForce; accum += (v / d) * str; } if(manager.IsPlanar) { accum.y = 0f; } return new Steering(accum, Vector3.zero); }
protected void Awake() { actor = GetComponent <GameObjectActor>(); if (!actor) { Debug.LogError("Steering manager is not attached to an actor!"); } manager = new SteeringManager(); behaviors = new Dictionary <string, SteeringBehaviorProxy>(); foreach (SteeringBehaviorAsset asset in steeringAssets) { SteeringBehaviorProxy proxy = new SteeringBehaviorProxy(asset); behaviors[asset.name] = proxy; foreach (SteeringBehavior behavior in proxy.behaviors) { manager.AddBehavior(behavior); } } }
public AvoidLockOnBehaviour(SteeringManager manager) : base(manager) { this.tag = "AvoidLockOn"; this.firstTime = true; this.timePassed = 0.0f; this.timeMax = 10.0f; this.radius = 100; this.dist = 200; this.range = 300; this.FOV = 60.0f; this.pointOnSphere = new Vector3(0, 0, 0); this.targetPos = manager.transform.position + (Vector3.forward * manager.maxSpeed); this.maxUp = 0.0f; this.sphere = new GameObject(); this.sphere.name = "AvoidLockOnSphere"; }
protected override void OnStart() { base.OnStart(); if (FollowTarget != null) { followTargetController = FollowTarget.GetHostGameObject().GetComponent <SceneObjController>(); } m_MoveSpeed_Max = 0.1f; m_ForceSteer_Max = 1f; m_StopRadius = 0.5f; m_SlowingRadius = 1f; m_CurrentVelocity = Vector2.zero; m_TempMass = 1; m_Steering = new SteeringManager(this); m_Position = new Vector2(transform.position.x, transform.position.y); InitAnimComponent(); }
public AvoidLockOnBehaviour( SteeringManager manager ) : base(manager) { this.tag = "AvoidLockOn"; this.firstTime = true; this.timePassed = 0.0f; this.timeMax = 10.0f; this.radius = 100; this.dist = 200; this.range = 300; this.FOV = 60.0f; this.pointOnSphere = new Vector3 (0, 0, 0); this.targetPos = manager.transform.position + (Vector3.forward * manager.maxSpeed); this.maxUp = 0.0f; this.sphere = new GameObject (); this.sphere.name = "AvoidLockOnSphere"; }
public static SteeringManager GetInstance(SharedObjects shared) { string key = shared.Vessel.id.ToString(); if (AllInstances.Keys.Contains(key)) { SteeringManager instance = AllInstances[key]; if (!instance.SubscribedParts.Contains(shared.KSPPart.flightID)) { AllInstances[key].SubscribedParts.Add(shared.KSPPart.flightID); } return(AllInstances[key]); } SteeringManager sm = new SteeringManager(shared); sm.SubscribedParts.Add(shared.KSPPart.flightID); AllInstances.Add(key, sm); return(sm); }
/// <summary> /// Update the behavior. /// </summary> /// <param name="manager">The steering manager.</param> /// <param name="actor">The actor being updated.</param> /// <param name="dt">The time since the last update, in seconds. /// </param> /// <returns>The steering object.</returns> public override Steering Update(SteeringManager manager, Actor actor, float dt) { Vector3 accum = Vector3.zero; int count = 0; foreach (Actor f in Flock.Members) { if (base.IsAffecting(actor, f)) { Vector3 vel = f.Velocity; vel.Normalize(); accum += vel; count++; } } accum /= count > 0 ? count : 1.0f; return(new Steering(SteerToward(manager, actor, actor.Position + accum, dt), Vector3.zero)); }
/// <summary> /// Update the behavior. /// </summary> /// <param name="manager">The steering manager.</param> /// <param name="actor">The actor being updated.</param> /// <param name="dt">The time since the last update, in seconds. /// </param> /// <returns>The steering object.</returns> public override Steering Update(SteeringManager manager, Actor actor, float dt) { float smallestHitTime = float.PositiveInfinity; Vector3 tgt = Vector3.zero; bool hit = false; foreach (Actor other in Flock.Members) { if (!base.IsAffecting(actor, other)) { continue; } Vector3 a = actor.Position - other.Position; Vector3 b = actor.Velocity - other.Velocity; // Calculate future hit time float hTime = -(Vector3.Dot(a, b)) / b.sqrMagnitude; // We want the smallest hit time but it must be greater // than zero. Zero and smaller means no collision if (hTime < smallestHitTime && hTime > 0) { smallestHitTime = hTime; // If we have the smallest hit time, compute where that // actor will be at that time and set it to the target hit = true; tgt = smallestHitTime * other.Velocity + other.Position; } } //Flee from the target if (hit) { target.Point = tgt; return(flee.Update(manager, actor, dt)); } return(Steering.zero); }
void Update() { if (!SteeringManager.IsValid(SteeringManager.ToVector2(myTransform.position)) && !steering.ignoreWalls) { myTransform.position = lastGoodPosition; } else { lastGoodPosition = myTransform.position; } DoBoundaryBehavior(); if (!isAvoiding) { DoBehavior(); } if (model != null) { model.rotation = Quaternion.Euler(0, -steering.facing * Mathf.Rad2Deg, 0); } steering.UpdateSteering(); }
public static SteeringManager SwapInstance(SharedObjects shared, SteeringManager oldInstance) { if (shared.Vessel == oldInstance.Vessel) { return(oldInstance); } if (oldInstance.SubscribedParts.Contains(shared.KSPPart.flightID)) { oldInstance.SubscribedParts.Remove(shared.KSPPart.flightID); } SteeringManager instance = SteeringManager.DeepCopy(oldInstance, shared); if (oldInstance.Enabled) { if (oldInstance.PartId == shared.KSPPart.flightID) { oldInstance.DisableControl(); instance.EnableControl(shared); instance.Value = oldInstance.Value; } } return(instance); }
public FollowBehaviour( SteeringManager manager ) : base(manager) { this.tag = "Follow"; seek = new SeekBehaviour (manager); }
public SteeringBehaviour( SteeringManager manager ) { this.manager = manager; this.isEnabled = false; this.steeringWeight = 1.0f; }
public FleeBehaviour( SteeringManager manager ) : base(manager) { this.tag = "Flee"; this.panicDist = 500.0f; }
public OffsetPursueBehaviour( SteeringManager manager ) : base(manager) { this.tag = "OffsetPursue"; this.arrive = new ArriveBehaviour (manager); }
public AvoidLockOnRightLeftBehaviour( SteeringManager manager ) : base(manager) { this.tag = "AvoidLockOnRightLeft"; this.left = false; this.timeMax = 4.0f; this.radius = 200; this.dist = 400; this.pointOnSphere = Vector3.zero; this.sphere = new GameObject (); this.sphere.name = "AvoidLockOnSphere"; seek = new SeekBehaviour (manager); }
public ArriveBehaviour( SteeringManager manager ) : base(manager) { this.tag = "Arrive"; this.slowingDist = 10.0f; }
public TurnRight( SteeringManager manager ) : base(manager) { this.tag = "TurnRight"; this.left = false; this.timePassed = 20.0f; this.timeMax = 3.0f; this.radius = 200; this.dist = 600; this.pointOnSphere = Vector3.zero; pointOnSphere.x = 0.8f; pointOnSphere *= radius; this.sphere = new GameObject (); this.sphere.name = "AvoidLockOnSphere"; seek = new SeekBehaviour (manager); }
public EvadeBehaviour( SteeringManager manager ) : base(manager) { this.tag = "Evade"; flee = new FleeBehaviour (manager); }
protected abstract Steering FlockingUpdate(SteeringManager manager, Actor actor, float dt);
public FleeBehaviour(SteeringManager manager) : base(manager) { this.tag = "Flee"; this.panicDist = 500.0f; }
public SeekBehaviour( SteeringManager manager ) : base(manager) { this.tag = "Seek"; }
public static void CalculateNavigationMeshPath(Vector3 startPosition, Vector3 goalPosition, int passableMask) { ClearNavigationMeshPath (); switch (navigationMeshChoice) { default: case NavigationMeshChoice.USE_UNITY : NavMeshPath unityPath = new NavMeshPath(); NavMesh.CalculatePath(startPosition,goalPosition, passableMask,unityPath); pathStatus = unityPath.status; if (pathStatus == NavMeshPathStatus.PathInvalid) { numberOfNodes = 0; } else { if ( unityPath.corners.Length >= maxNumberOfNodes) { Debug.LogWarning("Navigation mesh path greater than maximum number of nodes"); numberOfNodes = maxNumberOfNodes; pathStatus = NavMeshPathStatus.PathPartial; } else { numberOfNodes = unityPath.corners.Length; } for(int i =0; i < numberOfNodes; i++) { // MAKING SURE LAST WAYPOINT IS THE GOAL if ( i == numberOfNodes - 1) path[i] = goalPosition; else path[i] = unityPath.corners[i]; // computing path cost if (i==0) pathCost[i] = 0.0f; else { // assuming that all off mesh links will override cost if (CentralizedManager.IsOffMeshLink(path[i])) pathCost[i] = CentralizedManager.GetOffMeshLinkInformation(path[i]).offMeshLink.costOverride; else pathCost[i] = Vector3.Distance(path[i],path[i-1]); } totalPathCost += pathCost[i]; } } break; case NavigationMeshChoice.USE_RECAST: if (recastSteeringManager == null) recastSteeringManager = GameObject.Find("ADAPTPrefab").GetComponentInChildren<SteeringManager>(); numberOfNodes = recastSteeringManager.FindPath(startPosition,goalPosition,path,maxNumberOfNodes); if( numberOfNodes > 0) path[numberOfNodes-1] = goalPosition; // computing path cost for (int i=1; i < numberOfNodes; i++) { // TODO : incorporate number of obstacles from centralized manager here pathCost[i] = Vector3.Distance(path[i],path[i-1]); totalPathCost += pathCost[i]; } if (numberOfNodes == 0) pathStatus = NavMeshPathStatus.PathInvalid; else if ( numberOfNodes == maxNumberOfNodes) pathStatus = NavMeshPathStatus.PathPartial; else pathStatus = NavMeshPathStatus.PathComplete; break; } }
public PursueBehaviour( SteeringManager manager ) : base(manager) { this.tag = "Pursue"; seek = new SeekBehaviour (manager); }