Example #1
0
    // Update is called once per frame
    void Update()
    {
        alpha -= 0.05f;
        GameObject player = GameObject.FindGameObjectWithTag("Player");

        if (PlayerProfile.Instance().ControlScheme == 2)
        {
            Destroy(this.gameObject);
        }
        if (player)
        {
            SnakeState playerSnake = player.GetComponent <SnakeState>();
            this.transform.localScale    = playerSnake.GetSnakeThickness() * Vector3.one * 2.0f;
            this.transform.parent        = player.transform;
            this.distance                = Mathf.Log(1 + inputManager.TargetDirection().magnitude * 0.007f);
            this.transform.localPosition = new Vector3(0.0f, heightOffPlane, distance);
            //playerSnake.SnakeFogDistance()

            /*
             * if (VRSettings.enabled)
             * {
             *  this.gameObject.SetActive(true);
             * }
             * else
             * {
             *  this.gameObject.SetActive(Input.touchCount > 0);
             * }*/
            if (Input.anyKey)
            {
                alpha = 1.0f;
            }
        }
        this.GetComponent <MeshRenderer>().material.color = new Color(1, 1, 1, alpha);
    }
Example #2
0
    public void EnableCloseObjects()
    {
        GameObject player = GameObject.FindGameObjectWithTag("Player");

        if (!player)
        {
            return;
        }
        SnakeState playerSnake = player.GetComponent <SnakeState>();

        List <GameObject> objectsToRemove = new List <GameObject>();

        foreach (GameObject obj in this.inactiveObjectsToCheck)
        {
            if (Vector2.Distance(obj.transform.position, playerSnake.transform.position) < playerSnake.SnakeFogDistance() * radiusFactor)
            {
                obj.SetActive(true);
                objectsToRemove.Add(obj);
            }
        }

        foreach (GameObject obj in objectsToRemove)
        {
            inactiveObjectsToCheck.Remove(obj);
        }
    }
Example #3
0
    private void GenerateLocalSnake()
    {
        SnakeState playerSnake = Instantiate <SnakeState> (this.localSnakePrefab);

        playerSnake.transform.position = this.gameWorld.GenerateRandomWorldPoint(0, this.gameWorld.worldRadius / 5.0f);
        playerSnake.name = PlayerProfile.Instance().Nickname;
    }
Example #4
0
    private void ExitState(SnakeState state)
    {
        switch (state)
        {
        case SnakeState.Idle:
            IdleExitState();
            break;

        case SnakeState.Move:
            MoveExitState();
            break;

        case SnakeState.OnRail:
            OnRailExitState();
            break;

        case SnakeState.Shrink:
            ShrinkExitState();
            break;

        case SnakeState.Die:
            DieExitState();
            break;
        }
    }
Example #5
0
    private void ShrinkState()
    {
        DebugExecute("Shrink");

        // Move head along skeleton (from head to tail)
        float disToTarget = Mathf.Abs(targetCell.relPos - body.head.relPos);

        body.UpdateBodyShrink(-(disToTarget / 5f));

        // Destroy cells along skeleton
        if (body.head.next != null && body.head.distanceToNext < 0.1f)
        {
            body.DestroyCell(body.head.next);
        }

        // If arrived at target position,
        if (disToTarget < 0.1f)
        {
            // Trim skeleton
            body.skeleton.ShaveStart(body.correction + targetCell.relPos);

            // Reset correction to heads position
            body.correction = -body.head.relPos;

            // Switch state
            currentState = dying ? SnakeState.Die : SnakeState.Move;
        }
    }
    public override void Destroy()
    {
        // Find closest snake
        // This is a hack
        GameObject[] snakes       = GameObject.FindGameObjectsWithTag("Snake");
        GameObject   closestSnake = GameObject.FindGameObjectWithTag("Player");
        float        minDistance  = Vector2.Distance(this.food.transform.position, closestSnake.transform.position);

        foreach (GameObject snake in snakes)
        {
            if (snake.activeInHierarchy)
            {
                float dist = Vector2.Distance(this.food.transform.position, snake.transform.position);
                if (dist < minDistance)
                {
                    dist         = minDistance;
                    closestSnake = snake;
                }
            }
        }
        SnakeState closestSnakeState = closestSnake.GetComponent <SnakeState>();

        if (minDistance < closestSnakeState.GetSnakeThickness() * GameConfig.EAT_DISTANCE_RATIO * 2.0f)
        {
            food.CollectFood(closestSnakeState);
        }
        else
        {
            Destroy(this.gameObject);
        }
    }
