示例#1
0
    private void GenerateObject(System.Type type)
    {
        RaycastHit hit;

        if (!FireRay(out hit))
        {
            return;
        }

        if (hit.collider.tag != "Environment" && hit.collider.tag != "Rock")
        {
            return;
        }

        PowerObject obj = ObjectManager.instance.GeneratePowerObject(type, hit.point + Vector3.up * 10);

        if (!obj)
        {
            return;
        }

        int powerRequired = obj.GetPower();

        if (powerRequired > power)
        {
            ObjectManager.instance.RemoveObject(obj);
            Destroy(obj.gameObject);
            return;
        }

        power -= powerRequired;
    }
示例#2
0
 public void AddObject(PowerObject obj)
 {
     if (objects.ContainsKey(obj.GetInstanceID()) == false)
     {
         objects.Add(obj.GetInstanceID(), obj);
     }
 }
示例#3
0
    public bool TestView(PowerObject powerObject)
    {
        //height check
        if (!powerObject.CanAbsorb(this))
        {
            return(false);
        }

        //reassignment lock
        if (absorbTarget == powerObject || absorbTarget == null)
        {
            absorbTarget = powerObject;
            if (timer > 1.0F)
            {
                if (absorbTarget.GetPower() > 0)
                {
                    powerObject.SetPower(powerObject.GetPower() - 1);
                    power++;
                    PlantTree();
                }
                else
                {
                    powerObject.Absorb();
                    absorbTarget = null;
                }
            }
            else
            {
                timer += Time.deltaTime;
            }
        }

        return(true);
    }
示例#4
0
        private void Power_PropertyChanged(object sender, PropertyChangedEventArgs propertyChangedEventArgs)
        {
            string strPropertyName = propertyChangedEventArgs?.PropertyName;

            if (strPropertyName == nameof(PowerObject.FreeLevels) || strPropertyName == nameof(PowerObject.TotalRating))
            {
                PowerObject.DisplayPoints = PowerObject.PowerPoints.ToString(GlobalOptions.CultureInfo);
                tipTooltip.SetToolTip(lblPowerPoints, PowerObject.ToolTip());
                cmdDelete.Enabled = PowerObject.FreeLevels == 0;
            }
            if (strPropertyName == nameof(PowerObject.Name))
            {
                PowerObject.CharacterObject.SkillsSection.PropertyChanged -= Power_PropertyChanged;
                if (PowerObject.Name == "Improved Ability (skill)")
                {
                    PowerObject.CharacterObject.SkillsSection.PropertyChanged += Power_PropertyChanged;
                }
            }
            // Super hacky solution, but we need all values updated properly if maxima change for any reason
            if (strPropertyName == nameof(PowerObject.TotalMaximumLevels))
            {
                nudRating.Maximum = PowerObject.TotalMaximumLevels;
            }
            else if (PowerObject.Name == "Improved Ability (skill)" || strPropertyName == nameof(PowerObject.CharacterObject.MAG.TotalValue) || strPropertyName == nameof(PowerObject.CharacterObject.MAGAdept.TotalValue))
            {
                PowerObject.ForceEvent(nameof(PowerObject.TotalMaximumLevels));
            }
        }
示例#5
0
 public override bool CanAbsorb(PowerObject absorber)
 {
     if (absorber.tag != "Player")
     {
         return(false);
     }
     else
     {
         return(base.CanAbsorb(absorber));
     }
 }
示例#6
0
    public void Unpopulate()
    {
        PowerObject[] itemsToRemove = new PowerObject[objects.Count];
        objects.Values.CopyTo(itemsToRemove, 0);

        foreach (PowerObject value in itemsToRemove)
        {
            //value.Reset();
            value.KillObject();
        }

        objects.Clear();
    }
示例#7
0
    public virtual bool CanAbsorb(PowerObject absorber)
    {
        Vector3 blockPos = new Vector3(transform.position.x, transform.position.y, transform.position.z);

        ObjectManager.instance.GetTerrainPos(ref blockPos);

        if (fadeOut || blockPos.y > absorber.transform.position.y)
        {
            return(false);
        }

        return(true);
    }
