public override State Tick(enemy_script cur_actor) { actor = cur_actor; sequence_memory_data temp_data = actor.get_data(data_id); int curChild = temp_data.running_child; if (curState != State.RUNNING) StartAction(); if (curChild >= children.Count) { curState = State.SUCCESS; EndAction(); } else { State childState = children[curChild].exec(actor); if (childState == State.SUCCESS) { curChild++; actor.set_running_child(curChild, data_id); } if (childState == State.FAILURE) { curState = State.FAILURE; EndAction(); } } return curState; }
public virtual void Open(enemy_script actor) { //Debug.Log("adding to list: " + instance); // Nodes are on last open list only if they are still running! if (actor.open_nodes.Contains(instance)) curState = State.RUNNING; }
public override State Tick(enemy_script actor) { // TODO: Actual attack logic. //MESSAGE.print("attack", -100, -70, 12, 2000); actor.shoot(); MESSAGE.report("penkele", 7); //Hit(actor); return curState; }
// Alternate update / traversal // TODO: rewrite enemy_script to keep track of necessary data (or separate class? why?) // TODO: use actor as function parameter! // previous open list saved to actor, current open in update // NB! All non-const data saved in actor instance, NOT in nodes! public void UpdateAI(enemy_script actor) { open_nodes.Clear(); rootnode.Tick(actor); //printlist(); //printlastlist(actor); ClosePrevious(actor); actor.SetOpenList(open_nodes); }
// public State exec(enemy_script actor) { Open(actor); if (Tick(actor) != State.RUNNING) // Tick modifies curState anyway Close(); return curState; }
public override State Tick(enemy_script actor) { actor.SetDirectionToPlayer(); actor.searching = true; //actor.SetLooking(false); // curState is always SUCCESS // TODO: define when failed return curState; }
public override State Tick(enemy_script actor) { if (actor.GetPlayerInRange()) { //MESSAGE.print("attack", -100, -70, 12, 2000); curState = State.SUCCESS; } else curState = State.FAILURE; return curState; }
public override State Tick(enemy_script actor) { actor.attack_timer -= _TIMER.deltatime(); if (actor.attack_timer <= 0) { actor.ResetCooldown(); curState = State.SUCCESS; } else curState = State.FAILURE; return curState; }
public override State Tick(enemy_script actor) { if (actor.GetPlayerSighted()) { curState = State.SUCCESS; actor.searching = true; } else curState = State.FAILURE; return curState; }
void Hit(enemy_script actor) { // TODO: laser attack! Also health should not be here (no can know if hit or miss). actor.hits++; if (actor.is_dead()) { MESSAGE.print("GAME OVER...", -160, -90, 1, 65); _TIMER.set_pause(true); } //status.laser.shoot_beam(new Vector3(status.player_last_seen.x, 0, status.player_last_seen.y), new Vector3(status._position.x, 0, status._position.y)); //status.last_attack = _TIMER.time(); }
public override State Tick(enemy_script actor) { for (int i = 0; i < children.Count; ++i) { curState = children[i].exec(actor); if (curState != State.FAILURE) { return curState; } } return curState; }
// Close nodes previously left open, if priority branch interrupts // Called after every tick private void ClosePrevious(enemy_script _actor) { for (int i = 0; i < _actor.open_nodes.Count; ++i) { if (i < open_nodes.Count) { if (open_nodes[i] != _actor.open_nodes[i]) { Debug.Log("ending node " + _actor.open_nodes[i]); _actor.open_nodes[i].EndAction(); } } else _actor.open_nodes[i].EndAction(); } }
public override State Tick(enemy_script actor) { cur_actor = actor; //MESSAGE.print("search", -100, -70, 12, 2000); if (curState != State.RUNNING) StartAction(); if (actor.isnotnear()) ///// TODO: Better condition!!!! { curState = State.RUNNING; actor.SetDirectionToPlayer(); } else EndAction(); return curState; }
public override State Tick(enemy_script actor) { cur_actor = actor; //MESSAGE.print("lookout", -100, -70, 12, 2000); actor.current_angle_in_degrees += _TIMER.deltatime() * 90.0f; if (curState != State.RUNNING) StartAction(); else if (actor.current_angle_in_degrees >= actor.end_angle) { EndAction(); } else actor.SetDirection(actor.current_angle_in_degrees); return curState; }
public override void Open(enemy_script actor) { if (!status.open_nodes.Contains(instance)) status.open_nodes.Add(instance); base.Open(actor); }
public abstract State Tick(enemy_script actor);
public override State Tick(enemy_script actor) { //MESSAGE.print("idle", -100, -70, 12, 2000); return curState; }
// constructor for setup public gossip_leaf(tree_script world_status, enemy_script actor) { status = world_status; curState = State.FAILURE; instance = this; }
public override State Tick(enemy_script actor) { return curState; }
void printlastlist(enemy_script actor) { Debug.Log("last open list:"); foreach (general_node g in actor.open_nodes) Debug.Log(g); }
public override State Tick(enemy_script actor) { children[0].exec(actor); return State.SUCCESS; }