public void AddForeignKeyConstraint <TForeignTableKey, TForeignTable>( Table <TForeignTableKey, TForeignTable> foreignTable, Expression <Func <TRow, TForeignTableKey> > foreignKeySelector) { var ourKeySelector = foreignKeySelector.Compile(); _constraintManager.RegisterInsertUpdateConstraint(ourRow => { var key = ourKeySelector(ourRow); var foreignRecordsAtOurKey = foreignTable._clusteredIndex.Seek(SeekTarget.From(key), Retrieval.Default); if (!foreignRecordsAtOurKey.Any()) { throw new Exception($"Key '{key}' does not exist in foreign table"); } }); CreateIndex(foreignKeySelector); foreignTable._constraintManager.RegisterDeleteConstraint(theirPrimaryKey => { var index = _indexManager.FindIndex <TForeignTableKey, IIndex <TForeignTableKey, TRow> >(foreignKeySelector).Value; var ourRecordsAtTheirKey = index.Seek(SeekTarget.From(theirPrimaryKey), Retrieval.Default); if (ourRecordsAtTheirKey.Any()) { throw new Exception($"Can't delete '{theirPrimaryKey}' as a foreign table refers to it"); } }); }
public Action Process() { if (human.LastHitBy != null && human.Target != human.LastHitBy) { if (human.Think.CurrentAction().GetType() == typeof(Defending) || human.Think.CurrentAction().GetType() == typeof(SeekTarget)) { human.Think.RemoveAction(); } human.Target = human.LastHitBy.transform; return(human.Think.CurrentAction().GetType() != typeof(Defending) ? new Defending(human) : null); } if (FuzzyGetDesirabilityEat(human.Stats.Hunger, human.Stats.Money, human.Stats.Health) > 85 && human.Think.CurrentAction().GetType() != typeof(GoingToEat)) { return(new GoingToEat(human)); } if (FuzzyGetDesirabilitySeek(human.Stats.Hunger, human.Stats.Money) > 85) { if (human.Think.CurrentAction().GetType() != typeof(SeekTarget)) { SeekTarget seekTarget = new SeekTarget(human); return(seekTarget); } } return(null); }
public static IEnumerable <TRow> Pick <TKey, TRow>(SeekTarget <TKey> seekTarget, int indexSize, Func <IEnumerable <TRow> > seek, Func <IEnumerable <TRow> > scan) { //15% lifted from the literature on b+ trees, its almost certainly not right for us but this is illustrative return(seekTarget.Keys !.Length / (double)indexSize <= 0.15 ? seek() : scan()); }
private void Start() { timer = 0; seekTarget = GetComponent <SeekTarget>(); //setting the emotional state for agents to be random on start //emotionalState = (EmotionalStates)UnityEngine.Random.Range(0, System.Enum.GetValues(typeof(EmotionalStates)).Length); }
private IEnumerable <TRow> RangedScan(SeekTarget <TIndexKey> seekTarget, bool reverse) { return(_map.Range(seekTarget.Min, seekTarget.Max, reverse) .Where(d => seekTarget.Contains(d.Key)) .SelectMany(group => group.Value.GetItems(false) .Select(r => r.Row))); }
public IEnumerable <TRow> Seek(SeekTarget <TIndexKey> seekTarget, Retrieval retrieval) { seekTarget.Prepare(_map.KeyComparer, retrieval); return(QueryAnalyser.Pick(seekTarget, _map.Count, () => _map.SeekMany(seekTarget.Keys !).Select(s => s.Value.Row), () => RangedScan(seekTarget, retrieval.Reverse))); }
// Start is called before the first frame update void Start() { wander = GetComponent <SteeringWander>(); seek = GetComponent <SeekTarget>(); shoot = GetComponent <Shoot>(); patrol = GetComponent <PatrolAgent>(); flee = GetComponent <Flee>(); }
public IEnumerable <TRow> Seek(SeekTarget <TIndexKey> seekTarget, Retrieval retrieval) { seekTarget.Prepare(_map.KeyComparer, retrieval); return(QueryAnalyser.Pick(seekTarget, _map.Count, () => TrueSeek(seekTarget), () => RangedScan(seekTarget, retrieval.Reverse))); }
public IEnumerable <TOut> QueryWithIndexSeek <TPredicateKey, TOut>( Expression <Func <TRow, TPredicateKey> > indexSelector, Func <TRow, TOut> select, IEnumerable <TPredicateKey> fromKeys, int?skip = null, int?take = null, bool reverse = false) { var index = _indexManager.FindIndex(indexSelector); if (!index.HasValue) { throw new Exception($"No index registered for key: '{Expressions.GetMemberName(indexSelector)}'"); } return(index.Value.Seek(SeekTarget.From(fromKeys), new Retrieval(skip, take, reverse)) .Select(select) .ToArray() .AsEnumerable()); }
private void InitFSMSystem() { fsm = new FsmSystem(); SeekTarget seekTarget = new SeekTarget(this, fsm, anim); seekTarget.AddTransition(Transition.MoveToTarget, StateID.MoveToTarget); seekTarget.AddTransition(Transition.Attack, StateID.Attack); MoveToTarget moveToTarget = new MoveToTarget(this, fsm, anim); moveToTarget.AddTransition(Transition.SeekTarget, StateID.SeekTarget); moveToTarget.AddTransition(Transition.Attack, StateID.Attack); AttackTarget attackTarget = new AttackTarget(this, fsm, anim); attackTarget.AddTransition(Transition.SeekTarget, StateID.SeekTarget); attackTarget.AddTransition(Transition.MoveToTarget, StateID.MoveToTarget); fsm.AddState(seekTarget); fsm.AddState(moveToTarget); fsm.AddState(attackTarget); }
private IEnumerable <TRow> RangedScan(SeekTarget <TIndexKey> seekTarget, bool reverse) { return(_map.Range(seekTarget.Min, seekTarget.Max, reverse) .Where(d => seekTarget.Contains(d.Key)) .Select(d => d.Value.Row)); }
private IEnumerable <TRow> TrueSeek(SeekTarget <TIndexKey> seekTarget) => _map.SeekMany(seekTarget.Keys !)