コード例 #1
0
ファイル: Skill.cs プロジェクト: psywombats/7drl2019
    public IEnumerator PlaySkillRoutine(BattleUnit actor, Result <bool> executeResult)
    {
        actor.battle.Log(actor + " casts " + skillName + "...", true);
        Targeter targeter = Object.Instantiate(data.targeter);
        Effector effect   = Object.Instantiate(data.effect);

        effect.actor   = actor;
        targeter.actor = actor;
        effect.skill   = this;
        targeter.skill = this;
        yield return(targeter.ExecuteRoutine(effect, executeResult));

        if (!executeResult.canceled)
        {
            if (costMP > 0)
            {
                actor.unit.stats.Sub(StatTag.MP, costMP);
            }
            if (costCD > 0)
            {
                actor.unit.stats.Add(StatTag.CD, costCD);
                actor.maxCD = costCD;
            }
        }
    }
コード例 #2
0
ファイル: Target.cs プロジェクト: trimute2/FightToTheTop
    public void AddToRange(int Range, Targeter targeter)
    {
        switch (Range)
        {
        case LONG_RANGE:
            if (!LongRangeTargeters.Contains(targeter))
            {
                LongRangeTargeters.Add(targeter);
            }
            break;

        case MID_RANGE:
            if (!MidRangeTargeters.Contains(targeter))
            {
                MidRangeTargeters.Add(targeter);
            }
            break;

        case CLOSE_RANGE:
            if (!CloseRangeTargeters.Contains(targeter))
            {
                CloseRangeTargeters.Add(targeter);
            }
            break;
        }
    }
コード例 #3
0
        public override void ProcessInput(Event ev)
        {
            Action <LocalTargetInfo> actionToInput = delegate(LocalTargetInfo x)
            {
                this.action(x.Thing);
            };

            if (this.CurActivateSound != null)
            {
                this.CurActivateSound.PlayOneShotOnCamera();
            }
            SoundDefOf.TickTiny.PlayOneShotOnCamera();
            Targeter targeter = Find.Targeter;

            if (this.verb.CasterIsPawn && targeter.targetingVerb != null && targeter.targetingVerb.verbProps == this.verb.verbProps)
            {
                Pawn casterPawn = this.verb.CasterPawn;
                if (!targeter.IsPawnTargeting(casterPawn))
                {
                    targeter.targetingVerbAdditionalPawns.Add(casterPawn);
                }
            }
            else
            {
                Find.Targeter.BeginTargeting(this.verb);
                //AccessTools.Field(typeof(Targeter), "action").SetValue(Find.Targeter, new Action<LocalTargetInfo>((LocalTargetInfo x) =>
                //this.action(x.Thing)));
            }
        }
コード例 #4
0
 private void Awake()
 {
     targeter       = GetComponent <Targeter>();
     targetRotation = GetComponent <TargetRotation>();
     enemyMovement  = GetComponent <EnemyMovement>();
     rb             = GetComponent <Rigidbody2D>();
 }
コード例 #5
0
 // Use this for initialization
 void Start()
 {
     enManager      = GameObject.Find("EnemyManager").GetComponent <EnemyManager>();
     towersTargeter = GameObject.Find("Targeter").GetComponent <Targeter>();
     rb             = GetComponent <Rigidbody>();
     wayPointList   = enManager.GetWayPoints();
 }
コード例 #6
0
 void Start()
 {
     _agent    = GetComponent <NavMeshAgent>();
     stats     = GetComponent <CharacterStats>();
     _animator = GetComponentInChildren <Animator>();
     targeter  = GetComponent <Targeter>();
 }
