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; }
public void AddObject(PowerObject obj) { if (objects.ContainsKey(obj.GetInstanceID()) == false) { objects.Add(obj.GetInstanceID(), obj); } }
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); }
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)); } }
public override bool CanAbsorb(PowerObject absorber) { if (absorber.tag != "Player") { return(false); } else { return(base.CanAbsorb(absorber)); } }
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(); }
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); }
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); }
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); }
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; } }
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; } }
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); } } } } }
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); }
//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(); } }
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; } }
protected HardwiredObject(IPBContainer parent, string name, PowerObject super_class) : base(parent, name, super_class) { Hardwired.AddClass(this); }
protected ValueType(IPBContainer parent, string name, PowerObject super_class) : base(parent, name, super_class) { }
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; } }
public override bool CanAbsorb(PowerObject absorber) { return(sentinelAbsorbed ? false : base.CanAbsorb(absorber)); }
public void RemoveObject(PowerObject obj) { objects.Remove(obj.GetInstanceID()); }