Ejemplo n.º 1
0
    /// <summary>
    /// Loads the unit preview sprite.
    /// </summary>
    /// <see cref="http://answers.unity3d.com/questions/1139254/how-to-set-sprite-or-texture2d-assetpath-in-editor.html">TODO: Fix errors</see>
    void GetOrCreateUnitPreview(SpriteRenderer renderer, int index, BuyUnitConfig cfg, List <PreviewRescaleConfig> previewsRequiringRescaling)
    {
        if (cfg.PreviewIcon != null)
        {
            // sprite given
            renderer.sprite = cfg.PreviewIcon;
        }
        else
        {
            var     totalPreviewSize = renderer.bounds.max - renderer.bounds.min;
            Vector2 actualSize;

            if (cfg.UnitPrefab.GetComponent <SpriteRenderer> () != null)
            {
                // unit has a sprite -> copy it
                var src = cfg.UnitPrefab.GetComponent <SpriteRenderer> ();

                //CopyComponent (src, renderer.gameObject);
                renderer.sprite    = src.sprite;
                renderer.color     = src.color;
                renderer.materials = src.sharedMaterials;

                actualSize = src.bounds.max - src.bounds.min;
            }
            else
            {
                // nothing -> create preview texture from asset
                var previewTexture = StorePreviewAsAsset(cfg.UnitPrefab, index);
                var worldBounds    = renderer.bounds;

                // compute pixels per unit size s.t. texture fills out entire preview bounds
                var texW          = previewTexture.width;
                var texH          = previewTexture.height;
                var worldW        = worldBounds.max.x - worldBounds.min.x;
                var worldH        = worldBounds.max.y - worldBounds.min.y;
                var pixelsPerUnit = Mathf.Min(texW / worldW, texH / worldH);

                // create sprite
                var sprite            = new Sprite();
                var previewSpriteRect = new Rect(new Vector2(0, 0), new Vector2(texW, texH));
                var pivot             = new Vector2(0.5f, 0.5f);
                sprite          = Sprite.Create(previewTexture, previewSpriteRect, pivot, pixelsPerUnit);
                renderer.sprite = sprite;
                actualSize      = renderer.bounds.max - renderer.bounds.min;
            }

            previewsRequiringRescaling.Add(new PreviewRescaleConfig {
                totalSize  = totalPreviewSize,
                actualSize = actualSize,
                renderer   = renderer
            });
        }
    }
Ejemplo n.º 2
0
    internal void ProduceUnit(BuyUnitConfig cfg)
    {
        var unitPrefab = cfg.UnitPrefab;

        // create new unit at current position
        var go = (GameObject)Instantiate(unitPrefab, SpawnPoint.position, Quaternion.identity);

        // set path
        var pathFollower = go.GetComponent <NavMeshPathFollower>();

        pathFollower.path      = Path;
        pathFollower.direction = Direction;

        // add faction
        FactionManager.SetFaction(go, gameObject);

        // add loot via script for now
        var lootSettings = go.AddComponent <HasLoot> ();

        lootSettings.MinLootCredits = Mathf.RoundToInt(cfg.CreditCost * 0.9f);
        lootSettings.MaxLootCredits = Mathf.RoundToInt(cfg.CreditCost * 1.6f);
    }
Ejemplo n.º 3
0
 public BuyUnitStatus(UnitManager unitManager, BuyUnitConfig cfg)
 {
     lastBuyTime      = Time.time;
     this.unitManager = unitManager;
     Config           = cfg;
 }