コード例 #7
0
            public virtual void ProcessInput(Event ev)
            {
                base.ProcessInput(ev);
                if (this.multiVerb == null)
                {
                    return;
                }
                this.multiVerb.currentVerbIndex = this.index;
                Targeter targeter = Find.get_Targeter();

                if (targeter.get_IsTargeting())
                {
                    if (this.verb.get_CasterIsPawn() && targeter.targetingVerb != null && ((Verb)targeter.targetingVerb).verbProps == this.verb.verbProps)
                    {
                        Pawn casterPawn = this.verb.get_CasterPawn();
                        if (!targeter.IsPawnTargeting(casterPawn))
                        {
                            ((List <Pawn>)targeter.targetingVerbAdditionalPawns).Add(casterPawn);
                        }
                    }
                    else
                    {
                        List <Pawn> pawnList = new List <Pawn>((IEnumerable <Pawn>)targeter.targetingVerbAdditionalPawns);
                        targeter.BeginTargeting(this.verb);
                        ((List <Pawn>)targeter.targetingVerbAdditionalPawns).AddRange((IEnumerable <Pawn>)pawnList);
                    }
                }
                Log.Message(this.defaultLabel.ToString() + "; index=" + (object)this.index, false);
            }
コード例 #8
0
 private static void Targeter_TargeterUpdatePostfix(Targeter __instance)
 {
     if (__instance.targetingVerb != null && __instance.targetingVerb.verbProps is VEF_VerbProperties_Explode verbPropsExplode)
     {
         verbPropsExplode.DrawExplodeRadiusRing(__instance.targetingVerb.caster.Position);
     }
 }
コード例 #9
0
ファイル: Ability.cs プロジェクト: elumixor/C87B
 public void ApplyTo(Targeter targeter, float accuracy)
 {
     foreach (var(effect, targetType) in effects)
     {
         effect.ApplyTo(targeter[targetType], accuracy);
     }
 }
コード例 #10
0
 private void Awake()
 {
     TargetLocator = GameObject.FindObjectOfType <Targeter>();
     Blast         = Instantiate(Spell);
     MyProjectile  = Blast.GetComponent <Projectile>();
     MyProjectile.ResetPosition();
 }
コード例 #11
0
            // Token: 0x06000046 RID: 70 RVA: 0x00003300 File Offset: 0x00001500
            public override void ProcessInput(Event ev)
            {
                base.ProcessInput(ev);
                bool flag = this.multiVerb != null;

                if (flag)
                {
                    this.multiVerb.currentVerbIndex = this.index;
                    Targeter targeter    = Find.Targeter;
                    bool     isTargeting = targeter.IsTargeting;
                    if (isTargeting)
                    {
                        bool flag2 = this.verb.CasterIsPawn && targeter.targetingSource != null && targeter.targetingSource == this.verb.verbProps;
                        if (flag2)
                        {
                            Pawn casterPawn = this.verb.CasterPawn;
                            bool flag3      = !targeter.IsPawnTargeting(casterPawn);
                            if (flag3)
                            {
                                targeter.targetingSourceAdditionalPawns.Add(casterPawn);
                            }
                        }
                        else
                        {
                            List <Pawn> collection = new List <Pawn>(targeter.targetingSourceAdditionalPawns);
                            targeter.BeginTargeting(this.verb);
                            targeter.targetingSourceAdditionalPawns.AddRange(collection);
                        }
                    }
                    Log.Message(this.defaultLabel + "; index=" + this.index, false);
                }
            }
コード例 #12
0
        public static void Postfix(ref Targeter __instance)
        {
            if (!Main.Instance.IsModEnabled())
            {
                return;
            }

            Main.Instance.UpdateFireConeOverlay(false);
            if (__instance.targetingVerb == null)
            {
                return;
            }

            if (__instance.targetingVerb.verbProps.IsMeleeAttack)
            {
                return;
            }

            bool dummy;

            if (__instance.targetingVerb.HighlightFieldRadiusAroundTarget(out dummy) > 0.2f)
            {
                return;
            }

            Main.Instance.UpdateFireConeOverlay(true);
        }
コード例 #13
0
        public static void Postfix(ref Targeter __instance)
        {
            if (!Main.Instance.IsModEnabled())
            {
                return;
            }

            Main.Instance.UpdateFireConeOverlay(false);
            if (__instance.targetingSource == null)
            {
                return;
            }

            if (__instance.targetingSource.IsMeleeAttack)
            {
                return;
            }

            if (!(__instance.targetingSource is Verb verb))
            {
                return;
            }

            if (verb.HighlightFieldRadiusAroundTarget(out _) > 0.2f)
            {
                return;
            }

            Main.Instance.UpdateFireConeOverlay(true);
        }
