Exemple #1
0
        public PlantRule(IDictionary <string, object> settings)
        {
            _settings = settings;

            AllowedTerrainTypes = _settings.GetOrDefault(k.allowedTerrainTypes, new int[0]).Select(t => (GroundType)t).OrderBy(t => t).ToArray();

            var i = 0;

            GrowingStates = new Dictionary <byte, PlantPhase>();

            while (settings.ContainsKey($"state_{i}"))
            {
                var states  = (int[])settings[$"state_{i}"];
                var actions = (int[])settings[$"action_{i}"];

                var plantPhase = new PlantPhase
                {
                    state  = states.Select(s => (byte)s).ToArray(),
                    action = actions.Select(a => (PlantType)a).ToArray()
                };

                GrowingStates.Add((byte)i, plantPhase);
                i++;
            }

            CheckConsistency();
        }
    public void SetPhase(PlantPhase phase)
    {
        time = 0;

        if (currentPhaseObject != null)
        {
            Destroy(currentPhaseObject);
        }
        this.phase = phase;

        switch (phase)
        {
        case PlantPhase.fallingSeed:
            currentPhaseObject = Instantiate(prototypeSeed);
            currentPhaseObject.transform.parent        = transform;
            currentPhaseObject.transform.localPosition = new Vector3(0, 0.1f, 0);
            health = 10;
            break;

        case PlantPhase.seed:
            currentPhaseObject = Instantiate(prototypeSeed);
            currentPhaseObject.transform.parent        = transform;
            currentPhaseObject.transform.localPosition = new Vector3(0, 0.1f, 0);
            health += 10;
            break;

        case PlantPhase.sapling:
            currentPhaseObject = Instantiate(prototypeSapling);
            currentPhaseObject.transform.parent        = transform;
            currentPhaseObject.transform.localPosition = new Vector3(0, 0.5f, 0);
            transform.position = new Vector3(transform.position.x, 0, transform.position.z);
            health            += 20;
            break;

        case PlantPhase.yearling:
            currentPhaseObject = Instantiate(prototypeYearling);
            currentPhaseObject.transform.parent        = transform;
            currentPhaseObject.transform.localPosition = new Vector3(0, 1f, 0);
            health += 30;
            break;

        case PlantPhase.tree:
            if (currentPhase != PlantPhase.tree)
            {
                health += 70;
            }
            currentPhaseObject = Instantiate(prototypeTree);
            currentPhaseObject.transform.parent        = transform;
            currentPhaseObject.transform.localPosition = new Vector3(0, 1.5f, 0);
            SpawnWave();
            break;

        default:
            return;
        }

        currentPhase = phase;
    }
 // Use this for initialization
 void Start()
 {
     phase        = PlantPhase.fallingSeed;
     currentPhase = PlantPhase.tree;
 }