Example #7
0
    private void EnterState(SnakeState state)
    {
        // print("EnterState: " + state);
        switch (state)
        {
        case SnakeState.Idle:
            IdleEnterState();
            break;

        case SnakeState.Move:
            MoveEnterState();
            break;

        case SnakeState.OnRail:
            OnRailEnterState();
            break;

        case SnakeState.Shrink:
            ShrinkEnterState();
            break;

        case SnakeState.Die:
            DieEnterState();
            break;
        }
    }
Example #8
0
 private void GenerateAISnakes()
 {
     for (int i = 0; i < maxSnakes - 1; i++)
     {
         SnakeState snake = Instantiate <SnakeState> (this.localAISnakePrefab);
         snake.SetRandomStartBackbone(this.gameWorld.GenerateRandomWorldPoint(this.gameWorld.worldRadius / 4.0f, this.gameWorld.worldRadius));
         snake.snakeSkinID = Random.Range(0, GameConfig.NUM_SNAKE_SKINS);
     }
 }
Example #9
0
 void GetReferences()
 {
     if (!GameObject.FindGameObjectWithTag("Player"))
     {
         return;
     }
     this.playerSnake = GameObject.FindGameObjectWithTag("Player").GetComponent <SnakeState>();
     this.gameWorld   = GameObject.FindGameObjectWithTag("World").GetComponent <GameWorld>();
 }
Example #10
0
    private void CreateSnakeBodyCollider()
    {
        this.snakeBody = new GameObject();

        this.snakeBody.tag = "SnakeBody";
        this.snakeBody.transform.position = this.snakeState.GetHeadPosition();
        this.snakeBody.AddComponent <SnakeStateReference>().snakeState = this.snakeState;
        this.snakeBodyCollider           = this.snakeBody.AddComponent <BoxCollider2D>();
        this.snakeBodyCollider.isTrigger = true;
    }
Example #11
0
    void AtrociousRotateFunctionToKeepToDeadline()
    {
        GameObject player = GameObject.FindGameObjectWithTag("Player");

        if (player)
        {
            SnakeState playerSnake = player.GetComponent <SnakeState>();
            playerSnake.TurnTowards(inputManager.TargetDirection(), Time.deltaTime * 8);
        }
    }
Example #12
0
    public bool IsRunInto(SnakeState other)
    {
        if (other == this)
        {
            return(false);
        }

        float distanceToOther = other.DistanceFrom(this.GetHeadPosition());

        return(distanceToOther < other.GetSnakeThickness() / 2.0f);
    }
    // Update is called once per frame
    void Update()
    {
        GameObject snake = GameObject.FindGameObjectWithTag("Player");

        if (snake)
        {
            this.playerSnake                   = snake.GetComponent <SnakeState>();
            this.transform.localScale          = Vector3.one * 0.2f * this.playerSnake.SnakeFogDistance();
            this.gameObject.transform.position = this.playerSnake.transform.position + Vector3.back * 0.5f;
        }
    }
Example #14
0
    // Use this for initialization
    void Start()
    {
        MovementDirection = Vector2.right;

        TailPieces       = new List <GameObject>();
        UnusedTailPieces = new Stack <GameObject>();

        ResetSnake();

        CurrentState = SnakeState.Dead;
    }