コード例 #14
0
    public override void enter(CombatManager mgr)
    {
        Ability a = Unit.current.currentAbility;

        targeter = a.Targeter(Unit.current.currentTile.coords, Unit.current);
        targeter.FindSelectable();
        FieldMap.current.showSelectable();
    }
コード例 #15
0
ファイル: Avoider.cs プロジェクト: trimute2/FightToTheTop
 private void Awake()
 {
     thingsToAvoid = new List <string>();
     avoidList     = new List <Avoider>();
     avoidVector   = Vector3.zero;
     targeter      = transform.root.GetComponent <Targeter>();
     hasTargeter   = targeter != null;
 }
コード例 #16
0
        /*
         *
         * public void OnEnable() {
         *  if (mainInput == null) {
         *      mainInput = new MainInput();
         *      // Tell the "gameplay" action map that we want to get told about
         *      // when actions get triggered.
         *      mainInput.Player.SetCallbacks(this);
         *  }
         *  mainInput.Player.Enable();
         * }
         *
         *
         */

        private void Awake()
        {
            Debug.Assert(_charController != null, $"CharController not assigned in playerController {name}");
            if (_targeter == null)
            {
                _targeter = GetComponentInChildren <Targeter>();
            }
        }
コード例 #17
0
        public bool ChoseWorldTarget(GlobalTargetInfo target)
        {
            if (!target.IsValid)
            {
                Messages.Message("SWeaponTargetInvalid".Translate(), MessageTypeDefOf.RejectInput, true);
                return(false);
            }

            /*
             * int num = Find.WorldGrid.TraversalDistanceBetween(base.Map.Tile, target.Tile, true, int.MaxValue);
             * if (this.MaxLaunchDistance < 200 && num > this.MaxLaunchDistance)
             * {
             *  Messages.Message("MissileRangeBad".Translate(), MessageTypeDefOf.RejectInput, true);
             *  return false;
             * }
             */
            MapParent mapParent = target.WorldObject as MapParent;

            if (mapParent != null && mapParent.HasMap)
            {
                Map map = mapParent.Map;
                Current.Game.CurrentMap = map;
                Targeter targeter           = Find.Targeter;
                Action   actionWhenFinished = delegate
                {
                    if (Find.Maps.Contains(base.Map))
                    {
                        Current.Game.CurrentMap = base.Map;
                    }
                };

                /*
                 * int range = 0;
                 * switch (getType()) {
                 *  case SuperWeaponType.Soviet:range = 56;break;
                 *  case SuperWeaponType.Allied: range = 30; break;
                 *  default:range=10;break;
                 * }
                 */

                Texture2D ic = ContentFinder <Texture2D> .Get("ra2/World/ra2_SuperWeaponIcon_" + getType());

                TargetingParameters tg = new TargetingParameters();
                tg.canTargetLocations = true;
                tg.canTargetItems     = true;
                tg.canTargetBuildings = true;
                tg.canTargetPawns     = true;
                tg.canTargetFires     = true;
                targeter.BeginTargeting(tg, delegate(LocalTargetInfo x)
                {
                    //GenDraw.DrawRadiusRing(UI.MouseCell(), range);
                    this.TryLaunch(x.ToGlobalTargetInfo(map));
                }, null, actionWhenFinished, ic);
                return(true);
            }
            this.TryLaunch(target);
            return(true);
        }
