예제 #1
0
 void Awake()
 {
     Instance = this;
     Stars    = new Dictionary <Guid, GameData.Star>();
     Links    = new List <GameData.Link>();
     LastStar = null;
 }
예제 #2
0
 protected void CheckStrandedStar(GameData.Star star)
 {
     if (star.LinkedStars.Count <= 0)
     {
         star.Controller.StartMovement();
         Stars.Remove(star.StarId);
     }
 }
예제 #3
0
 protected void CheckStrandedStar(GameData.Star star)
 {
     if (star.LinkedStars.Count <= 0)
     {
         Debug.Log("Releasing Star");
         star.Controller.StartMovement();
         Stars.Remove(star.StarId);
     }
 }
예제 #4
0
    void Start()
    {
        Constellations = new List <GameData.Constellation>();

        var testStar1 = new GameData.Star(Vector3.zero);
        var testStar2 = new GameData.Star(new Vector3(0, 0, 1));
        var testStar3 = new GameData.Star(new Vector3(0, 1, 0));
        var testStar4 = new GameData.Star(new Vector3(1, 0, 0));

        AddStar(testStar1);
        AddStar(testStar2);
        AddStar(testStar3);
        AddStar(testStar4);
    }
예제 #5
0
    void Awake()
    {
        starData     = new GameData.Star(this);
        starRenderer = GetComponentInChildren <MeshRenderer>();
        starMaterial = GetComponentInChildren <MeshRenderer>().material;

        startColor         = starMaterial.color;
        startEmissionColor = starMaterial.GetColor("_EmissionColor");
        startSpecularColor = starMaterial.GetColor("_SpecColor");
        properties         = new MaterialPropertyBlock();


        starMaterial.SetFloat("_Mode", 3f);
        starMaterial.EnableKeyword("_ALPHAPREMULTIPLY_ON");
    }
예제 #6
0
    protected void BreakStarLink(GameData.Constellation constellation, Guid starId)
    {
        var star = constellation.Stars[starId];

        //Remove star from linked stars
        for (int i = 0; i < star.LinkedStars.Count; i++)
        {
            if (constellation.Stars.ContainsKey(star.LinkedStars[i]))
            {
                GameData.Star linkedStar = constellation.Stars[star.LinkedStars[i]];
                linkedStar.LinkedStars.Remove(star.StarId);
            }
        }

        //Get all involved links
        List <GameData.Link> removedLinks = new List <GameData.Link>();

        for (int i = 0; i < constellation.Links.Count; i++)
        {
            if (constellation.Links[i].StarIds.Contains(star.StarId))
            {
                removedLinks.Add(constellation.Links[i]);
            }
        }

        //Destroy Link
        for (int i = 0; i < removedLinks.Count; i++)
        {
            GameData.Link link = removedLinks[i];
            constellation.Stars[link.StarIds[0]].LinkedStars.Remove(constellation.Stars[link.StarIds[1]].StarId);
            constellation.Stars[link.StarIds[1]].LinkedStars.Remove(constellation.Stars[link.StarIds[0]].StarId);
            Destroy(link.LineComponent.gameObject);
            constellation.Links.Remove(link);
        }

        //Return to original layer
        star.Controller.UpdateLayerToStar();

        //Remove star from constellation
        constellation.Stars.Remove(starId);
        PooledObject pool = star.Controller.gameObject.GetComponent <PooledObject>();

        pool.ReturnToPool();
    }
예제 #7
0
    public void AddStar(GameData.Star star)
    {
        //If star not already stored
        if (!Stars.ContainsKey(star.StarId))
        {
            Stars.Add(star.StarId, star);
        }

        //There is a last star
        if (LastStar != null)
        {
            //Is not currently linked to star
            if (!LastStar.LinkedStars.Contains(star.StarId))
            {
                //Link Stars to Eachother
                LastStar.LinkedStars.Add(star.StarId);
                star.LinkedStars.Add(star.StarId);

                //Create Link
                var link = new GameData.Link();
                link.StarIds.Add(LastStar.StarId);
                link.StarIds.Add(star.StarId);

                //Create Link Object
                var linkObject = Instantiate(LinkPrefab);
                var line       = linkObject.GetComponent <LineRenderer>();

                if (StarLinkParent != null)
                {
                    linkObject.transform.SetParent(StarLinkParent);
                    linkObject.transform.localScale = Vector3.one;
                }

                link.LineComponent = line;
                link.StartPos      = LastStar.Position;
                link.EndPos        = star.Position;
                line.SetPosition(0, link.StartPos);
                line.SetPosition(1, link.EndPos);
                Links.Add(link);
            }
        }
        LastStar = star;
    }
예제 #8
0
    void OnTriggerEnter(Collider hit)
    {
        StarController isStar = hit.GetComponent <StarController>();

        if (isStar)
        {
            if (isStar == lastStar)
            {
                lastStar = null;
                constManager.BreakConstellation();
            }
            else
            {
                lastStar = isStar;
                isStar.StopMovement();
                GameData.Star constStar = new GameData.Star(isStar.transform.position);
                constManager.AddStar(constStar);
            }
        }
    }
예제 #9
0
    protected void StarToCometCollision(GameData.Constellation constellation, Guid starId)
    {
        if (constellation.Stars.ContainsKey(starId))
        {
            GameData.Star star = constellation.Stars[starId];

            //Explosion
            Vector3 particlePosition = constellation.Stars[starId].Controller.gameObject.transform.position;
            particlePosition.y += 1f;
            Instantiate(starHitCometParticle, particlePosition, Quaternion.identity);

            //Pushback
            float strength = GameData.baseStrength + (GameData.strengthMultiplier * star.LinkedStars.Count);
            GameController.TriggerCometCollision(strength, GameData.cometCollisionSpeed);

            BreakStarLink(constellation, starId);
            if (constellation.Stars.Count <= 0)
            {
                Destroy(constellation.ConstellationParent);
            }
            AudioController.Instance.PlaySfx(SoundBank.SoundEffects.ConstellationHit);
        }
    }