Example #15
0
        public SnakeGameState(GameSize gameSize, int initialSnakeLength, bool canSnakeGrow) : base(gameSize)
        {
            SnakeState = new SnakeState(initialSnakeLength, canSnakeGrow);
            Walls      = new List <BitArray>(gameSize.Height);
            for (int i = 0; i < gameSize.Height; i++)
            {
                Walls.Add(new BitArray(gameSize.Width));
            }

            Bonus = GenerateBonus();
        }
Example #16
0
    void FollowSnake()
    {
        GameObject snake = GameObject.FindGameObjectWithTag("Player");

        if (snake)
        {
            snakeToTrack       = snake.GetComponent <SnakeState>();
            transform.position = Vector3.Lerp(this.transform.position, snakeToTrack.transform.position, LerpAmount) + Vector3.back;
        }
        else
        {
            snakeToTrack = null;
        }
    }
    // Update is called once per frame
    void Update()
    {
        GameObject snake = GameObject.FindGameObjectWithTag("Player");

        if (snake)
        {
            this.playerSnake = snake.GetComponent <SnakeState>();
            Vector2 normalizedPos = playerSnake.transform.position / gameWorld.worldRadius;

            RectTransform transform       = this.GetComponent <RectTransform>();
            RectTransform parentTransform = this.gameObject.transform.parent.GetComponent <RectTransform>();
            transform.anchoredPosition = normalizedPos * (parentTransform.rect.width / 2.0f);
        }
    }
Example #18
0
    public void ResetSnake()
    {
        MovementDirection = Vector2.up;

        transform.position = Vector3.zero;
        OldHeadPosition    = Vector2.zero;

        RemoveTailFromSnake();

        CurrentState = SnakeState.Alive;

        TimeSinceMove = 0d;

        FailurePoint = "";
    }
Example #19
0
    public void SetSnakeData(SnakeState state)
    {
        this.head.transform.position = state.headPosition;
        this.currentDirection        = state.direction;
        this.links = state.linkPositions.Select(x => Instantiate(snakeTailPrefab, x, Quaternion.identity, this.transform).GetComponent <SnakeTail>()).ToList();

        if (state.isDead == false)
        {
            SnakeDieEvent.DoReverse(this);
        }
        else
        {
            SnakeDieEvent.DoExecute(this);
        }
    }
Example #20
0
	private void HandleSnakeState()
	{
		if (state == SnakeState.Overloaded)
		{
			overloadCooldownLeft -= Time.deltaTime;
			if (overloadCooldownLeft <= 0)
			{
				state = SnakeState.Normal;
				overloadCurrent = 0;
				if (OnOverloadEnd != null)
				{
					OnOverloadEnd();
				}
			}
		}
	}
Example #21
0
    void FollowSnake()
    {
        GameObject snake = GameObject.FindGameObjectWithTag("Player");

        if (snake)
        {
            snakeToTrack         = snake.GetComponent <SnakeState>();
            this.targetPosition  = snakeToTrack.transform.position;
            this.targetPosition += Vector3.back * SCALE_FACTOR * snakeToTrack.GetSnakeThickness();
            transform.position   = Vector3.Lerp(this.transform.position, targetPosition, LerpAmount);
        }
        else
        {
            snakeToTrack = null;
        }
    }
Example #22
0
	private void Head_OnCollectableCollision(int obj)
	{
		this.ChangeSpeed(snakeSpeedIncrease);

		overloadCurrent++;

		if (overloadCurrent == overloadTreshhold && state != SnakeState.Overloaded && state != SnakeState.Charged)
		{
			state = SnakeState.Charged;
			overloadCooldownLeft = overloadCooldown;

			if (OnChargingComplete != null)
			{
				OnChargingComplete();
			}
		}
	}
    // Update is called once per frame
    void Update()
    {
        GameObject player = GameObject.FindGameObjectWithTag("Player");

        GameObject[] enemies = GameObject.FindGameObjectsWithTag("Snake");
        if (!player)
        {
            return;
        }

        SnakeState[] snakes = new SnakeState[enemies.Length + 1];
        for (int i = 0; i < enemies.Length; i++)
        {
            snakes[i] = enemies[i].GetComponent <SnakeState>();
        }
        snakes[enemies.Length] = player.GetComponent <SnakeState>();
        Array.Sort(snakes, this.snakeScoreComparer);

        int playerRank = -1;
        int j          = 1;

        foreach (SnakeState snake in snakes)
        {
            if (snake.gameObject == player)
            {
                playerRank = j;
            }
            j++;
        }

        for (int i = 0; i < this.scoreBoardState.maxScoreboardPlayers; i++)
        {
            if (i < snakes.Length)
            {
                this.scoreBoardState.SetEntry(i, snakes[i].name, snakes[i].score);
            }
            else
            {
                this.scoreBoardState.SetEntry(i, "-", 0);
            }
        }

        this.scoreBoardState.SetPlayerRank(playerRank);
    }