コード例 #18
0
        public IEnumerator <bool> Init()
        {
            cannonSettings = new INISerializer("CannonSettings");
            cannonSettings.AddValue("referenceName", x => x, "RCReference");
            cannonSettings.AddValue("speedCap", x => double.Parse(x), 104.38);
            cannonSettings.AddValue("launchVelocity", x => double.Parse(x), 100.0);
            cannonSettings.AddValue("sourceRotorTName", x => x, "[OrbitalCannonBase]_[Azimuth]");
            cannonSettings.AddValue("elevationTag", x => x, "[Elevation]");
            cannonSettings.AddValue("timerName", x => x, "CannonTimer");


            if (Me.CustomData == "")
            {
                string temp = Me.CustomData;
                cannonSettings.FirstSerialization(ref temp);
                Me.CustomData = temp;
            }
            else
            {
                cannonSettings.DeSerialize(Me.CustomData);
            }
            yield return(true);

            ingameTime = new IngameTime();
            GTSUtils   = new GridTerminalSystemUtils(Me, GridTerminalSystem);

            yield return(true);

            IMyShipController reference   = GridTerminalSystem.GetBlockWithName((string)cannonSettings.GetValue("referenceName")) as IMyShipController;
            IMyMotorStator    sourceRotor = GridTerminalSystem.GetBlockWithName((string)cannonSettings.GetValue("sourceRotorTName")) as IMyMotorStator;
            IMyTimerBlock     timer       = GridTerminalSystem.GetBlockWithName((string)cannonSettings.GetValue("timerName")) as IMyTimerBlock;

            Echo($"Getting blocks status:...\nreference: {reference != null}\nsourceRotor: {sourceRotor != null}");

            if (reference == null || sourceRotor == null)
            {
                throw new Exception("cant get blocks!");
            }

            yield return(true);

            targeter = new Targeter
                       (
                (double)cannonSettings.GetValue("speedCap"),
                (double)cannonSettings.GetValue("launchVelocity"),
                reference
                       );
            targeter.directionFoundCallback += TargetCalculatedCallback;

            yield return(true);

            cannon       = Cannon.CreateCannon(sourceRotor, GTSUtils, ingameTime, reference, (string)cannonSettings.GetValue("sourceRotorTName"), (string)cannonSettings.GetValue("elevationTag"));
            cannon.Timer = timer;
            yield return(true);

            Echo("Initialized!");
            initialized = true;
        }
コード例 #19
0
 // Update is called once per frame
 void Update()
 {
     if (!isIdle)
     {
         Targeter targeter = GetComponent <Targeter>();
         targeter.FindTarget();
         GetComponent <AimMode>().AimAt(targeter.GetTargetTransform());
     }
 }
コード例 #20
0
ファイル: Gun.cs プロジェクト: PixelBumper/silent-witness
    protected virtual void Awake()
    {
        Targeter = GetComponent <Targeter>();

        if (Targeter == null)
        {
            Debug.LogError("Gun needs a Targeter component to work properly", this);
        }
    }
コード例 #21
0
 public override void Tick(float deltaTime)
 {
     base.Tick(deltaTime);
     if (Targeter != null && Targeter.GetDistance() < FireTreshold)
     {
         Weapon.Target = Provider?.GetTarget();
         TryFire();
     }
 }
コード例 #22
0
    private void Awake()
    {
        targeter = GetComponent <Targeter>();

        if (!rotateTransform)
        {
            rotateTransform = transform;
        }
    }
コード例 #23
0
 public SteeringAlgorithm(Targeter tag)
 {
     this.targeter = tag;
     maxConstraintSteps = 10.0f; //alterar dps consoante
     validPath = false;
     goal = new Goal();
     smoothpath = new GlobalPath();
     this.goal.updateChannels(targeter.getGoal());
 }
コード例 #24
0
ファイル: AIModule.cs プロジェクト: cruseyd/Filis
    public List <ICommand> FindMoves(BoardState boardState)
    {
        List <ICommand>  moves       = new List <ICommand>();
        Unit             unit        = Unit.current;
        List <HexCoords> movement    = Unit.current.moveTargeter.FindSelectable();
        HexCoords        nearestUnit = boardState.NearestUnit(unit.currentTile.coords);

        switch (_type)
        {
        case AIMove.SHORT_RANGE:
        {
            List <HexCoords> inRange = Targeter.TilesAt(Map.current.TileAt(nearestUnit).node, unit.MinRange());
            foreach (HexCoords coords in inRange)
            {
                if (movement.Contains(coords))
                {
                    moves.Add(new MoveCommand(unit, unit.currentTile.coords, coords));
                }
            }
            break;
        }

        case AIMove.LONG_RANGE:
        {
            List <HexCoords> inRange = Targeter.TilesAt(Map.current.TileAt(nearestUnit).node, unit.MaxRange());
            Debug.Log(inRange.Count);
            foreach (HexCoords coords in inRange)
            {
                if (movement.Contains(coords))
                {
                    moves.Add(new MoveCommand(unit, unit.currentTile.coords, coords));
                }
            }
            break;
        }

        default:
            break;
        }
        if (moves.Count == 0)
        {
            HexCoords nearest = unit.currentTile.coords;
            int       dist    = (nearestUnit - nearest).radius();
            foreach (HexCoords coords in movement)
            {
                int d = (nearestUnit - coords).radius();
                if (d < dist)
                {
                    dist    = d;
                    nearest = coords;
                }
            }
            moves.Add(new MoveCommand(unit, unit.currentTile.coords, nearest));
        }
        return(moves);
    }