示例#8
0
    public PowerObject GeneratePowerObject(System.Type type, Vector3?position)
    {
        GameObject newObj = null;

        if (position != null)
        {
            Vector3 desiredPos = new Vector3(position.Value.x, position.Value.y, position.Value.z);

            if (!CanPositionObject(ref desiredPos))
            {
                return(null);
            }

            newObj = InstantiateObjectPrefab(type, desiredPos);
            //InstantiateObject(gameObj, desiredPos, Quaternion.identity);
            if (newObj)
            {
                return(newObj.transform.root.GetComponent <PowerObject>());
            }
        }
        else
        {
            Vector3 farFarAway = new Vector3(99999.0f, 99999.0f, 99999.0f);
            //newObj = InstantiateObject(gameObj, farFarAway, Quaternion.identity);
            newObj = InstantiateObjectPrefab(type, farFarAway);
            if (newObj)
            {
                PowerObject powerObj = newObj.transform.root.GetComponent <PowerObject>();
                if (powerObj)
                {
                    if (powerObj.SetPositionRandom())
                    {
                        return(powerObj);
                    }
                    else
                    {
                        //failed to find an empty space
                        RemoveObject(powerObj);
                        Destroy(powerObj.gameObject);
                    }
                }
            }
        }

        return(null);
    }
示例#9
0
    public PowerObject GetObjectAtPos(Vector3 pos)
    {
        PowerObject best = null;

        terrain.ClampPosToGrid(ref pos);

        foreach (PowerObject value in objects.Values)
        {
            if (pos.x == value.transform.root.transform.position.x &&
                pos.z == value.transform.root.transform.position.z &&
                (!best || value.transform.root.transform.position.y > best.transform.root.position.y))
            {
                best = value;
            }
        }

        return(best);
    }
示例#10
0
        private void Power_PropertyChanged(object sender, PropertyChangedEventArgs propertyChangedEventArgs)
        {
            switch (propertyChangedEventArgs?.PropertyName)
            {
            case nameof(PowerObject.CharacterObject.MAG.TotalValue):
            //TODO: For skills - probably needs to be rebound to something more specific?
            case "Karma":
                PowerObject.ForceEvent(nameof(PowerObject.TotalMaximumLevels));
                break;

            case nameof(PowerObject.FreeLevels):
            case nameof(PowerObject.TotalRating):
                PowerObject.DisplayPoints = PowerObject.PowerPoints.ToString();
                tipTooltip.SetToolTip(lblPowerPoints, PowerObject.ToolTip());
                cmdDelete.Enabled = PowerObject.FreeLevels == 0;
                break;
            }
        }
示例#11
0
    public void PosessBody(PowerObject obj)
    {
        DebugUtils.Assert(obj != null);
        if (obj == null)
        {
            return;
        }

        if (obj.GetType() != typeof(PO_Robot))
        {
            return;
        }

        if (m_currentBody)
        {
            foreach (Renderer ren in m_currentBody.GetComponentsInChildren <Renderer>(true))
            {
                ren.enabled = true;
            }

            m_currentBody.transform.parent = null;
        }

        m_transform.root.position   = obj.transform.position;
        obj.transform.parent        = m_transform;
        obj.transform.localRotation = Quaternion.identity;
        obj.transform.localPosition = Vector3.zero;

        if (m_currentBody)
        {
            //look at the body you came from
            hPadLook = GetComponent <PadLook>();
            hPadLook.LookAt(m_currentBody.transform.position);

            m_MouseLook = GetComponent <MouseLook>();
        }

        m_currentBody = obj;

        foreach (Renderer ren in m_currentBody.GetComponentsInChildren <Renderer>(true))
        {
            ren.enabled = false;
        }
    }
示例#12
0
 public void PopulatePlayer()
 {
     if (robot && player)
     {
         PowerObject newRobot = GeneratePowerObject(typeof(PO_Robot), null);
         if (newRobot)
         {
             GameObject newObj = InstantiateObject(player, newRobot.transform.root.transform.position, Quaternion.identity);
             if (newObj)
             {
                 PO_Player newPlayer = newObj.transform.root.GetComponent <PO_Player>();
                 if (newPlayer)
                 {
                     newPlayer.PosessBody(newRobot);
                 }
             }
         }
     }
 }
示例#13
0
    private CursorState FireAimRay()
    {
        RaycastHit hit;
        Ray        grabRay = new Ray(m_cameraTransform.position, m_cameraTransform.forward);

        if (Physics.Raycast(grabRay, out hit, grabDistance, _absorbableTargetMask))
        {
            PowerObject obj = hit.transform.root.GetComponentInChildren <PowerObject>();
            if (obj != null)
            {
                return(obj.CanAbsorb(this) || obj.transform.root.GetComponentInChildren <PO_Rock>() != null ? CursorState.Hitting : CursorState.OutOfRange);
            }
            else
            {
                return(CursorState.OutOfRange);
            }
        }

        return(CursorState.Aiming);
    }