Example #24
0
    private void DieState()
    {
        DebugExecute("Die");

        // // Switch state
        // currentState = SnakeState.Move;

        // If players' snake dies, it's game over
        if (name == "Player Snake")
        {
            GameManager.INSTANCE.currentState = GameManager.GameState.GameOver;
            currentState = SnakeState.Idle;
        }

        // If any other snake dies, remove it from game
        else
        {
            Destroy(gameObject);
        }
    }
Example #25
0
    private void DisableDistantObjects()
    {
        GameObject player = GameObject.FindGameObjectWithTag("Player");

        if (!player)
        {
            return;
        }
        SnakeState playerSnake = player.GetComponent <SnakeState>();

        GameObject[] foodObjects = GameObject.FindGameObjectsWithTag("Food");
        foreach (GameObject food in foodObjects)
        {
            if (Vector2.Distance(food.transform.position, playerSnake.transform.position) > playerSnake.SnakeFogDistance() * 0.01f)
            {
                food.SetActive(false);
                inactiveObjectsToCheck.Add(food);
            }
        }
    }
Example #26
0
	private void HandlePause()
	{
		if (gameState == GameState.Paused)
		{
			if (Input.GetKeyDown(KeyCode.DownArrow))
			{
				snakeBody[0].nextDirection = Direction.Down;
				snakeBody[0].moveSpeed = currentSpeed;
				gameState = GameState.Playing;
			}
			if (Input.GetKeyDown(KeyCode.UpArrow))
			{
				snakeBody[0].nextDirection = Direction.Up;
				snakeBody[0].moveSpeed = currentSpeed;
				gameState = GameState.Playing;
			}
			if (Input.GetKeyDown(KeyCode.RightArrow))
			{
				snakeBody[0].nextDirection = Direction.Right;
				snakeBody[0].moveSpeed = currentSpeed;
				gameState = GameState.Playing;
			}
			if (Input.GetKeyDown(KeyCode.LeftArrow))
			{
				snakeBody[0].nextDirection = Direction.Left;
				snakeBody[0].moveSpeed = currentSpeed;
				gameState = GameState.Playing;
			}

			if (overloadCooldownLeft > 0 && (state != SnakeState.Charged || state != SnakeState.Overloaded))
			{
				if (overloadCooldownLeft < overloadCooldown)
				{
					state = SnakeState.Overloaded;
				}
			}
		}
	}
Example #27
0
 private void SetState(SnakeState state)
 {
     this.state = state;
     this.stateTime = 0;
 }
Example #28
0
 void Awake()
 {
     this.snakeState = this.GetComponent <SnakeState>();
     //this.snakeState.head.AddComponent<NetworkSnakeHeadController>().snakeState = this.snakeState;
 }
Example #29
0
 public void StartMoving()
 {
     snakeState = new SnakeMooving();
 }
Example #30
0
 public Player()
 {
     snakeState = new SnakeStopped();
 }