コード例 #25
0
ファイル: EnemyNavigation.cs プロジェクト: MHatfull/Simulator
 private void Start()
 {
     _targeter     = GetComponent <Targeter>();
     _navMeshAgent = GetComponent <NavMeshAgent>();
     if (isServer)
     {
         SetDest(NavArea.GetNextPoint());
         InvokeRepeating("Navigate", 0, 0.1f);
     }
 }
コード例 #26
0
ファイル: TargeterEditor.cs プロジェクト: k2inGitHub/UnityGit
    public override void OnInspectorGUI()
    {
        Targeter targeter = target as Targeter;

        Limiter limits = targeter.GetComponent <Limiter>();

        m_switchIfInvalid.Enabled = (limits != null) && limits.enabled;

        m_editHelp.EditProperties(targeter);
    }
コード例 #27
0
    // Use this for initialization
    void Start()
    {
        moveHandler = GetComponent <MoveHandler>();
        moveHandler.GenericStateEvent += StopTargeting;

        targeter    = GetComponent <Targeter>();
        hasTargeter = (targeter != null);

        attatchedEffects = new List <VisualEffects.IVisualEffect>();
    }
コード例 #28
0
        private bool ChoseWorldTarget(GlobalTargetInfo target)
        {
            bool result;

            if (!this.ReadyToTransport)
            {
                result = true;
            }
            else if (!target.IsValid)
            {
                Messages.Message("MessageTransportPodsDestinationIsInvalid".Translate(), MessageTypeDefOf.RejectInput);
                result = false;
            }
            else
            {
                MapParent mapParent = target.WorldObject as MapParent;
                if (mapParent != null && mapParent.HasMap)
                {
                    Map myMap = this.parent.Map;
                    Map map   = mapParent.Map;
                    Current.Game.CurrentMap = map;
                    Targeter targeter           = Find.Targeter;
                    Action   actionWhenFinished = delegate()
                    {
                        if (Find.Maps.Contains(myMap))
                        {
                            Current.Game.CurrentMap = myMap;
                        }
                    };
                    TargetingParameters targetParams = new TargetingParameters
                    {
                        canTargetPawns     = true,
                        canTargetItems     = false,
                        canTargetSelf      = false,
                        canTargetLocations = false,
                        canTargetBuildings = false,
                        canTargetFires     = false
                    };
                    targeter.BeginTargeting(targetParams, delegate(LocalTargetInfo x)
                    {
                        if (this.ReadyToTransport)
                        {
                            this.TryTransport(x.ToGlobalTargetInfo(map));
                        }
                    }, null, actionWhenFinished, CompTeleporter.TargeterMouseAttachment);
                    result = true;
                }
                else
                {
                    Messages.Message("RD_YouCannotLock".Translate(), MessageTypeDefOf.RejectInput);                     //"You cannot lock onto anything there."
                    result = false;
                }
            }
            return(result);
        }
