- Home /
Can't target another player using mouseButtonUp
Hi, I have a game with numerous agents that can be selected when they are clicked on. When this happens they become the player (the player's agent variable is replaced with them and the agent becomes the player's parent). I am trying to implement a system where you drag their destination over another agent to "Target" them.
To do this I am actually targeting from within the target's My class (a class that holds references to all the player's components and variables) so I am putting the agent into a function that is operated by the player's current agent. This seems to work in theory, but in Unity it is only allowing me to target the first agent in the hierarchy, and none of the others. But all the agents are identical instances of the agent prefab, generated at the start of the game.
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
public class Agent : Grammar {
public Physical physical;
public Agent agent;
void Update() {
float distanceFromMouse = the.Distance(this.transform.position, Camera.main.ScreenToWorldPoint(Input.mousePosition));
if (Input.GetMouseButtonDown(0)) {
if (distanceFromMouse < 1f) {
the.player.agent = this;
the.player.transform.parent = this.transform;
}
}
if (Input.GetMouseButtonUp (0)) {
if (distanceFromMouse < 1f) {
if (the.player.agent != this && the.player.agent is Agent) {
the.player.agent.physical.action.Target (agent);
}
}
the.player.agent = null;
}
if (the.player.agent == agent)
physical.goal = Camera.main.ScreenToWorldPoint (Input.mousePosition);
else if (physical.hasTarget)
physical.goal = physical.target.transform.position;
}
}
public void Target (My target) {
my.physical.target = target;
my.physical.hasTarget = true;
foreach (My other in the.agents.GetComponentsInChildren<My>()) {
if (other.physical.targetters.Contains (my))
other.physical.targetters.Remove (my);
}
target.physical.targetters.Add (my);
target.physical.targetted = true;
}
Here is my Grammar class that everything inherits from so they can access the global The class.
using UnityEngine;
using System.Collections;
public class Grammar : MonoBehaviour {
public A a;
public The the;
}
Here is my The (global utility) class
using UnityEngine;
using System.Collections;
public class The : MonoBehaviour {
public Grid grid;
public GameObject world;
public Player player;
public GameObject agents;
public float Distance(Vector2 from, Vector2 to) { return (Heading(from,to)).magnitude; }
public Vector2 Heading (Vector2 from, Vector2 to) { return to - from; }
}
Your answer
Follow this Question
Related Questions
my adding target script wont stop adding targets. 2 Answers
Distribute terrain in zones 3 Answers
Health Script/Targeting system c# 2 Answers
Multiple Cars not working 1 Answer
Attaching objects on collision 1 Answer