示例#1
0
 public IEnumerator arrowAttack(GameObject enemy)
 {
     shooting     = true;
     unitMovement = unit.GetComponent <unitMovement>();
     while (enemy != null)
     {
         unitMovement.rotateCoroutine = StartCoroutine(unitMovement.turnTowards(unit, enemy.transform.position));
         if (Vector3.Distance(unit.transform.position, enemy.transform.position) > Mathf.Abs(range))
         {
             while (enemy != null && Vector3.Distance(unit.transform.position, enemy.transform.position) > Mathf.Abs(range))
             {
                 unit.transform.position = Vector3.MoveTowards(unit.transform.position, enemy.transform.position, unitMovement.speed * Time.deltaTime);
                 yield return(new WaitForEndOfFrame());
             }
         }
         attackCooldown = Time.time - lastAttackTime;
         if (attackCooldown >= 1f / attackSpeed && enemy != null)
         {
             lastAttackTime = Time.time;
             Vector3    Vo    = calculateVelocity(enemy.transform.position, unit.transform.GetChild(1).position, 1f);
             GameObject spawn = Instantiate(arrowPrefab, arrowSpawn.position, Quaternion.identity);
             Rigidbody  rb    = spawn.GetComponent <Rigidbody>();
             rb.transform.rotation = Quaternion.Euler(transform.rotation.x, transform.rotation.y, transform.rotation.z);
             rb.velocity           = Vo;
         }
         yield return(new WaitForEndOfFrame());
     }
     shooting = false;
     yield return(null);
 }
示例#2
0
 public IEnumerator attack(GameObject enemy)
 {
     isAttacking  = true;
     unitMovement = gameObject.GetComponent <unitMovement>();
     while (enemy != null)
     {
         unitMovement.rotateCoroutine = StartCoroutine(unitMovement.turnTowards(gameObject, enemy.transform.position));
         if (Vector3.Distance(transform.position, enemy.transform.position) > Mathf.Abs(range))
         {
             while (enemy != null && Vector3.Distance(transform.position, enemy.transform.position) > Mathf.Abs(range))
             {
                 transform.position = Vector3.MoveTowards(gameObject.transform.position, enemy.transform.position, unitMovement.speed * Time.deltaTime);
                 yield return(new WaitForEndOfFrame());
             }
         }
         attackCooldown = Time.time - lastAttackTime;
         if (attackCooldown >= 1f / attackSpeed && enemy != null)
         {
             lastAttackTime            = Time.time;
             enemyUnitMovement         = enemy.GetComponent <unitMovement>();
             enemyUnitMovement.health -= unitMovement.attack;
             // anim = GetComponent<Animation>();
             // anim.Play();
         }
         yield return(new WaitForEndOfFrame());
     }
     isAttacking = false;
     yield return(null);
 }
示例#3
0
 // Use this for initialization
 void Start()
 {
     emotion      = "normal";
     bodyRenderer = transform.Find("img/body").GetComponent <SpriteRenderer>();
     hairRenderer = transform.Find("img/hair").GetComponent <SpriteRenderer>();
     headRenderer = transform.Find("img/head").GetComponent <SpriteRenderer>();
     //shadowRenderer = transform.Find("img/shadow").GetComponent<SpriteRenderer>();
     mainImg    = transform.Find("img").gameObject;
     m_collider = GetComponent <BoxCollider>();
     //shadowRenderer.sprite = SpManager.Instance.LoadSprite("shadow");
     //bodyRenderer.color = m_manager.skinColor;
     //bodyRenderer.material.SetColor("_Color", m_manager.skinColor);
     if (hasHead)
     {
         //headRenderer.color = m_manager.skinColor;
         //headRenderer.material.SetColor("_Color", m_manager.skinColor);
     }
     else
     {
         headRenderer.enabled = false;
         hairRenderer.enabled = false;
     }
     m_umovement = GetComponent <unitMovement>();
     Update();
     m_manager.m_setFinish = true;
 }
示例#4
0
 public void spawn()
 {
     skinColor  = utils.Instance.getSkinColor(skinColorId);
     m_Instance = UnityEngine.Object.Instantiate(Resources.Load("Prefab/unit"), m_pos, new Quaternion(0, 0, 0, 0)) as GameObject;
     m_Instance.transform.parent = GameObject.Find("units").transform;
     m_movement = m_Instance.GetComponent <unitMovement>();
     m_skin     = m_Instance.GetComponent <unitSkin>();
     m_unitUI   = m_Instance.GetComponent <unitUI>();
     m_movement.init(this);
     m_skin.init(this);
     m_unitUI.init(this);
     ai.init(this);
 }
示例#5
0
 private void Stick(Collision enemy)
 {
     myBody.constraints = RigidbodyConstraints.FreezeAll;
     if (enemy.collider.tag == "Enemy")
     {
         crossbowman             = GameObject.Find("Crossbowman");
         unitMovement            = crossbowman.GetComponent <unitMovement>();
         totalEnemy              = enemy.gameObject;
         enemyMovement           = totalEnemy.GetComponent <unitMovement>();
         myBody.transform.parent = enemy.transform;
         enemyMovement.health   -= unitMovement.attack;
     }
 }
