public static void UseEventListener <EntityT>(this EntityBehavior <EntityT> entityBehavior) where EntityT : Entity { if (entityBehavior.Entity.GetComponent <EventBus>()) { (entityBehavior as IEventBehaviour)?.Bind(entityBehavior.Entity.GetComponent <EventBus>()); } }
void Start() { typePicker = gameObject.AddComponent <TypePickerGUI>(); typePicker.categoryNames = GameScripts.behaviorTabNames; UpdateBehaviorList(); typePicker.handler = (PropertiesObjectType type) => { PropertiesObjectType behaviorTypeWithTarget = new PropertiesObjectType( type, () => { EntityBehavior behavior = (EntityBehavior)type.Create(); if (targetEntityIsActivator) { behavior.targetEntityIsActivator = true; } else if (targetEntity != null) { behavior.targetEntity = new EntityReference(targetEntity); } return(behavior); }); handler(behaviorTypeWithTarget); Destroy(this); }; typePicker.enabled = false; }
private void ReadEntity(JSONObject entityObject, Entity entity) { ReadPropertiesObject(entityObject, entity); if (entityObject["sensor"] != null) { JSONObject sensorObject = entityObject["sensor"].AsObject; string sensorName = sensorObject["name"]; var sensorType = GameScripts.FindTypeWithName(GameScripts.sensors, sensorName); if (sensorType == null) { warnings.Add("Unrecognized sensor: " + sensorName); } else { Sensor newSensor = (Sensor)sensorType.Create(); ReadPropertiesObject(sensorObject, newSensor); entity.sensor = newSensor; } } if (entityObject["behaviors"] != null) { foreach (JSONNode behaviorNode in entityObject["behaviors"].AsArray) { JSONObject behaviorObject = behaviorNode.AsObject; string behaviorName = behaviorObject["name"]; var behaviorType = GameScripts.FindTypeWithName(GameScripts.behaviors, behaviorName); if (behaviorType == null) { warnings.Add("Unrecognized behavior: " + behaviorName); continue; } EntityBehavior newBehavior = (EntityBehavior)behaviorType.Create(); ReadPropertiesObject(behaviorObject, newBehavior); if (fileWriterVersion <= 5 && behaviorObject["target"] != null) { if (behaviorObject["target"] == "activator") { newBehavior.target = new EntityBehavior.BehaviorTargetProperty(true); } else { newBehavior.target = new EntityBehavior.BehaviorTargetProperty( new EntityReference(new System.Guid(behaviorObject["target"]))); } } entity.behaviors.Add(newBehavior); } } if (entityObject["id"] != null) { System.Guid id = new System.Guid(entityObject["id"]); EntityReference.AddExistingEntityId(entity, id); } }
private void UpdateBehaviorOnThisFrame() { EntityBehavior nextBehavior = currentBehavior?.GetCurrentBehavior(); if (nextBehavior != null) { BehaviorSwitch(nextBehavior); } }
void OnTriggerEnter(Collider other) { Transform colliderTransform = other.transform; EntityBehavior entityBehavior = colliderTransform.GetComponent <EntityBehavior>(); if (entityBehavior) { BoxCollider box = gameObject.GetComponent <BoxCollider>(); entityBehavior.OnKnockBarrier(box); } }
public static void BehaviorUpdated(Entity entity, EntityBehavior behavior) { if (!IsEditorPreviewBehavior(behavior)) { return; } EntityDeselected(); if (entity != null) { EntitySelected(entity); } }
static int RemoveAllEffectGameObject(IntPtr L) { try { ToLua.CheckArgsCount(L, 1); EntityBehavior obj = (EntityBehavior)ToLua.CheckObject(L, 1, typeof(EntityBehavior)); obj.RemoveAllEffectGameObject(); return(0); } catch (Exception e) { return(LuaDLL.toluaL_exception(L, e)); } }
static int OnRecycle(IntPtr L) { try { ToLua.CheckArgsCount(L, 1); EntityBehavior obj = (EntityBehavior)ToLua.CheckObject(L, 1, typeof(EntityBehavior)); obj.OnRecycle(); return(0); } catch (Exception e) { return(LuaDLL.toluaL_exception(L, e)); } }
static int UpdateLogic(IntPtr L) { try { ToLua.CheckArgsCount(L, 2); EntityBehavior obj = (EntityBehavior)ToLua.CheckObject(L, 1, typeof(EntityBehavior)); float arg0 = (float)LuaDLL.luaL_checknumber(L, 2); obj.UpdateLogic(arg0); return(0); } catch (Exception e) { return(LuaDLL.toluaL_exception(L, e)); } }
static int OnKnockBarrier(IntPtr L) { try { ToLua.CheckArgsCount(L, 2); EntityBehavior obj = (EntityBehavior)ToLua.CheckObject(L, 1, typeof(EntityBehavior)); UnityEngine.BoxCollider arg0 = (UnityEngine.BoxCollider)ToLua.CheckUnityObject(L, 2, typeof(UnityEngine.BoxCollider)); obj.OnKnockBarrier(arg0); return(0); } catch (Exception e) { return(LuaDLL.toluaL_exception(L, e)); } }
static int CastEffect(IntPtr L) { try { int count = LuaDLL.lua_gettop(L); EntityBehavior obj = (EntityBehavior)ToLua.CheckObject(L, 1, typeof(EntityBehavior)); string arg0 = ToLua.CheckString(L, 2); object[] arg1 = ToLua.ToParamsObject(L, 3, count - 2); obj.CastEffect(arg0, arg1); return(0); } catch (Exception e) { return(LuaDLL.toluaL_exception(L, e)); } }
// Start is called before the first frame update void Start() { if (entity == null) { Debug.LogError("There is no entity in the game, please setup one."); return; } OxyScript = GameObject.Find("OxygenBar").GetComponent <OxygenBarScript>(); scriptTimer = GameObject.Find("TimeRemainingText").GetComponent <Begin_Script>(); GMScript = GameObject.Find("GameManager").GetComponent <GameManagerScript>(); scriptSpeed = GameObject.Find("EntityUnit").GetComponent <EntityBehavior>(); scriptSpeed.speed = 0; }
static int GetEntityBehavior(IntPtr L) { try { ToLua.CheckArgsCount(L, 2); EntityBehaviorMgr obj = (EntityBehaviorMgr)ToLua.CheckObject(L, 1, typeof(EntityBehaviorMgr)); string arg0 = ToLua.CheckString(L, 2); EntityBehavior o = obj.GetEntityBehavior(arg0); ToLua.Push(L, o); return(1); } catch (Exception e) { return(LuaDLL.toluaL_exception(L, e)); } }
public override EntityBehavior GetCurrentBehavior() { direction = transform.position - objectToFollow.transform.position; FlipSpriteAndHitbox(); EntityBehavior resultBehavior = this; // Step 1. Perform the desired behavior moveDir = (objectToFollow.transform.position - this.transform.position).normalized; _rb.velocity = new Vector3( moveDir.x * movementSpeed, _rb.velocity.y, _rb.velocity.z ); // Step 2. Determine if behavior should switch var rangeTest = Vector3.Distance(objectToFollow.transform.position, this.transform.position); // #if UNITY_EDITOR // Debug.Log("Distance: " + rangeTest); // #endif if (rangeTest > followRange) { resultBehavior = idleBehavior; // slows the rigidbody... _rb.velocity *= movementFalloff; } foreach (var hit in Physics.SphereCastAll(transform.position, sphereCastRadius, Vector3.up, 0f)) { if (hit.collider.gameObject.tag == "Player") { _rb.velocity *= movementFalloff; resultBehavior = attackBehavior; _anim.SetTrigger("attack"); attackBehavior.ResetAtkTimer(); } } // Step 3. return new behavior return(resultBehavior); }
static int set_Speed(IntPtr L) { object o = null; try { o = ToLua.ToObject(L, 1); EntityBehavior obj = (EntityBehavior)o; float arg0 = (float)LuaDLL.luaL_checknumber(L, 2); obj.Speed = arg0; return(0); } catch (Exception e) { return(LuaDLL.toluaL_exception(L, e, o == null ? "attempt to index Speed on a nil value" : e.Message)); } }
static int set_uid(IntPtr L) { object o = null; try { o = ToLua.ToObject(L, 1); EntityBehavior obj = (EntityBehavior)o; string arg0 = ToLua.CheckString(L, 2); obj.uid = arg0; return(0); } catch (Exception e) { return(LuaDLL.toluaL_exception(L, e, o == null ? "attempt to index uid on a nil value" : e.Message)); } }
static int get_effectComp(IntPtr L) { object o = null; try { o = ToLua.ToObject(L, 1); EntityBehavior obj = (EntityBehavior)o; EffectComp ret = obj.effectComp; ToLua.Push(L, ret); return(1); } catch (Exception e) { return(LuaDLL.toluaL_exception(L, e, o == null ? "attempt to index effectComp on a nil value" : e.Message)); } }
static int get_isRecyled(IntPtr L) { object o = null; try { o = ToLua.ToObject(L, 1); EntityBehavior obj = (EntityBehavior)o; bool ret = obj.isRecyled; LuaDLL.lua_pushboolean(L, ret); return(1); } catch (Exception e) { return(LuaDLL.toluaL_exception(L, e, o == null ? "attempt to index isRecyled on a nil value" : e.Message)); } }
static int get_uid(IntPtr L) { object o = null; try { o = ToLua.ToObject(L, 1); EntityBehavior obj = (EntityBehavior)o; string ret = obj.uid; LuaDLL.lua_pushstring(L, ret); return(1); } catch (Exception e) { return(LuaDLL.toluaL_exception(L, e, o == null ? "attempt to index uid on a nil value" : e.Message)); } }
static int get_entityType(IntPtr L) { object o = null; try { o = ToLua.ToObject(L, 1); EntityBehavior obj = (EntityBehavior)o; int ret = obj.entityType; LuaDLL.lua_pushinteger(L, ret); return(1); } catch (Exception e) { return(LuaDLL.toluaL_exception(L, e, o == null ? "attempt to index entityType on a nil value" : e.Message)); } }
static int get_Speed(IntPtr L) { object o = null; try { o = ToLua.ToObject(L, 1); EntityBehavior obj = (EntityBehavior)o; float ret = obj.Speed; LuaDLL.lua_pushnumber(L, ret); return(1); } catch (Exception e) { return(LuaDLL.toluaL_exception(L, e, o == null ? "attempt to index Speed on a nil value" : e.Message)); } }
private void ReadEntity(MessagePackObjectDictionary entityDict, Entity entity) { ReadPropertiesObject(entityDict, entity); if (entityDict.ContainsKey(FileKeys.ENTITY_SENSOR)) { var sensorDict = entityDict[FileKeys.ENTITY_SENSOR].AsDictionary(); string sensorName = sensorDict[FileKeys.PROPOBJ_NAME].AsString(); var sensorType = GameScripts.FindTypeWithName(GameScripts.sensors, sensorName); if (sensorType == null) { warnings.Add("Unrecognized sensor: " + sensorName); } else { Sensor newSensor = (Sensor)sensorType.Create(); ReadPropertiesObject(sensorDict, newSensor); entity.sensor = newSensor; } } if (entityDict.ContainsKey(FileKeys.ENTITY_BEHAVIORS)) { foreach (var behaviorObj in entityDict[FileKeys.ENTITY_BEHAVIORS].AsList()) { var behaviorDict = behaviorObj.AsDictionary(); string behaviorName = behaviorDict[FileKeys.PROPOBJ_NAME].AsString(); var behaviorType = GameScripts.FindTypeWithName(GameScripts.behaviors, behaviorName); if (behaviorType == null) { warnings.Add("Unrecognized behavior: " + behaviorName); continue; } EntityBehavior newBehavior = (EntityBehavior)behaviorType.Create(); ReadPropertiesObject(behaviorDict, newBehavior); entity.behaviors.Add(newBehavior); } } if (entityDict.ContainsKey(FileKeys.ENTITY_ID)) { System.Guid id = new System.Guid(entityDict[FileKeys.ENTITY_ID].AsString()); EntityReference.AddExistingEntityId(entity, id); } }
public override void onAssetAsyncLoadObjectCB(string name, UnityEngine.Object obj, Asset asset) { this.name = asset.source; if (hud_infosObj != null) { hud_infosObj.transform.parent = null; } if (gameObject != null) { UnityEngine.GameObject.Destroy(gameObject); gameObject = null; } base.onAssetAsyncLoadObjectCB(name, obj, asset); gameEntity = gameObject.GetComponent <EntityBehavior>(); gameEntity.seo = this; gameEntity.isPlayer = isPlayer; }
public void Destroy(string uid) { EntityBehavior e = GetEntityBehavior(uid); if (e != null) { GameObject gameObject = e.gameObject; if (gameObject != null) { e.OnRecycle(); Transform body = gameObject.transform.FindChild("Body"); if (body != null) { body.name = gameObject.name; // 名字改回去 ObjectPoolManager.RecycleObject(body.gameObject); // 只回收Body } GameObject.DestroyImmediate(gameObject); } entityBehaviors.Remove(uid); } }
public Battle(EntityCharacteristic ec1, EntityCharacteristic ec2) { EntityBehavior eb1 = Interaction.Get(ec1.Type, ec2.Type); EntityBehavior eb2 = Interaction.Get(ec2.Type, ec1.Type); this.Luck = false; if (eb1 == eb2) { bool firstwon = this._random.NextDouble() < (ec1.WinRate / (ec1.WinRate + ec2.WinRate)); this.Winner = firstwon ? ec1 : ec2; this.Loser = firstwon ? ec2 : ec1; this.Luck = true; } else if (eb1 == EntityBehavior.Run || eb2 == EntityBehavior.Run) { this.Winner = (eb1 == EntityBehavior.Run) ? ec2 : ec1; this.Loser = (eb1 == EntityBehavior.Run) ? ec1 : ec2; } else if (eb1 != eb2) { this.Winner = (eb1 == EntityBehavior.Attack) ? ec1 : ec2; this.Loser = (eb1 == EntityBehavior.Attack) ? ec2 : ec1; } if (this.Winner != null) { this.WBehavior = Interaction.Get(this.Winner.Type, this.Loser.Type); } else { this.WBehavior = null; } if (this.Loser != null) { this.LBehavior = Interaction.Get(this.Loser.Type, this.Winner.Type); } else { this.LBehavior = null; } }
public override EntityBehavior GetCurrentBehavior() { EntityBehavior resultBehavior = this; // Step 1. Perform the desired behavior // Step 2. Determine if behavior should switch foreach (var hit in Physics.SphereCastAll(transform.position, sphereCastRadius, Vector3.up, 0f)) { if (hit.collider.gameObject.tag == "Player") { resultBehavior = followBehavior; followBehavior.objectToFollow = hit.collider.gameObject; followBehavior.followRange = sphereCastRadius; } } // Step 3. return new behavior return(resultBehavior); }
static int AddEffectGameObject(IntPtr L) { try { ToLua.CheckArgsCount(L, 9); EntityBehavior obj = (EntityBehavior)ToLua.CheckObject(L, 1, typeof(EntityBehavior)); string arg0 = ToLua.CheckString(L, 2); string arg1 = ToLua.CheckString(L, 3); float arg2 = (float)LuaDLL.luaL_checknumber(L, 4); UnityEngine.Vector3 arg3 = ToLua.ToVector3(L, 5); UnityEngine.Vector3 arg4 = ToLua.ToVector3(L, 6); UnityEngine.Vector3 arg5 = ToLua.ToVector3(L, 7); bool arg6 = LuaDLL.luaL_checkboolean(L, 8); bool arg7 = LuaDLL.luaL_checkboolean(L, 9); obj.AddEffectGameObject(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7); return(0); } catch (Exception e) { return(LuaDLL.toluaL_exception(L, e)); } }
public override EntityBehavior GetCurrentBehavior() { EntityBehavior resultBehavior = this; // Step 1. Perform the desired behavior UpdateAtkTimer(); #if UNITY_EDITOR Debug.Log("[Entity] attacking [Player]"); #endif // Step 2. Determine if behavior should switch if (currAtkTime == 0) { resultBehavior = idleBehavior; } // Step 3. return new behavior return(resultBehavior); }
void SetBehavior(EntityBehavior behavior) { entityBehavior = behavior; }
private void EntityPropertiesGUI() { Entity singleSelectedEntity = null; if (selectedEntities.Count == 1) { singleSelectedEntity = selectedEntities[0]; } EntityReferencePropertyManager.Reset(singleSelectedEntity); // could be null and that's fine (?) GUILayout.BeginVertical(GUI.skin.box); PropertiesObjectGUI(editEntity); GUILayout.EndVertical(); if (singleSelectedEntity != null && !(singleSelectedEntity is PlayerObject)) { GUILayout.BeginHorizontal(); if (GUIUtils.HighlightedButton("Clone")) { if (singleSelectedEntity is ObjectEntity) { ObjectEntity clone = (ObjectEntity)(singleSelectedEntity.Clone()); var pickerGUI = gameObject.AddComponent <FacePickerGUI>(); pickerGUI.voxelArray = voxelArray; pickerGUI.message = "Tap to place clone"; pickerGUI.pickAction = () => { if (!voxelArray.PlaceObject(clone)) { DialogGUI.ShowMessageDialog(gameObject, ActionBarGUI.OBJECT_NO_ROOM_ERROR); } }; } else if (singleSelectedEntity is Substance) { Substance clone = (Substance)(singleSelectedEntity.Clone()); clone.defaultPaint = voxelArray.GetSelectedPaint(); clone.defaultPaint.addSelected = false; clone.defaultPaint.storedSelected = false; voxelArray.substanceToCreate = clone; var createGUI = gameObject.AddComponent <CreateSubstanceGUI>(); createGUI.voxelArray = voxelArray; } } if (GUIUtils.HighlightedButton("Delete")) { DeleteButton(); } GUILayout.EndHorizontal(); } if (selectedEntities.Count > 1) { if (GUIUtils.HighlightedButton("Delete")) { DeleteButton(); } } TutorialGUI.TutorialHighlight("change sensor"); if (GUILayout.Button("Change Sensor")) { TypePickerGUI sensorMenu = gameObject.AddComponent <TypePickerGUI>(); sensorMenu.title = "Change Sensor"; sensorMenu.categories = new PropertiesObjectType[][] { GameScripts.sensors }; sensorMenu.handler = (PropertiesObjectType type) => { foreach (Entity entity in selectedEntities) { entity.sensor = (Sensor)type.Create(); } voxelArray.unsavedChanges = true; UpdateEditEntity(); }; } TutorialGUI.ClearHighlight(); GUILayout.BeginVertical(GUI.skin.box); PropertiesObjectGUI(editSensor, " Sensor"); GUILayout.EndVertical(); TutorialGUI.TutorialHighlight("add behavior"); if (GUILayout.Button("Add Behavior")) { NewBehaviorGUI behaviorMenu = gameObject.AddComponent <NewBehaviorGUI>(); behaviorMenu.title = "Add Behavior"; behaviorMenu.self = singleSelectedEntity; behaviorMenu.voxelArray = voxelArray; behaviorMenu.handler = (PropertiesObjectType behaviorType) => { foreach (Entity entity in selectedEntities) { EntityBehavior newBehavior = (EntityBehavior)behaviorType.Create(); // with multiple selected entities, NewBehaviorGUI doesn't check if behaviors // are valid for the selected entities if (newBehavior.targetEntity.entity == null && !newBehavior.targetEntityIsActivator && !newBehavior.BehaviorObjectType().rule(entity)) { continue; } entity.behaviors.Add(newBehavior); EntityPreviewManager.BehaviorUpdated(singleSelectedEntity, newBehavior); } voxelArray.unsavedChanges = true; UpdateEditEntity(); scrollVelocity = new Vector2(0, 2000 * editBehaviors.Count); // scroll to bottom }; } TutorialGUI.ClearHighlight(); Color guiBaseColor = GUI.backgroundColor; StoredEntityBehavior behaviorToRemove = null; foreach (StoredEntityBehavior storedBehavior in editBehaviors) { TutorialGUI.TutorialHighlight("behaviors"); Entity behaviorTarget = null; if (storedBehavior.sharedTarget) { behaviorTarget = storedBehavior.allBehaviors[0].targetEntity.entity; } if (behaviorTarget != null) { EntityReferencePropertyManager.Next(behaviorTarget); GUI.backgroundColor = guiBaseColor * EntityReferencePropertyManager.GetColor(); } EntityReferencePropertyManager.SetBehaviorTarget(behaviorTarget); GUILayout.BeginVertical(GUI.skin.box); GUI.backgroundColor = guiBaseColor; PropertiesObjectGUI(storedBehavior, " Behavior", () => EntityPreviewManager.BehaviorUpdated(singleSelectedEntity, storedBehavior.allBehaviors[0])); if (GUILayout.Button("Remove")) { behaviorToRemove = storedBehavior; } GUILayout.EndVertical(); // clear this every time, in case the next target is the same EntityReferencePropertyManager.SetBehaviorTarget(null); } if (behaviorToRemove != null) { foreach (Entity entity in selectedEntities) { foreach (EntityBehavior remove in behaviorToRemove.allBehaviors) { if (entity.behaviors.Remove(remove)) { break; } } } voxelArray.unsavedChanges = true; UpdateEditEntity(); EntityPreviewManager.BehaviorUpdated(singleSelectedEntity, behaviorToRemove.allBehaviors[0]); } if (mismatchedSelectedBehaviorCounts) { GUILayout.BeginVertical(GUI.skin.box); GUILayout.Label("(other behaviors...)", GUIStyleSet.instance.labelTitle); GUILayout.EndVertical(); } }