Example #31
0
        public override bool Update()
        {
            if (Orbs.Count > 0)
            {
                if (tailCount > Orbs.Count)
                {
                    tailCount = Orbs.Count;
                    Orbs.Last().Invulnerable = false;
                    Orbs.Last().nBuild.PolyColor = Color.Red;
                    this.speed *= 1.5f;
                }
                Orbs.Last().nBuild.PolyColor = Color.Red;
                int toRemove = -1;
                foreach (Enemy e in Orbs)
                {
                    e.Update();
                    if (e.health <= 3)
                        toRemove = Orbs.IndexOf(e);
                }
                if (toRemove != -1)
                    Orbs.RemoveAt(toRemove);
            }
            else
                this.Invulnerable = false;
            int changetime = rand.Next(1,3);
            stateTime += Time.Delta;
            switch (state)
            {
                case SnakeState.Up :{
                     move = new Vector2(0,-1);
                     addTailV(move);
                     if (new WallCollider(new Vector2(0, -Screen.Y), WallDirection.Up).Contains(Position) || stateTime > changetime) {
                         lastState = state;
                        switch (rand.Next(0,2))
                        {
                            case 0:
                                SetState(SnakeState.Left);
                                break;
                            case 1:
                                SetState(SnakeState.Right);
                                break;
                            case 2:
                                SetState(SnakeState.Down);
                                break;
                        } }
                }break;
                case SnakeState.Down :{
                    move = new Vector2(0, 1);
                    addTailV(move);
                    if (new WallCollider(new Vector2(0, Screen.Y), WallDirection.Down).Contains(Position) || stateTime > changetime)
                    {
                        lastState = state;
                        switch (rand.Next(0, 3))
                        {
                            case 0:
                                SetState(SnakeState.Left);
                                break;
                            case 1:
                                SetState(SnakeState.Right);
                                break;
                            case 2:
                                SetState(SnakeState.Up);
                                break;
                        }
                    }
                }break;

                case SnakeState.Left:{
                    move = new Vector2( -1,0);
                    addTailV(move);
                    if (new WallCollider(new Vector2(-Screen.X, 0), WallDirection.Left).Contains(Position) || stateTime > changetime)
                    {

                        switch (rand.Next(0, 3))
                            {
                                case 0:
                                    SetState(SnakeState.Up);
                                    break;
                                case 1:
                                    SetState(SnakeState.Down);
                                    break;
                                case 2:
                                    SetState(SnakeState.Right);
                                    break;
                            }

                        }
                }break;
                case SnakeState.Right:{
                    move = new Vector2(1, 0);
                    addTailV(move);
                    if (new WallCollider(new Vector2(Screen.X, 0), WallDirection.Right).Contains(Position) || stateTime > changetime)
                    {
                        lastState = state;
                        switch (rand.Next(0, 3))
                        {
                            case 0:
                                SetState(SnakeState.Up);
                                break;
                            case 1:
                                SetState(SnakeState.Down);
                                break;
                            case 2:
                                SetState(SnakeState.Left);
                                break;
                        }
                    }
                }break;
            }
            Position += move * Time.Delta * speed;
            UpdateTail();
            if (cooldown <= 0)
            {
                Vector2 distance = (p.Position - this.Position) * Screen.Scale;
                float currVec = (float)Math.Atan2(distance.Y, distance.X);
                float pi4 = (float)Math.PI / 4;
                Vector2 left = new Vector2((float)Math.Cos(currVec + pi4), (float)Math.Sin(currVec + pi4));
                Vector2 right = new Vector2((float)Math.Cos(currVec - pi4), (float)Math.Sin(currVec - pi4));
                Tesseract.Engine.GameWorld.GameState.InstantiateCurrent(new EnemyBullet(this.Position, distance));
                Tesseract.Engine.GameWorld.GameState.InstantiateCurrent(new EnemyBullet(this.Position, left));
                Tesseract.Engine.GameWorld.GameState.InstantiateCurrent(new EnemyBullet(this.Position, right));
                cooldown = (Orbs.Count+1);
            }
            else
            {
                cooldown = cooldown - 2 * Time.Delta;
            }
                return base.Update();
        }
Example #32
0
 public int CollectFood(SnakeState collectingSnake)
 {
     this.collectingSnake = collectingSnake;
     this.collected       = true;
     return(this.weight);
 }