示例#14
0
    //All items at places, whose base area is visible can be absorbed
    //aim at the base to absorb the object
    //Rocks can be absorbed without seeing the corresponding base area
    private void FireAbsorbRay()
    {
        if (!m_canAbsorb)
        {
            return;
        }

        RaycastHit hit;
        Ray        grabRay = new Ray(m_cameraTransform.position, m_cameraTransform.forward);

        Debug.DrawRay(m_cameraTransform.position, m_cameraTransform.forward * grabDistance);

        if (!Physics.Raycast(grabRay, out hit, grabDistance))
        {
            return;
        }

        PowerObject obj = null;

        switch (hit.collider.transform.root.tag)
        {
        case "Tree":
        case "Rock":
        case "Robot":
        case "Sentinel":
            obj = hit.collider.transform.root.gameObject.GetComponent <PowerObject>();
            break;

        case "Environment":
            obj = ObjectManager.instance.GetObjectAtPos(hit.point);
            break;
        }

        if (obj != null && (obj.GetType() == typeof(PO_Rock) || obj.CanAbsorb(this)))
        {
            power += obj.GetPower();
            obj.Absorb();
        }
    }
示例#15
0
        private void cmdDelete_Click(object sender, EventArgs e)
        {
            // Cache the parentform prior to deletion, otherwise the relationship is broken.
            Form frmParent = ParentForm;

            if (PowerObject.FreeLevels > 0)
            {
                string strImprovementSourceName = PowerObject.CharacterObject.Improvements.FirstOrDefault(x => x.ImproveType == Improvement.ImprovementType.AdeptPowerFreePoints && x.ImprovedName == PowerObject.Name && x.UniqueName == PowerObject.Extra)?.SourceName;
                Gear   objGear = PowerObject.CharacterObject.Gear.FirstOrDefault(x => x.Bonded && x.InternalId == strImprovementSourceName);
                if (objGear != null)
                {
                    objGear.Equipped = false;
                    objGear.Extra    = string.Empty;
                }
            }
            PowerObject.DeletePower();

            if (frmParent is CharacterShared objParent)
            {
                objParent.IsCharacterUpdateRequested = true;
            }
        }
示例#16
0
 protected HardwiredObject(IPBContainer parent, string name, PowerObject super_class) : base(parent, name, super_class)
 {
     Hardwired.AddClass(this);
 }
示例#17
0
 protected ValueType(IPBContainer parent, string name, PowerObject super_class) : base(parent, name, super_class)
 {
 }
