Esempio n. 1
0
    private void Update()
    {
        if (!Built)
        {
            return;
        }
        if (!CreatingShip)
        {
            if (!ConnectedPlanet.HasEntitySpace)
            {
                return;
            }
            CreatingShip = true;
            ConnectedPlanet.PlannedEntities++;
            StartCoroutine(StartCreatingShip());
            return;
        }
        if (!BuildingShip)
        {
            return;
        }

        if (UpdatePart(currentBody))
        {
            currentBody = null;
            if (Bodies != null && Bodies.Count > 0)
            {
                currentBody = Bodies.Dequeue();
            }
        }
        if (UpdatePart(currentWeapon))
        {
            currentWeapon = null;
            if (Weapons != null && Weapons.Count > 0)
            {
                currentWeapon = Weapons.Dequeue();
            }
        }
        if (UpdatePart(currentEngine))
        {
            currentEngine = null;
            if (Engines != null && Engines.Count > 0)
            {
                currentEngine = Engines.Dequeue();
            }
        }
        if (currentBody == null && currentWeapon == null && currentEngine == null)
        {
            //Finished
            ConnectedPlanet.PlannedEntities--;
            ConnectedPlanet.AddEntity(entity);
            entity.SetParent(null, false);
            entity.SetPhysicsEnabled(true);
            entity       = null;
            CreatingShip = false;
            BuildingShip = false;
        }
    }
Esempio n. 2
0
    private bool MovePart(EntityPartView part)
    {
        if (part == null)
        {
            return(true);
        }
        part.MoveTimer = Mathf.Min(part.MoveTimer + Time.deltaTime, MoveTime);

        part.SetPosition(Vector3.Lerp(part.StartTarget.position, part.EndTarget.position, MoveCurve.Evaluate(part.MoveTimer / MoveTime)));

        return(part.MoveTimer >= MoveTime);
    }
Esempio n. 3
0
 private bool UpdatePart(EntityPartView part)
 {
     if (part == null)
     {
         return(true);
     }
     if (BuildPart(part))
     {
         if (MovePart(part))
         {
             return(true);
         }
     }
     return(false);
 }
Esempio n. 4
0
    private bool BuildPart(EntityPartView part)
    {
        if (part == null)
        {
            return(true);
        }

        if (part.BuildTimer >= BuildTime)
        {
            return(true);
        }

        part.SetPosition(part.StartTarget.position);

        part.BuildTimer = Mathf.Min(part.BuildTimer + Time.deltaTime, BuildTime);

        part.SetScale(Vector3.one * BuildCurve.Evaluate(part.BuildTimer / BuildTime));

        return(part.BuildTimer >= BuildTime);
    }
Esempio n. 5
0
    private IEnumerator StartCreatingShip()
    {
        if (FreeEntities.Count == 0)
        {
            var loading = Resources.LoadAsync <GameObject>("Ship");
            yield return(loading);

            GameObject go = Object.Instantiate(loading.asset) as GameObject;

            entity = go.GetComponent <EntityView>();
        }
        else
        {
            entity = FreeEntities.Dequeue();
            entity.gameObject.SetActive(true);
        }

        entity.transform.localScale = Vector3.one;

        entity.SetParent(ShipPosition);
        entity.ConnectedPlanet = ConnectedPlanet;
        entity.Player          = entity.ConnectedPlanet.Player;
        entity.Health          = 20;

        for (int i = 0; i < entity.Parts.Count; i++)
        {
            entity.Parts[i].SetScale(Vector3.zero);
        }

        yield return(null);

        entity.ResetPositionAndRotation();

        Bodies  = new Queue <EntityPartView>();
        Weapons = new Queue <EntityPartView>();
        Engines = new Queue <EntityPartView>();

        for (int i = 0; i < entity.Parts.Count; i++)
        {
            entity.Parts[i].BuildTimer = 0;
            entity.Parts[i].MoveTimer  = 0;

            if (entity.Parts[i].PartType == PartTypes.BODY)
            {
                entity.Parts[i].StartTarget = BodyFactory;
                Bodies.Enqueue(entity.Parts[i]);
            }
            if (entity.Parts[i].PartType == PartTypes.WEAPON)
            {
                entity.Parts[i].StartTarget = WeaponFactory;
                Weapons.Enqueue(entity.Parts[i]);
            }
            if (entity.Parts[i].PartType == PartTypes.ENGINE)
            {
                entity.Parts[i].StartTarget = EngineFactory;
                Engines.Enqueue(entity.Parts[i]);
            }

            entity.Parts[i].SetPosition(entity.Parts[i].StartTarget.position);
            entity.Parts[i].SetScale(Vector3.zero);
        }

        currentBody   = Bodies.Dequeue();
        currentWeapon = Weapons.Dequeue();
        currentEngine = Engines.Dequeue();

        BuildingShip = true;
    }