Пример #1
0
 public static void DetachWorm(WormMain worm)
 {
     playerInfo.DetachWorm(worm);
 }
Пример #2
0
 //Worm
 public static void AttachWorm(WormMain worm)
 {
     playerInfo.AttachWorm(worm);
 }
Пример #3
0
    void FixedUpdate()
    {
        ////////////
        //AI LOGIC//
        ////////////
        if (hitstunTimer <= 0.0f)
        {
            if (state == State.idle || state == State.spotted || state == State.attached || state == State.running)
            {
                ////////////
                //MOVEMENT//
                ////////////
                if (state == State.idle || state == State.running)
                {
                    head.transform.Translate(head.transform.forward * Time.fixedDeltaTime * moveSpeed, Space.World);
                }
                else if (state == State.spotted || state == State.attached)
                {
                    //Navigate towards target
                    Quaternion temp = head.transform.rotation;
                    head.transform.LookAt(target);
                    head.transform.rotation = Quaternion.Lerp(temp, head.transform.rotation, spottedRotateSpeed * Time.fixedDeltaTime);
                    head.transform.Translate(head.transform.forward * Time.fixedDeltaTime * spottedMoveSpeed, Space.World);

                    //If target is far enough away, break pursuit
                    if (target && Vector2.Distance(head.transform.position, target.position) > maxChaseDistance)
                    {
                        if (spotDelayTimer > 0.0f)
                        {
                            spotDelayTimer -= Time.fixedDeltaTime;
                        }
                        else
                        {
                            SetIdle();
                        }
                    }
                }

                HandleWallDetection();

                //Handle snake sections
                Transform lastT = null;
                foreach (Transform t in body.transform)
                {
                    if (!lastT)
                    {
                        t.position = Vector3.Lerp(t.position, head.transform.position - head.transform.forward, Time.fixedDeltaTime * snakeSpeed);
                        t.rotation = Quaternion.Lerp(t.rotation, head.transform.rotation, Time.fixedDeltaTime * snakeRotateSpeed);
                    }
                    else
                    {
                        t.position = Vector3.Lerp(t.position, lastT.position - lastT.transform.forward, Time.fixedDeltaTime * snakeSpeed);
                        t.rotation = Quaternion.Lerp(t.rotation, lastT.rotation, Time.fixedDeltaTime * snakeRotateSpeed);
                    }
                    lastT = t;
                }

                if (GameManager.IsDebugEnabled())
                {
                    if (Input.GetKey(KeyCode.LeftArrow))
                    {
                        head.transform.Rotate(Time.fixedDeltaTime * rotateSpeed, 0.0f, 0.0f);
                    }
                    else if (Input.GetKey(KeyCode.RightArrow))
                    {
                        head.transform.Rotate(Time.fixedDeltaTime * -rotateSpeed, 0.0f, 0.0f);
                    }
                }

                //////////
                //DAMAGE//
                //////////
                if (state == State.attached)
                {
                    if (stealTimer > 0.0f)
                    {
                        stealTimer         -= Time.fixedDeltaTime;
                        spottedRotateSpeed += Time.fixedDeltaTime;
                    }
                    else
                    {
                        Transform  temp            = null;
                        WormMain   newHead         = null;
                        WormPacket packet          = null;
                        Vector3    tempPosition    = Vector3.zero;
                        bool       packetAvailable = false;

                        PlayerManager.Damage(10.0f, true);
                        for (int i = 0; i <= numOfSections; i++)
                        {
                            packetAvailable = PlayerManager.DecrementNumOfLoosePackets();

                            //Make the fleeing worm head
                            temp    = target;
                            newHead = ((GameObject)Instantiate(Resources.Load(ResourcePaths.SnakeHeadOnlyPrefab),
                                                               temp.position,
                                                               temp.rotation)).GetComponent <WormMain>();
                            tempPosition = newHead.transform.position + new Vector3(Random.Range(-1.0f, 1.0f), Random.Range(-1.0f, 1.0f), 0.0f);
                            newHead.GetHead().transform.LookAt(tempPosition);
                            newHead.GetHead().transform.position = tempPosition;
                            newHead.SetRunning();

                            //Make a packet follow it if one was available
                            if (packetAvailable)
                            {
                                temp   = newHead.transform;
                                packet = ((GameObject)Instantiate(Resources.Load(ResourcePaths.SnakePacketPrefab), target.position, target.rotation)).GetComponent <WormPacket>();
                                newHead.SetPacket(packet.gameObject);
                                packet.SetTarget(newHead.GetHead().transform);
                            }
                        }
                        PlayerManager.DetachWorm(this);
                        Destroy(gameObject);
                    }
                }
            }
        }
        else
        {
            hitstunTimer -= Time.fixedDeltaTime;
        }

        //flips transform in Y direction if passes extreme angles on X rotation
        if (Vector3.Dot(head.transform.forward, Vector3.left) > 0)
        {
            head.transform.localScale = new Vector3(head.transform.localScale.x, 1.0f, head.transform.localScale.z);
        }
        else
        {
            head.transform.localScale = new Vector3(head.transform.localScale.x, -1.0f, head.transform.localScale.z);
        }
    }
Пример #4
0
 public void DetachWorm(WormMain worm)
 {
     worms.Remove(worm);
 }
Пример #5
0
 //Worms
 public void AttachWorm(WormMain worm)
 {
     worms.Add(worm);
 }
Пример #6
0
 void Awake()
 {
     worm = transform.parent.parent.gameObject.GetComponent <WormMain>();
 }