void Awake() { //if (!Unit.damages.ContainsKey(techName)) { // Dictionary<DamageType, int> damageDictionary = new Dictionary<DamageType, int>(); // foreach (UnitDamage unitDamage in damage) { // damageDictionary.Add(unitDamage.damageType, unitDamage.damageAmount); // } // Unit.damages.Add(techName, damageDictionary); //} foreach (UnitDamage unitDamage in damage) { _damage.Add(unitDamage.damageType, unitDamage.damageAmount); } if (!Unit.states.ContainsKey(techName)) { Dictionary <StateType, State <Unit> > stateDictionary = new Dictionary <StateType, State <Unit> >(); stateDictionary.Add(StateType.Idle, UnitStateManager.GetState(unitStates.idleState)); stateDictionary.Add(StateType.Move, UnitStateManager.GetState(unitStates.moveState)); stateDictionary.Add(StateType.Chase, UnitStateManager.GetState(unitStates.chaseState)); stateDictionary.Add(StateType.Attack, UnitStateManager.GetState(unitStates.attackState)); stateDictionary.Add(StateType.Flee, UnitStateManager.GetState(unitStates.fleeState)); Unit.states.Add(techName, stateDictionary); } stateMachine = new StateMachine <Unit>(this, GetState(StateType.Idle)); }
private void UpdatePlayerUnitManager(UnitStateManager manager) { if (manager.selectFlag && !PlayerUnitManager.Instance.SelectableUnits.Contains(this.gameObject)) { PlayerUnitManager.Instance.SelectableUnits.Add(this.gameObject); } else if (!manager.selectFlag && PlayerUnitManager.Instance.SelectableUnits.Contains(this.gameObject)) { PlayerUnitManager.Instance.SelectableUnits.Remove(this.gameObject); } }
private void Start() { Renderer renderer = this.GetComponent <Renderer>(); this.initialColor = renderer.material.color; this.manager = this.GetComponent <UnitStateManager>(); if (this.manager == null) { Debug.LogError(new System.NullReferenceException("There's something wrong with PlayerUnitManager.")); } }
private void Select(UnitStateManager manager) { Vector3 worldToCamPosition = Camera.main.WorldToScreenPoint(this.transform.position); worldToCamPosition.y = Screen.height - worldToCamPosition.y; manager.selectFlag = Selection.selectionArea.Contains(worldToCamPosition); if (!manager.selectFlag) { SelectClick(manager); } RefreshSelectFlag(manager); }
private void RefreshSelectFlag(UnitStateManager manager) { if (manager != null) { Renderer renderer = this.GetComponent <Renderer>(); if (renderer != null) { if (manager.selectFlag) { renderer.material.color = this.selectedColor; } else { renderer.material.color = this.initialColor; } } } }
private void SelectClick(UnitStateManager manager) { //This means unit is currently not within the selection box, check to see if it is being clicked on. Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition); RaycastHit hitInfo; if (Physics.Raycast(ray, out hitInfo)) { GameObject obj = hitInfo.collider.gameObject; Vector3 center = obj.transform.position + new Vector3(0f, 0.5f, 0f); float distance = Vector3.Distance(hitInfo.point, center); if (!obj.name.Equals("Floor")) { System.Guid identity = obj.GetComponent <UnitSelectable>().identity; if (distance <= 1f && identity.Equals(this.identity)) { manager.selectFlag = true; } } } }