// Update is called once per frame void Update() { if (currentState != null) { currentState.Execute(); } if (Input.GetMouseButtonDown(0)) { Vector2 position = Camera.main.ScreenToWorldPoint(Input.mousePosition); RaycastHit2D scan = Physics2D.Raycast(position, Vector2.zero); if (scan) { StatefulEntity target = scan.transform.gameObject.GetComponent <StatefulEntity>(); if (target && target != PlayerController.Instance) { ChangeState(new ChaseAndAttackState(target)); } } } else if (Input.GetMouseButtonDown(1)) { Vector2 position = Camera.main.ScreenToWorldPoint(Input.mousePosition); ChangeState(new MoveCommandState(position)); } }
private void FindNearest() { companionHeading = Companion.transform.position - Shade.transform.position; playerHeading = Player.transform.position - Shade.transform.position; if (companionHeading.sqrMagnitude < playerHeading.sqrMagnitude) { Nearest = Companion; } else { Nearest = Player; } }
private void OnTriggerEnter2D(Collider2D collision) { StatefulEntity entity = collision.gameObject.GetComponent <StatefulEntity>(); if (entity) { if (entity.mortal && (friendlyFire || entity.gameObject.layer != attacker.gameObject.layer)) { entity.Die(); Destroy(gameObject); } } }
void TargetMoved(StatefulEntity target) { var previousNearest = Nearest; FindNearest(); if (Movement.IsMoving()) { if (Nearest != previousNearest || Nearest == target) { FindPathToNearest(); } } }
public ChaseAndAttackState(StatefulEntity target) { Target = target; }
public override RuleResult Create(Context context, ParameterList parameters, out StatefulEntity entity) { throw new NotImplementedException(); }