示例#1
0
    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));
    }
示例#2
0
 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);
     }
 }
示例#3
0
    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."));
        }
    }
示例#4
0
    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);
    }
示例#5
0
 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;
             }
         }
     }
 }
示例#6
0
    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;
                }
            }
        }
    }