示例#6
0
    public void spawn(int x, int y)
    {
        Vector3 v = GSceneMap.Instance.gridToWorldPosition(new GridID(x, y));

        grid       = new GridID(x, y);
        m_pos      = v;
        m_Instance = UnityEngine.Object.Instantiate(Resources.Load("Prefab/unit"), v, new Quaternion(0, 0, 0, 0)) as GameObject;
        m_Instance.transform.parent = GameObject.Find("units").transform;
        m_movement = m_Instance.GetComponent <unitMovement>();
        m_skin     = m_Instance.GetComponent <unitSkin>();
        m_unitUI   = m_Instance.GetComponent <unitUI>();
        m_movement.init(this);
        m_skin.init(this);
        m_unitUI.init(this);
    }
示例#7
0
    // Update is called once per frame
    void Update()
    {
        if (Input.GetKey(swordsmanSpawnHotkey))
        {
            fTrue      = true;
            hotKey     = false;
            moveAttack = false;
        }

        if (Input.GetKey(crossbowmanSpawnHotkey))
        {
            hotKey     = true;
            fTrue      = false;
            moveAttack = false;
        }

        if (Input.GetKey(KeyCode.Tab))
        {
            moveAttack = true;
            fTrue      = false;
            hotKey     = false;
        }

        if (Input.GetMouseButtonDown(0))
        {
            mousePoint  = mouseMousePoint();
            startPos    = mousePoint;
            startPos.y -= .5f;
            mousePos1   = Camera.main.ScreenToViewportPoint(Input.mousePosition);
            if (fTrue)
            {
                Instantiate(SwordsmanPrefab, mousePoint, Quaternion.identity);
                fTrue = false;
            }
            else if (hotKey)
            {
                Instantiate(CrossbowmanPrefab, mousePoint, Quaternion.identity);
                hotKey = false;
            }
            else if (moveAttack)
            {
                moveAttack = false;
            }

            hitObject = isObjectSelected();

            if (Input.GetKey(KeyCode.LeftControl))
            {
                if (hitObject.tag == "unit")
                {
                    // UI changes to unit stats
                    foreach (GameObject obj in selectedObjects)
                    {
                        if (obj == hitObject)
                        {
                            hasSelected = true;
                        }
                    }

                    if (hasSelected == true)
                    {
                        selectedObjects.Remove(hitObject);
                        hasSelected = false;
                    }
                    else
                    {
                        selectedObjects.Add(hitObject);
                    }
                }
                else if (hitObject.tag == "enemy")
                {
                    // UI changes to enemy unit stats
                    selectedObjects.Clear();
                }
            }
            else
            {
                if (hitObject.tag == "unit")
                {
                    if (lastSelectedUnit == hitObject)
                    {
                        secondSelect = Time.time;
                        if (secondSelect - firstSelect <= 1)
                        {
                            // bool firstObject = true;
                            foreach (GameObject selectable in selectableObjects)
                            {
                                if (selectable.name == hitObject.name)
                                {
                                    selectedObjects.Add(selectable);
                                }
                            }
                        }
                    }
                    else
                    {
                        selectedObjects.Clear();
                        selectedObjects.Add(hitObject);
                        unitMovement = hitObject.GetComponent <unitMovement>();
                        unitMovement.setVisible();
                        currentlySelected += 1;
                    }
                    firstSelect      = Time.time;
                    lastSelectedUnit = hitObject;
                }
                else
                {
                    selectedObjects.Clear();
                    lastSelectedUnit = null;
                }
            }
        }

        if (Input.GetMouseButtonUp(0))
        {
            selectSquareImage.gameObject.SetActive(false);
        }

        if (Input.GetMouseButton(0))
        {
            if (!selectSquareImage.gameObject.activeInHierarchy)
            {
                selectSquareImage.gameObject.SetActive(true);
            }
            endPos = Input.mousePosition;

            Vector3 squareStart = Camera.main.WorldToScreenPoint(startPos);

            squareStart.z = 0f;

            Vector3 centre = (squareStart + endPos) / 2f;

            selectSquareImage.position = centre;

            float sizeX = Mathf.Abs(squareStart.x - endPos.x);
            float sizeY = Mathf.Abs(squareStart.y - endPos.y);

            selectSquareImage.sizeDelta = new Vector2(sizeX, sizeY);
            mousePos2 = Camera.main.ScreenToViewportPoint(Input.mousePosition);
            if (mousePos1 != mousePos2)
            {
                selectObjects();
            }
        }

        if (Input.GetMouseButtonDown(1))
        {
            if (hitObject != null)
            {
                if (selectedObjects.Count > 0)
                {
                    for (int i = 0; i < selectedObjects.Count; i++)
                    {
                        unitMovement = selectedObjects[i].GetComponent <unitMovement>();
                        unitMovement.findAction();
                    }
                }
            }
        }

        if (selectedObjects.Count != currentlySelected)
        {
            foreach (GameObject selectable in selectableObjects)
            {
                unitMovement = selectable.GetComponent <unitMovement>();
                unitMovement.setInvisible();
                currentlySelected = 0;
            }
            foreach (GameObject selected in selectedObjects)
            {
                unitMovement = selected.GetComponent <unitMovement>();
                unitMovement.setVisible();
                currentlySelected += 1;
            }
        }
    }