示例#18
0
    private void PreviewGenerateObject(System.Type type)
    {
        if (!FireRay(out m_hit))
        {
            return;
        }

        string colliderTag = m_hit.collider.tag;

        if (colliderTag != "Environment" && colliderTag != "Rock")
        {
            return;
        }

        Vector3 newPos = m_hit.point;

        if (!ObjectManager.instance.CanPositionObject(ref newPos))
        {
            if (m_previewObject != null && m_previewObject.gameObject.activeSelf)
            {
                m_previewObject.gameObject.SetActive(false);
            }

            return;
        }

        bool generateObject = false;

        if (m_previewObject == null)
        {
            generateObject = true;
        }
        else if (m_previewObject.GetType() != type)
        {
            Destroy(m_previewObject);
            generateObject = true;
        }

        if (generateObject)
        {
            m_previewObject = ObjectManager.instance.InstantiateObjectPrefab(type, newPos).GetComponent <PowerObject>();
            ObjectManager.instance.RemoveObject(m_previewObject);
            foreach (Collider col in m_previewObject.GetComponentsInChildren <Collider>())
            {
                col.enabled = false;
            }

            Renderer[] renderers = m_previewObject.GetComponentsInChildren <Renderer>();
            foreach (Renderer r in renderers)
            {
                r.material = _previewMaterial;
            }
        }
        else
        {
            m_previewObject.transform.position = newPos;

            if (!m_previewObject.gameObject.activeSelf)
            {
                m_previewObject.gameObject.SetActive(true);
            }
        }

        //Debug.DrawLine(newPos, newPos + Vector3.up, Color.red, 5.0f, false);
    }
    void HandlePlayer(GameObject CurrentPerson, int PlayerNumber)
    {
        GameObject collectObject;
        GameObject PowerObject;
        Vector3    Zombiediff;
        Vector3    Zombie1diff;
        Vector3    Playerdiff;
        Vector3    PowerDiff;
        int        randomnumber;

        collectObject = NearestObjectByTag("Collectable", CurrentPerson.transform.position);
        if (collectObject == null)
        {
            UserWins();
        }
        Vector3 Positiondiff = collectObject.transform.position - CurrentPerson.transform.position;
        float   DistanceAway = Positiondiff.sqrMagnitude;

        if (PlayerNumber != playerNum.Value)
        {
            if (CurrentPerson.GetComponent <SteeringController> ().IsAtTarget() || CurrentPerson.GetComponent <SteeringController> ().IsStopped())
            {
                CurrentPerson.GetComponent <SteeringController> ().Target = new Vector3(Random.Range(248f, 259f), 0.1f, Random.Range(1142f, 1169f));
            }
            return;
        }

        InteractionSystem playerIS = player.Value.GetComponent <InteractionSystem>();

        PowerObject = NearestObjectByTag("PowerUp", CurrentPerson.transform.position);

        if (PowerObject != null)
        {
            PowerDiff = PowerObject.transform.position - CurrentPerson.transform.position;
            if (PowerDiff.sqrMagnitude < 3 && MusicInt.Value == 0)
            {
                playerIS.StartInteraction(FullBodyBipedEffector.RightHand, PowerObject.GetComponent <InteractionObject>(), false);

                MusicInt = Val.V(() => 1);

                PowerObject.SetActive(false);
            }
        }

        if (cameraOn.Value == 1)
        {
            Zombiediff        = zombie.transform.position - player.Value.transform.position;
            Zombie1diff       = zombie1.transform.position - player.Value.transform.position;
            Playerdiff        = new Vector3(0, 0, 0);
            FirstZombie.text  = "First Zombie: " + (int)Zombiediff.sqrMagnitude;
            SecondZombie.text = "Second Zombie: " + (int)Zombie1diff.sqrMagnitude;
            PlayerText.text   = "Player: " + (int)Playerdiff.sqrMagnitude;

            FirstZombie.enabled  = true;
            SecondZombie.enabled = true;
            PlayerText.enabled   = true;
        }
        if (cameraOn.Value == 2)
        {
            Zombiediff        = new Vector3(0, 0, 0);
            Zombie1diff       = zombie1.transform.position - zombie.transform.position;
            Playerdiff        = player.Value.transform.position - zombie.transform.position;
            FirstZombie.text  = "First Zombie: " + (int)Zombiediff.sqrMagnitude;
            SecondZombie.text = "Second Zombie: " + (int)Zombie1diff.sqrMagnitude;
            PlayerText.text   = "Player: " + (int)Playerdiff.sqrMagnitude;

            FirstZombie.enabled  = true;
            SecondZombie.enabled = true;
            PlayerText.enabled   = true;
        }
        if (cameraOn.Value == 3)
        {
            Zombiediff        = zombie.transform.position - zombie1.transform.position;
            Zombie1diff       = new Vector3(0, 0, 0);
            Playerdiff        = player.Value.transform.position - zombie1.transform.position;
            FirstZombie.text  = "First Zombie: " + (int)Zombiediff.sqrMagnitude;
            SecondZombie.text = "Second Zombie: " + (int)Zombie1diff.sqrMagnitude;
            PlayerText.text   = "Player: " + (int)Playerdiff.sqrMagnitude;

            FirstZombie.enabled  = true;
            SecondZombie.enabled = true;
            PlayerText.enabled   = true;
        }
        if (cameraOn.Value == 1 && UserControl.Value == true)
        {
            if (DistanceAway < 4)
            {
                collectObject.SetActive(false);
            }

            return;
        }

        if (PlayerNumber == playerNum.Value)
        {
            if (CurrentPerson.GetComponent <CharacterMecanim> ().Body.NavCanReach(collectObject.transform.position) == false)
            {
                CurrentPerson.GetComponent <SteeringController> ().Target = DoorOpenPoint.position;
            }
            else
            {
                if (DistanceAway < 3)
                {
                    collectObject.SetActive(false);
                }
                else
                {
                    CurrentPerson.GetComponent <SteeringController> ().Target = collectObject.transform.position;
                }
            }
        }
        else
        {
            return;
        }
    }
示例#20
0
 public override bool CanAbsorb(PowerObject absorber)
 {
     return(sentinelAbsorbed ? false :  base.CanAbsorb(absorber));
 }
示例#21
0
 public void RemoveObject(PowerObject obj)
 {
     objects.Remove(obj.GetInstanceID());
 }