コード例 #29
0
        public static Actor Build(Characters cardChoice, short cardId)
        {
            // gathering character information
            var associations = CharacterLegend[cardChoice];
            var originStats  = OriginStats[associations.origin];
            var classStats   = ClassStats[associations.@class];
            var rarityStats  = RarityStats[associations.rarity];

            Attribute health    = new Attribute();
            Attribute defense   = new Attribute();
            Attribute attack    = new Attribute();
            Attribute speed     = new Attribute();
            Attribute precision = new Attribute();
            Attribute manaCost  = new Attribute();

            // attaching stats
            string name   = associations.name;
            string origin = originStats.origin;
            string @class = classStats.@class;
            string rarity = rarityStats.rarity;

            health.BaseValue       = (short)(originStats.health + classStats.health + rarityStats.health);
            health.CurrentValue    = (short)(originStats.health + classStats.health + rarityStats.health);
            defense.BaseValue      = (short)(originStats.defense + classStats.defense + rarityStats.defense);
            defense.CurrentValue   = (short)(originStats.defense + classStats.defense + rarityStats.defense);
            attack.BaseValue       = (short)(originStats.attack + classStats.attack + rarityStats.attack);
            attack.CurrentValue    = (short)(originStats.attack + classStats.attack + rarityStats.attack);
            speed.BaseValue        = (short)(originStats.speed + classStats.speed + rarityStats.speed);
            speed.CurrentValue     = (short)(originStats.speed + classStats.speed + rarityStats.speed);
            precision.BaseValue    = (short)(originStats.precision + classStats.precision + rarityStats.precision);
            precision.CurrentValue = (short)(originStats.precision + classStats.precision + rarityStats.precision);
            manaCost.BaseValue     = rarityStats.manaCost;
            manaCost.CurrentValue  = rarityStats.manaCost;
            short characterId = (short)cardChoice;

            // attaching effects
            List <Effect> actorEffects = new List <Effect>();
            var           characterEffectDetailsList = CharacterEffects[cardChoice];

            foreach (var effectDetailsReference in characterEffectDetailsList)
            {
                var           effectDetails = Effects[effectDetailsReference];
                Targeter      targeter      = effectDetails.targeter;
                AppliedEffect appliedEffect = effectDetails.appliedEffect;
                string        animation     = effectDetails.animation;
                Effect        effect        = new Effect(targeter, appliedEffect, animation);
                actorEffects.Add(effect);
            }
            Effect[]     effectArray = actorEffects.ToArray();
            ActorAction2 actorAction = new ActorAction2(effectArray);

            Actor actor = new Actor(cardId, origin, @class, name, health, defense, attack, speed, precision, manaCost, rarity, actorAction, characterId);

            return(actor);
        }
コード例 #30
0
        public Task <Turn> PlayTurn(PlayTurnRequest request)
        {
            var avoidCombat = false;

            return(Strategic());

            Task <Turn> Strategic()
            {
                return(request.IsCombat ? StrategicCombat() : StrategicNonCombat());
            }

            Task <Turn> StrategicCombat()
            {
                if (!request.IsCombat)
                {
                    return(Task.FromResult(new Turn(TurnAction.Attack)));
                }

                if (HealthChecker.NeedsToChug(request.PartyMember) && request.PossibleActions.Contains(TurnAction.DrinkPotion))
                {
                    return(Task.FromResult(new Turn(TurnAction.DrinkPotion)));
                }

                return(Task.FromResult(new Turn(TurnAction.Attack, Targeter.GetPriorityTarget(request.PossibleTargets))));
            }

            Task <Turn> StrategicNonCombat()
            {
                if (request.PossibleActions.Contains(TurnAction.Attack) && _random.NextDouble() > 0.5)
                {
                    return(StrategicCombat());
                }

                var movements = MovementTracker.GetMovementActions();

                if (request.PossibleActions.Contains(TurnAction.Loot))
                {
                    return(Task.FromResult(new Turn(TurnAction.Loot)));
                }

                if (request.PossibleActions.Contains(TurnAction.Open))
                {
                    return(Task.FromResult(new Turn(TurnAction.Open)));
                }

                var movementoptions =
                    request.PossibleActions.Where(s => movements.Contains(s));

                var direction = movetracker.GetNextDirection(movementoptions.ToList(), request.PartyLocation);

                Debug.WriteLine(direction);

                return(Task.FromResult(new Turn(direction)));
            }
        }
コード例 #31
0
 protected virtual void Start()
 {
     moveHandler         = GetComponent <MoveHandler>();
     targeter            = GetComponent <Targeter>();
     entityController    = GetComponent <EntityControllerComp>();
     hasEntityController = (entityController != null);
     flagHandler         = GetComponent <FlagHandler>();
     avoider             = GetComponentInChildren <Avoider>();
     hasAvoider          = (avoider != null);
     linksToAttempt      = new List <MoveLink>();
 }
