Exemple #1
0
    /// <summary>
    /// Copy an existing PlantSubject.
    /// </summary>
    public override Subject Copy()
    {
        PlantSubject newPlantSubject = new PlantSubject();

        newPlantSubject.subjectID       = subjectID;
        newPlantSubject.name            = name;
        newPlantSubject.description     = description;
        newPlantSubject.icon            = icon;
        newPlantSubject.prefab          = prefab;
        newPlantSubject.relatedSubjects = relatedSubjects;

        newPlantSubject.produceID     = produceID;
        newPlantSubject.produceTime   = produceTime;
        newPlantSubject.maxGrowth     = maxGrowth;
        newPlantSubject.growthTime    = growthTime;
        newPlantSubject.matureGrowth  = matureGrowth;
        newPlantSubject.inventorySize = inventorySize;
        return(newPlantSubject);
    }
Exemple #2
0
    /// <summary>
    /// Set this Plant Object's variables from the subject card
    /// </summary>
    /// <param name="_masterSubjectList"></param>
    /// <param name="newSubject"></param>
    public override void InitializeFromSubject(MasterSubjectList _masterSubjectList, Subject newSubject)
    {
        masterSubjectList = _masterSubjectList;
        subject           = newSubject;
        if (newSubject is PlantSubject)
        {
            PlantSubject plantSubject = newSubject as PlantSubject;
            produceID    = plantSubject.ProduceID;
            produceTime  = plantSubject.ProduceTime;
            maxGrowth    = plantSubject.MaxGrowth;
            growthTime   = plantSubject.GrowthTime;
            matureGrowth = plantSubject.MatureGrowth;
            inventory    = new Inventory(plantSubject.InventorySize, _masterSubjectList);

            mature        = false;
            age           = 0.1f;
            currentGrowth = 0.5f;
            lastProduce   = Time.time;
        }
        else
        {
            //default values used if no valid subject for initialization
            produceID    = 1;
            produceTime  = 20;
            maxGrowth    = 1;
            growthTime   = 20;
            matureGrowth = 15;
            inventory    = new Inventory(3, _masterSubjectList);

            mature        = false;
            age           = 0.1f;
            currentGrowth = 5.0f;
            lastProduce   = Time.time;
        }
        gameObject.transform.localScale = new Vector3(currentGrowth * 0.01f + 0.5f, currentGrowth * 0.02f + 0.5f, currentGrowth * 0.01f + 0.5f);
    }
    // Update is called once per frame
    void Update()
    {
        // ------------------------------------------------------------------------
        // ------------------------ START CAMERA MOVEMENT -------------------------
        // ------------------------------------------------------------------------
        if (lastSelector != null)
        {
            cameraDestination = new Vector3(lastSelector.transform.position.x,
                                            cameraDestination.y,
                                            lastSelector.transform.position.z);
        }
        else if (Input.GetMouseButton(2))
        {
            // panning camera
            float mouseY = Input.GetAxis("Mouse Y");
            if (mouseY != 0)
            {
                cameraDestination = new Vector3(cameraDestination.x,
                                                cameraDestination.y,
                                                Camera.main.transform.position.z + mouseY * (cameraDestination.y / 25));
            }
            float mouseX = Input.GetAxis("Mouse X");
            if (mouseX != 0)
            {
                cameraDestination = new Vector3(Camera.main.transform.position.x + mouseX * (cameraDestination.y / 25),
                                                cameraDestination.y,
                                                cameraDestination.z);
            }
        }
        float mouseWheelDelta = Input.GetAxis("Mouse ScrollWheel");

        if (mouseWheelDelta != 0)
        {
            Vector3 camPosition = Camera.main.transform.position;
            cameraDestination = new Vector3(camPosition.x,
                                            camPosition.y - mouseWheelDelta * (camPosition.y),
                                            Camera.main.transform.position.z);
        }
        if (Vector3.Distance(Camera.main.transform.position, cameraDestination) > 0.1f)
        {
            Camera.main.transform.position = Vector3.Slerp(Camera.main.transform.position, cameraDestination, Time.deltaTime * 20.0f);
        }
        // ------------------------------------------------------------------------
        // ------------------------ END CAMERA MOVEMENT ---------------------------
        // ------------------------------------------------------------------------

        if ((lastSelector != null) && (lastSelector.transform.parent != null))
        {
            SubjectObjectScript script = lastSelector.transform.parent.GetComponent <SubjectObjectScript>() as SubjectObjectScript;
            _ID.text          = "ID: <b>" + script.Subject.SubjectID.ToString() + "</b>";
            _Name.text        = "Name: <b>" + script.Subject.Name.ToString() + "</b>";
            _Description.text = "Desc: <b>" + script.Subject.Description.ToString() + "</b>";

            testPanel.SetActive(true);
            PlantSubject plantSub = script.Subject as PlantSubject;
            if (plantSub != null)
            {
                PlantObjectScript plantScript    = script as PlantObjectScript;
                Subject           produceSubject = masterSubjectList.GetSubject(plantSub.ProduceID);
                float             maturePercent  = Mathf.Min(plantScript.CurrentGrowth / plantSub.MatureGrowth, 1.0f);
                plantPanel.SetActive(true);
                animalPanel.SetActive(false);
                locationPanel.SetActive(false);
                _Produce.text   = "Produce: <b>" + plantSub.ProduceID.ToString() + " - " + produceSubject.Name.ToString() + "</b>";
                _Growth.text    = "Growth: <b>" + plantScript.CurrentGrowth.ToString() + " / " + plantSub.MaxGrowth.ToString() + "</b>";
                _Maturity.text  = "Maturity: <b>" + maturePercent.ToString() + "</b>";
                _Inventory.text = "Inventory: <b>" + plantScript.InventoryPercent().ToString() + "</b>";
            }
            else
            {
                AnimalSubject animalSub = script.Subject as AnimalSubject;
                if (animalSub != null)
                {
                    animalPanel.SetActive(true);
                    plantPanel.SetActive(false);
                    locationPanel.SetActive(false);
                    AnimalObjectScript animalScript = script as AnimalObjectScript;
                    _Health.text = "Health: <b>" + animalScript.GetHealth().ToString() + "</b>";
                    _Safety.text = "Safety: <b>" + animalScript.GetSafety().ToString() + "</b>";
                    _Food.text   = "Food: <b>" + animalScript.GetFood().ToString() + "</b>";
                }
                else
                {
                    LocationSubject locationSub = script.Subject as LocationSubject;
                    if (locationSub != null)
                    {
                        locationPanel.SetActive(true);
                        plantPanel.SetActive(false);
                        animalPanel.SetActive(false);
                        _Center.text = "Center: <b>" + locationSub.Coordinates.ToString() + "</b>";
                        _Radius.text = "Radius: <b>" + locationSub.Radius.ToString() + "</b>";
                    }
                    else
                    {
                        locationPanel.SetActive(false);
                        plantPanel.SetActive(false);
                        animalPanel.SetActive(false);
                    }
                }
            }
        }
        else
        {
            //testPanel.SetActive(false);
        }

        //Place or use tool
        if (placeID < 1)
        {
            if (placeID < -1) //placeID == -2
            {
                if (!IsOverMenu() && (Input.GetMouseButtonDown(0)))
                {
                    centerPosition = Camera.main.ScreenToWorldPoint(new Vector3(Input.mousePosition.x, Input.mousePosition.y, Camera.main.transform.position.y));
                    SelectAtPosition(centerPosition, 0.4f);
                }
            }
            else if (placeID < 0) //placeID == -1
            {
                //setting to Damage
                if (!IsOverMenu() && (Input.GetMouseButtonDown(0)))
                {
                    centerPosition = Camera.main.ScreenToWorldPoint(new Vector3(Input.mousePosition.x, Input.mousePosition.y, Camera.main.transform.position.y));
                    if (HarmAtPosition(centerPosition, 1.0f))
                    {
                        PopMessage("Kill!", centerPosition, 0);
                    }
                }
            }
            else //placeID == 0
            {
                //setting to delete objects
                if (!IsOverMenu() && (Input.GetMouseButtonDown(0)))
                {
                    centerPosition = Camera.main.ScreenToWorldPoint(new Vector3(Input.mousePosition.x, Input.mousePosition.y, Camera.main.transform.position.y));
                    if (DeleteAtPosition(centerPosition, 1.0f))
                    {
                        PopMessage("DELETED", centerPosition, 1);
                    }
                }
            }
        }
        else // is placeable
        {
            if (!placementStarted)
            {
                //Since we have not started, we can look for our mouse for placement
                if (!IsOverMenu() && (Input.GetMouseButtonDown(0)))
                {
                    //Set the center based on mouse position
                    centerPosition = Camera.main.ScreenToWorldPoint(new Vector3(Input.mousePosition.x, Input.mousePosition.y, Camera.main.transform.position.y));

                    //We will let everything start with a radius of 0.5
                    if (CheckPlacementPosition(centerPosition, 0.5f, null))
                    {
                        if (placeID == 2) //this is a location, which requires 2 steps
                        {
                            placedObject = Instantiate(locationStart, centerPosition, Quaternion.identity);
                            //calculate our edge and manipulate the scale until finalized
                            edgePosition = Camera.main.ScreenToWorldPoint(new Vector3(Input.mousePosition.x, Input.mousePosition.y, Camera.main.transform.position.y));
                            float distance = Vector3.Distance(centerPosition, edgePosition);
                            if (CheckPlacementPosition(centerPosition, distance, placedObject))
                            {
                                placedObject.transform.localScale = new Vector3(distance * 2, 0.1f, distance * 2);
                            }
                            placementStarted = true;
                        }
                        else
                        {
                            //Use the id to pull the Subject card
                            Subject newSubject = masterSubjectList.GetSubject(placeID);
                            if (newSubject != null)
                            {
                                placedObject = Instantiate(newSubject.Prefab, centerPosition, Quaternion.identity);
                                if (placedObject != null)
                                {
                                    SubjectObjectScript script = placedObject.GetComponent <SubjectObjectScript>() as SubjectObjectScript;
                                    script.InitializeFromSubject(masterSubjectList, newSubject);
                                    placementStarted = true;
                                }
                            }
                        }
                    }
                }
            }
            else
            {
                //We have started to place - is it a location?
                if (placeID == 2)
                {
                    //calculate our edge and manipulate the scale until finalized
                    edgePosition = Camera.main.ScreenToWorldPoint(new Vector3(Input.mousePosition.x, Input.mousePosition.y, Camera.main.transform.position.y));
                    float distance = Vector3.Distance(centerPosition, edgePosition);
                    if (CheckPlacementPosition(centerPosition, distance, placedObject))
                    {
                        placedObject.transform.localScale = new Vector3(distance * 2, 0.1f, distance * 2);
                        lastDistance = distance;
                    }

                    //Look for a second mouse click to finalize the location
                    //No more changes to distance
                    if (!IsOverMenu() && (Input.GetMouseButtonDown(0)))
                    {
                        placementStarted = false;
                        Destroy(placedObject); //get rid of our temp area
                        //create a new location using the above values
                        CreateLocation(centerPosition, lastDistance);
                    }
                }
                else
                {
                    //We can finalize everything else automatically
                    placementStarted = false;
                }
            }
        }
    }
    public MasterSubjectList()
    {
        masterSubjectList = new List <Subject>();

        //`-.,.-'-.,.-'-.,.-'-.,.-'-.,.-'
        maxID = DbIds.Plinkett; // == Plinkett
        //,.-`-.,.-`-.,.-`-.,.-`-.,.-`-.,
        NpcDefinition plinkettNpcDefinition = new NpcDefinition()
        {
            Memories           = new List <SubjectMemory>(),
            AttackDamage       = 10,
            FoodHungry         = 60,
            FoodMax            = 100,
            FoodMetabolizeRate = 1,
            HealthDanger       = 40,
            HealthMax          = 50,
            HealthRegen        = 1,
            MetabolizeInterval = 1,
            MoveSpeed          = 5,
            Nest           = null,
            SafetyDeadly   = -10,
            SafetyHigh     = 10,
            SightRangeFar  = 10,
            SightRangeNear = 2.5f,
            StarvingDamage = 3,
            Traits         = new NpcCharacterTraits(NpcTraits.Herbivore)
        };
        AnimalSubject plinkett = new AnimalSubject()
        {
            Definition      = plinkettNpcDefinition,
            Description     = "A herbivore.",
            GrowthTime      = 5,
            Icon            = new UnityEngine.Sprite(),
            InventorySize   = 1,
            LootID          = 5,
            MatureTime      = 200,
            MaxGrowth       = 400,
            Name            = "Plinkett",
            RelatedSubjects = new int[0],
            SubjectID       = maxID,
            Prefab          = Resources.Load("GameObjects/Plinkett") as GameObject
        };

        masterSubjectList.Add(plinkett);

        //`-.,.-'-.,.-'-.,.-'-.,.-'-.,.-'
        maxID = DbIds.Location; // == Location
        //,.-`-.,.-`-.,.-`-.,.-`-.,.-`-.,
        LocationSubject NewLocationOne = new LocationSubject()
        {
            Coordinates     = new UnityEngine.Vector3(1, 1, 1),
            Description     = "A very positional kind of location",
            Icon            = new UnityEngine.Sprite(),
            Layer           = 1,
            Name            = "Location",
            Radius          = 2,
            RelatedSubjects = new int[0],
            SubjectID       = maxID,
            Prefab          = Resources.Load("GameObjects/LocationMarker") as GameObject
        };

        masterSubjectList.Add(NewLocationOne);

        //`-.,.-'-.,.-'-.,.-'-.,.-'-.,.-'
        maxID = DbIds.Bush; // == Bush
        //,.-`-.,.-`-.,.-`-.,.-`-.,.-`-.,
        PlantSubject Bush = new PlantSubject()
        {
            SubjectID       = maxID,
            Name            = "Bush",
            Description     = "A Berry Bush",
            Icon            = new UnityEngine.Sprite(),
            RelatedSubjects = new int[0],
            Prefab          = Resources.Load("GameObjects/Bush") as GameObject,

            ProduceID     = 4,
            ProduceTime   = 2,
            MaxGrowth     = 30,
            GrowthTime    = 1,
            MatureGrowth  = 2,
            InventorySize = 3
        };

        masterSubjectList.Add(Bush);

        //`-.,.-'-.,.-'-.,.-'-.,.-'-.,.-'
        maxID = DbIds.Berry; // == Berry
        //,.-`-.,.-`-.,.-`-.,.-`-.,.-`-.,
        FoodSubject Berry = new FoodSubject()
        {
            SubjectID       = maxID,
            Name            = "Berry",
            Description     = "A Juicy Berry",
            Icon            = new UnityEngine.Sprite(),
            RelatedSubjects = new int[0],

            BuildDirections = null,
            MaxStack        = 10,
            FoodType        = 0,
            FoodValue       = 10
        };

        masterSubjectList.Add(Berry);

        //`-.,.-'-.,.-'-.,.-'-.,.-'-.,.-'
        maxID = DbIds.Meat; // == Meat
        //,.-`-.,.-`-.,.-`-.,.-`-.,.-`-.,
        FoodSubject Meat = new FoodSubject()
        {
            SubjectID       = maxID,
            Name            = "Meat",
            Description     = "It was once muscle...",
            Icon            = new UnityEngine.Sprite(),
            RelatedSubjects = new int[0],

            BuildDirections = null,
            MaxStack        = 10,
            FoodType        = 1,
            FoodValue       = 10
        };

        masterSubjectList.Add(Meat);

        //`-.,.-'-.,.-'-.,.-'-.,.-'-.,.-'
        maxID = DbIds.Gobber; // == Gobber
        //,.-`-.,.-`-.,.-`-.,.-`-.,.-`-.,
        NpcDefinition gobberNpcDefinition = new NpcDefinition()
        {
            Memories           = new List <SubjectMemory>(),
            AttackDamage       = 10,
            FoodHungry         = 50,
            FoodMax            = 100,
            FoodMetabolizeRate = 1,
            HealthDanger       = 40,
            HealthMax          = 100,
            HealthRegen        = 1,
            MetabolizeInterval = 1,
            MoveSpeed          = 5,
            Nest           = null,
            SafetyDeadly   = -10,
            SafetyHigh     = 10,
            SightRangeFar  = 10,
            SightRangeNear = 2,
            StarvingDamage = 5,
            Traits         = new NpcCharacterTraits(NpcTraits.Carnivore)
        };
        AnimalSubject gobber = new AnimalSubject()
        {
            Definition      = gobberNpcDefinition,
            Description     = "A carnivore.",
            GrowthTime      = 5,
            Icon            = new UnityEngine.Sprite(),
            InventorySize   = 1,
            LootID          = 5,
            MatureTime      = 200,
            MaxGrowth       = 400,
            Name            = "Gobber",
            RelatedSubjects = new int[0],
            SubjectID       = maxID,
            Prefab          = Resources.Load("GameObjects/Gobber") as GameObject
        };

        masterSubjectList.Add(gobber);

        // \/ \/ DO NOT CHANGE \/ \/
        maxID = DbIds.LastIndex;
        // /\ /\ DO NOT CHANGE /\ /\
    }