예제 #10
0
    public void AddStar(GameData.Star star)
    {
        //If star not already stored
        if (!Stars.ContainsKey(star.StarId))
        {
            Stars.Add(star.StarId, star);
        }

        //There is a last star
        if (LastStarId != null)
        {
            GameData.Star lastStar = Stars[(Guid)LastStarId];

            //Is not currently linked to star
            if (!lastStar.LinkedStars.Contains(star.StarId) || !star.LinkedStars.Contains(lastStar.StarId))
            {
                //Error Checking - make sure links are being properly linked to both stars
                if (lastStar.LinkedStars.Contains(star.StarId) != star.LinkedStars.Contains(lastStar.StarId))
                {
                    Debug.Log("Previous Linkes weren't properly created");
                }

                //Link Stars to Eachother
                if (!lastStar.LinkedStars.Contains(star.StarId))
                {
                    lastStar.LinkedStars.Add(star.StarId);
                }
                if (!star.LinkedStars.Contains(lastStar.StarId))
                {
                    star.LinkedStars.Add(lastStar.StarId);
                }

                //Create Link
                var link = new GameData.Link();
                link.StarIds.Add(lastStar.StarId);
                link.StarIds.Add(star.StarId);

                //Create Link Object
                var linkObject = Instantiate(LinkPrefab);
                var line       = linkObject.GetComponent <LineRenderer>();
                line.useWorldSpace = false;

                if (StarLinkParent != null)
                {
                    linkObject.transform.SetParent(StarLinkParent);
                    linkObject.transform.localScale = Vector3.one;
                }

                link.LineComponent = line;
                link.StartPos      = lastStar.Position;
                link.EndPos        = star.Position;
                line.SetPosition(0, new Vector3(link.StartPos.x, link.StartPos.y, 1f));
                line.SetPosition(1, new Vector3(link.EndPos.x, link.EndPos.y, 1f));

                Links.Add(link);
                InvincibilityCountdown = InvincibiltyCountdownMax;
            }
        }

        LastStarId = star.StarId;
    }
예제 #11
0
    public bool CompleteConstellation()
    {
        Debug.Log("Complete Constellation");
        if (Stars.Count >= GameData.minimumStars)
        {
            LastStarId = null;
            var constellation = new GameData.Constellation();
            constellation.Stars = new Dictionary <Guid, GameData.Star>(Stars);
            constellation.Links = new List <GameData.Link>(Links);

            GameObject constellationParent = new GameObject("Constellation");
            constellation.ConstellationParent = constellationParent;

            GameObject constellationBackgorund = new GameObject("Background");
            constellationBackgorund.transform.SetParent(constellationParent.transform);
            constellationBackgorund.transform.position = GetAverageStarPosition(new List <GameData.Star>(constellation.Stars.Values).ToArray());
            SpriteRenderer bgSpriteRenderer = constellationBackgorund.AddComponent <SpriteRenderer>();
            bgSpriteRenderer.sprite = GetRandomConstellationImage();
            bgSpriteRenderer.color  = ConstellationBackgroundColor;


            string constellationName = GenerateConstellationName(Stars.Keys.Count);
            constellation.ConstellationName = constellationName;
            Debug.Log("Constellation Name:" + constellationName);


            var keys = new List <Guid>(constellation.Stars.Keys);
            for (int i = 0; i < keys.Count; i++)
            {
                Guid          key  = keys[i];
                GameData.Star star = constellation.Stars[key];
                star.Controller.UpdateLayerToSendStar();
                star.Controller.starTriggered.AddListener(() => StarToCometCollision(constellation, key));
                star.Controller.gameObject.transform.SetParent(constellationParent.transform);
            }

            for (int i = 0; i < constellation.Links.Count; i++)
            {
                constellation.Links[i].LineComponent.gameObject.transform.SetParent(constellationParent.transform);
            }

            //Send data to Visualization and score
            //Score
            int   score            = GameData.scorePerStar;
            float totalConnections = 1 + (GameData.scoreConnectionMulti * constellation.Links.Count);
            float totalStars       = 1 + (GameData.constSizeMulti * constellation.Stars.Count);
            GameController.TriggerAddScore((int)((score * totalConnections) * totalStars));
            UiController.TriggerScoreData(constellation.Stars.Count, constellation.Links.Count, score, constellationName);

            Stars.Clear();
            Links.Clear();

            UiController.TriggerConstellationEvent(constellationParent);
            //Create Mini
            CreateDisplayConstellation(constellation);

            Tweener tween = constellation.ConstellationParent.transform.DOMoveY(GameData.cometStartY * 2, GameData.sendSpeed).SetEase(Ease.InOutBack);
            tween.OnComplete(() => DestroyConstellation(constellation));


            AudioController.Instance.PlaySfx(SoundBank.SoundEffects.ConstellationComplete);
            AudioController.Instance.PlayAtEnd(AudioController.Instance.effectBus[(int)SoundBank.SoundEffects.ConstellationComplete], SoundBank.Instance.Request(SoundBank.SoundEffects.ConstellationSent), false);
            //StartCoroutine(ConstellationFlyAway(constellation));
            return(true);
        }
        else
        {
            return(false);
        }
    }