コード例 #32
0
    // Use this for initialization
    private void Awake()
    {
        this.draw = true;
        NavMeshPathGraph navMesh = NavigationManager.Instance.NavMeshGraphs[0];

        this.character = new DynamicCharacter(this.characterAvatar);
        this.Pedestrians = new List<GameObject>(GameObject.FindGameObjectsWithTag("Pedestrian")).ConvertAll(p => new Pedestrian(p));

        // Targeter
        TargeterComponent = new Targeter(this);

        // Decomposer
        DecomposerComponent = new Decomposer(this, navMesh, this.character);

        // TargetCollisionConstraint
        PathConstraints = new List<IConstraint>();
        PathConstraints.Add(new PedestrianAvoidanceConstraint(this, character, this.Pedestrians));
        PathConstraints.Add(new PathValidityCheckConstraint(this.character));

        // Movement Constraints
        MovementConstraints = new List<IConstraint>();
        StaticObstacleConstraint obsConstraint = new StaticObstacleConstraint(character)
        {
            AvoidMargin = 10f
        };

        MovementConstraints.Add(obsConstraint);

        if (CharacterInUse.Equals(CharacterType.Car))
        {
            Actuator = new CarActuator(this.character);
        }
        else if (CharacterInUse.Equals(CharacterType.Human))
        {
            Actuator = new HumanActuator(this.character);
        }
    }
コード例 #33
0
    // Update is called once per frame
    void Update()
    {
        Vector3 position;
        NavigationGraphNode node;

        if (Input.GetMouseButtonDown(0))
        {
            //if there is a valid position
            if (this.MouseClickPosition(out position))
            {
                //we're setting the end point
                //this is just a small adjustment to better see the debug sphere
                this.endDebugSphere.transform.position = position + Vector3.up;
                this.endDebugSphere.SetActive(true);
                //this.currentClickNumber = 1;
                this.endPosition = position;
                Targeter endGoal = new Targeter(position);
                this.draw = true;
                //initialize the search algorithm
                this.decomposer.InitializeSearch(this.character.KinematicData.position, endGoal.getTarget());
            }
        }

        //call the pathfinding method if the user specified a new goal
        if (this.decomposer.searchAlgorithm.InProgress)
        {
            this.decomposer.Search(this.character.KinematicData);
            this.currentSmoothedSolution = this.decomposer.getSmoothSolution();
            constraint = new Constraint
            {
                character = this.character,
                bots = this.bots
            };
            if(this.currentSmoothedSolution != null)
            {
                this.character.Movement = new Actuator()
                {
                    character = this.character,
                    constraint = this.constraint,
                    maxConstraintSteps = 20,
                    currentSmoothedSolution = this.currentSmoothedSolution
                };

            }

        }
        this.character.Update();
    }
コード例 #34
0
    public SteeringPipeline InitializeSteeringPipeline(DynamicCharacter orig, KinematicData dest)
    {
        //Pipeline
        SteeringPipeline pipe = new SteeringPipeline(orig.KinematicData)
        {
            MaxAcceleration = 15.0f

        };

        //Targeter
        Targeter MouseClickTargeter = new Targeter()
        {
            Target = dest
        };
        pipe.Targeters.Add(MouseClickTargeter);

        //Decomposer
        pathfindingDecomposer = new PathfindingDecomposer()
        {
            Graph = this.navMesh,
            Heuristic = new EuclideanDistanceHeuristic()
        };
        pipe.Decomposers.Add(pathfindingDecomposer);

        //Actuator - Default: Car behaviour
        Actuator actuator = new CarActuator()
        {
            MaxAcceleration = 15.0f,
            Character = orig.KinematicData
        };

        if (orig.GameObject.tag.Equals("Enemies"))
        {
            actuator = new TrollActuator()
            {
                MaxAcceleration = 10.0f,
                Character = orig.KinematicData
            };
        }
        pipe.Actuator = actuator;

        //Constraints
        foreach (DynamicCharacter troll in enemies)
        {
            TrollConstraint trollConstraint = new TrollConstraint()
            {
                Troll = troll,
                margin = 1.0f
        };
            pipe.Constraints.Add(trollConstraint);
        }

        MapConstraint mapConstraint = new MapConstraint()
        {
            chars = character,
            navMeshP = navMesh,
            margin = 1.0f
        };
        pipe.Constraints.Add(mapConstraint);

        return pipe;
    }