/// <summary> /// 创建中立障碍物 /// </summary> /// <param name="vo">数据</param> private DisplayOwner CreateNPCObstacle(VOBase vo, CreateActorParam otherParam) { _npcObstacleDict.Add(vo.ObjID.ID, vo); var fixItem = GameObject.CreatePrimitive(PrimitiveType.Cube); // 设置父级 ParentManager.Instance().SetParent(fixItem, ParentManager.ObstacleParent); fixItem.layer = LayerMask.NameToLayer("Scenery"); //fixItem.name += i; var fix = fixItem.AddComponent<FixtureData>(); var unitWidth = ClusterManager.Single.UnitWidth; var mapWidth = ClusterManager.Single.MapWidth; var mapHeight = ClusterManager.Single.MapHeight; var offsetPos = LoadMap.Single.transform.position; fix.AllData.MemberData = new VOBase() { ObjID = new ObjectID(ObjectID.ObjectType.NPCObstacle), SpaceSet = 1, }; fix.transform.localScale = new Vector3(unitWidth, unitWidth, unitWidth); fix.transform.position = Utils.NumToPosition(offsetPos, new Vector2(otherParam.X, otherParam.Y), unitWidth, mapWidth, mapHeight); fix.X = otherParam.X * unitWidth - mapWidth * unitWidth * 0.5f + offsetPos.x; fix.Y = otherParam.Y * unitWidth - mapHeight * unitWidth * 0.5f + offsetPos.z; fix.Diameter = 1; var result = new DisplayOwner(fixItem, fix); // 添加至ClusterManager中 //ClusterManager.Single.Add(fix); DisplayerManager.Single.AddElement(vo.ObjID, result); return result; }
public static DisplayOwner CreateUnit(int unitType, CreateActorParam otherParam) { VOBase vo = new VOBase(); switch (unitType) { case (int)ObjectID.ObjectType.MyJiDi: vo = new JiDiVO(); vo.ObjID = new ObjectID(ObjectID.ObjectType.MyJiDi); break; case (int)ObjectID.ObjectType.EnemyJiDi: vo = new JiDiVO(); vo.ObjID = new ObjectID(ObjectID.ObjectType.EnemyJiDi); break; case (int)ObjectID.ObjectType.MySoldier: vo = new FightVO(); vo.ObjID = new ObjectID(ObjectID.ObjectType.MySoldier); break; case (int)ObjectID.ObjectType.EnemySoldier: vo = new FightVO(); vo.ObjID = new ObjectID(ObjectID.ObjectType.EnemySoldier); break; case (int)ObjectID.ObjectType.MyTower: vo = new TurretVO(); vo.ObjID = new ObjectID(ObjectID.ObjectType.MyTower); break; case (int)ObjectID.ObjectType.EnemyTower: vo = new TurretVO(); vo.ObjID = new ObjectID(ObjectID.ObjectType.EnemyTower); break; case (int)ObjectID.ObjectType.MyTank: vo = null; break; case (int)ObjectID.ObjectType.EnemyTank: vo = null; break; case (int)ObjectID.ObjectType.MyObstacle: vo = null; break; case (int)ObjectID.ObjectType.EnemyObstacle: vo = null; break; case (int)ObjectID.ObjectType.NPCObstacle: vo = new VOBase(); vo.ObjID = new ObjectID(ObjectID.ObjectType.NPCObstacle); break; } return(DataManager.Single.Create(vo, otherParam)); }
static int CreateUnit(IntPtr L) { try { ToLua.CheckArgsCount(L, 2); int arg0 = (int)LuaDLL.luaL_checknumber(L, 1); CreateActorParam arg1 = (CreateActorParam)ToLua.CheckObject(L, 2, typeof(CreateActorParam)); DisplayOwner o = FightUnitFactory.CreateUnit(arg0, arg1); ToLua.PushObject(L, o); return(1); } catch (Exception e) { return(LuaDLL.toluaL_exception(L, e)); } }
static int get_ColorMat(IntPtr L) { object o = null; try { o = ToLua.ToObject(L, 1); CreateActorParam obj = (CreateActorParam)o; bool ret = obj.ColorMat; LuaDLL.lua_pushboolean(L, ret); return(1); } catch (Exception e) { return(LuaDLL.toluaL_exception(L, e, o == null ? "attempt to index ColorMat on a nil value" : e.Message)); } }
static int get_CmType(IntPtr L) { object o = null; try { o = ToLua.ToObject(L, 1); CreateActorParam obj = (CreateActorParam)o; int ret = obj.CmType; LuaDLL.lua_pushinteger(L, ret); return(1); } catch (Exception e) { return(LuaDLL.toluaL_exception(L, e, o == null ? "attempt to index CmType on a nil value" : e.Message)); } }
static int set_Y(IntPtr L) { object o = null; try { o = ToLua.ToObject(L, 1); CreateActorParam obj = (CreateActorParam)o; float arg0 = (float)LuaDLL.luaL_checknumber(L, 2); obj.Y = arg0; return(0); } catch (Exception e) { return(LuaDLL.toluaL_exception(L, e, o == null ? "attempt to index Y on a nil value" : e.Message)); } }
static int set_IsHero(IntPtr L) { object o = null; try { o = ToLua.ToObject(L, 1); CreateActorParam obj = (CreateActorParam)o; bool arg0 = LuaDLL.luaL_checkboolean(L, 2); obj.IsHero = arg0; return(0); } catch (Exception e) { return(LuaDLL.toluaL_exception(L, e, o == null ? "attempt to index IsHero on a nil value" : e.Message)); } }
static int set_TexturePackName(IntPtr L) { object o = null; try { o = ToLua.ToObject(L, 1); CreateActorParam obj = (CreateActorParam)o; string arg0 = ToLua.CheckString(L, 2); obj.TexturePackName = arg0; return(0); } catch (Exception e) { return(LuaDLL.toluaL_exception(L, e, o == null ? "attempt to index TexturePackName on a nil value" : e.Message)); } }
static int get_TexturePackName(IntPtr L) { object o = null; try { o = ToLua.ToObject(L, 1); CreateActorParam obj = (CreateActorParam)o; string ret = obj.TexturePackName; LuaDLL.lua_pushstring(L, ret); return(1); } catch (Exception e) { return(LuaDLL.toluaL_exception(L, e, o == null ? "attempt to index TexturePackName on a nil value" : e.Message)); } }
static int _CreateCreateActorParam(IntPtr L) { try { int count = LuaDLL.lua_gettop(L); if (count == 1) { int arg0 = (int)LuaDLL.luaL_checknumber(L, 1); CreateActorParam obj = new CreateActorParam(arg0); ToLua.PushObject(L, obj); return(1); } else if (count == 2 && TypeChecker.CheckTypes(L, 1, typeof(float), typeof(float))) { float arg0 = (float)LuaDLL.luaL_checknumber(L, 1); float arg1 = (float)LuaDLL.luaL_checknumber(L, 2); CreateActorParam obj = new CreateActorParam(arg0, arg1); ToLua.PushObject(L, obj); return(1); } else if (count == 3 && TypeChecker.CheckTypes(L, 1, typeof(float), typeof(float), typeof(int))) { float arg0 = (float)LuaDLL.luaL_checknumber(L, 1); float arg1 = (float)LuaDLL.luaL_checknumber(L, 2); int arg2 = (int)LuaDLL.luaL_checknumber(L, 3); CreateActorParam obj = new CreateActorParam(arg0, arg1, arg2); ToLua.PushObject(L, obj); return(1); } else { return(LuaDLL.luaL_throw(L, "invalid arguments to ctor method: CreateActorParam.New")); } } catch (Exception e) { return(LuaDLL.toluaL_exception(L, e)); } }
/// <summary> /// 解析建筑地图 /// </summary> /// <param name="mapData">地图数据</param> /// <param name="packer">数据包装</param> public void AnalysisMap(int[][] mapData, MapDataParamsPacker packer = null) { // 获取基地位置 for (var row = 0; row < mapData.Length; row++) { var line = mapData[row]; for (var col = 0; col < line.Length; col++) { var cell = line[col]; switch (cell) { case Utils.Accessibility: // 无障碍 break; case Utils.Obstacle: { // 障碍物 var paramObj = new CreateActorParam(col, row); FightUnitFactory.CreateUnit((int)ObjectID.ObjectType.NPCObstacle, paramObj).ClusterData.Begin(); } break; case Utils.MyBaseId: { // 我方基地 var pos = Utils.NumToPosition(LoadMap.Single.transform.position, new Vector2(col, row), ClusterManager.Single.UnitWidth, ClusterManager.Single.MapWidth, ClusterManager.Single.MapHeight); var paramObj = new CreateActorParam(pos.x, pos.z, packer.BaseLevel); FightUnitFactory.CreateUnit((int)ObjectID.ObjectType.MyJiDi, paramObj).ClusterData.Begin(); } break; case Utils.MyTurretId: { // 我方防御塔 var pos = Utils.NumToPosition(LoadMap.Single.transform.position, new Vector2(col, row), ClusterManager.Single.UnitWidth, ClusterManager.Single.MapWidth, ClusterManager.Single.MapHeight); var paramObj = new CreateActorParam(pos.x, pos.z, packer.TurretLevel); FightUnitFactory.CreateUnit((int)ObjectID.ObjectType.MyTower, paramObj).ClusterData.Begin(); } break; case Utils.EnemyBaseId: { // 敌方基地 var pos = Utils.NumToPosition(LoadMap.Single.transform.position, new Vector2(col, row), ClusterManager.Single.UnitWidth, ClusterManager.Single.MapWidth, ClusterManager.Single.MapHeight); var paramObj = new CreateActorParam(pos.x, pos.z, packer.EnemyBaseLevel); FightUnitFactory.CreateUnit((int)ObjectID.ObjectType.EnemyJiDi, paramObj).ClusterData.Begin(); } break; case Utils.EnemyTurretId: { // 敌方防御塔 var pos = Utils.NumToPosition(LoadMap.Single.transform.position, new Vector2(col, row), ClusterManager.Single.UnitWidth, ClusterManager.Single.MapWidth, ClusterManager.Single.MapHeight); var paramObj = new CreateActorParam(pos.x, pos.z, packer.TurretLevel); var turret = FightUnitFactory.CreateUnit((int)ObjectID.ObjectType.EnemyTower, paramObj); turret.ClusterData.Begin(); } break; } } } }
public DisplayOwner Create(VOBase value, CreateActorParam otherParam) { DisplayOwner result = null; switch (value.ObjID.ObjType) { case ObjectID.ObjectType.MyJiDi: var myJidi = value as JiDiVO; myJidi.Camp = Utils.MyCamp; result = CreateBase(myJidi, otherParam); break; case ObjectID.ObjectType.EnemyJiDi: var enemyjidi = value as JiDiVO; enemyjidi.Camp = Utils.EnemyCamp; result = CreateBase(enemyjidi, otherParam); break; case ObjectID.ObjectType.MySoldier: var mysoldier = value as FightVO; // 设置阵营 mysoldier.Camp = Utils.MyCamp; result = CreateSoldier(mysoldier, otherParam); break; case ObjectID.ObjectType.EnemySoldier: var enemysoldier = value as FightVO; // 设置阵营 enemysoldier.Camp = Utils.EnemyCamp; result = CreateSoldier(enemysoldier, otherParam); break; case ObjectID.ObjectType.MyTower: // 我方防御塔 var myTurret = value as TurretVO; // 设置阵营 myTurret.Camp = Utils.MyCamp; result = CreateTurret(myTurret, otherParam); break; case ObjectID.ObjectType.EnemyTower: // 敌方防御塔 var enemyTurret = value as TurretVO; // 设置阵营 enemyTurret.Camp = Utils.EnemyCamp; result = CreateTurret(enemyTurret, otherParam); break; case ObjectID.ObjectType.MyTank: var mytank = value as TankVO; CreateMyTank(mytank); break; case ObjectID.ObjectType.EnemyTank: var enemyTank = value as TankVO; CreateEnemyTank(enemyTank); break; case ObjectID.ObjectType.MyObstacle: var myobstacle = value as ObstacleVO; CreateMyObstacle(myobstacle); break; case ObjectID.ObjectType.EnemyObstacle: var enemyobstacle = value as ObstacleVO; CreateEnemyObstacle(enemyobstacle); break; case ObjectID.ObjectType.NPCObstacle: result = CreateNPCObstacle(value, otherParam); break; } return result; }
/// <summary> /// 创建单位 /// </summary> /// <param name="soldier">单位数据</param> /// <param name="param">数据参数</param> /// <returns></returns> private DisplayOwner CreateSoldier(FightVO soldier, CreateActorParam param) { if (soldier.ObjID.ObjType == ObjectID.ObjectType.MySoldier) { _mySoldiersDict.Add(soldier.ObjID.ID, soldier); } if (soldier.ObjID.ObjType == ObjectID.ObjectType.EnemySoldier) { _enemySoldiersDict.Add(soldier.ObjID.ID, soldier); } // 设置数据 var soldierId = param.SoldierID; var config = SData_armybase_c.Single.GetDataOfID(soldierId); soldier.SetSoldierData(config); //var display = DP_FightPrefabManage.InstantiateAvatar(param); //通过对象池创建角色 var display = DisplayerManager.Single.CreateAvatar(soldier); display.transform.position = new Vector3(param.X, 0, param.Y); // 设置父级 ParentManager.Instance().SetParent(display, ParentManager.ClusterParent); // 创建渲染器 // var mfa = display.GetComponent<MFAModelRender>(); // mfa.ObjId = soldier.ObjID; // 创建集群数据 var cluster = display.AddComponent<ClusterData>(); cluster.SetDataValue(soldier); // mfa.Cluster = cluster; // 设置空地高度 switch (soldier.GeneralType) { // 空中单位高度 case Utils.GeneralTypeAir: cluster.Height = SData_Constant.Single.GetDataOfID(Utils.AirTypeConstantId).Value; cluster.CollisionGroup = Utils.AirCollisionGroup; break; // 地面单位高度 case Utils.GeneralTypeBuilding: case Utils.GeneralTypeSurface: cluster.Height = SData_Constant.Single.GetDataOfID(Utils.SurfaceTypeConstantId).Value; cluster.CollisionGroup = Utils.SurfaceCollisionGroup; break; } //Debug.Log("类型: " + soldier.GeneralType + "高度: " + mfa.Cluster.Height); // 添加至ClusterManager中 //cluster.Diameter *= ClusterManager.Single.UnitWidth; cluster.StopMove(); // ClusterManager.Single.Add(mfa.Cluster); // 创建外层持有类 var displayOwner = new DisplayOwner(display, cluster); DisplayerManager.Single.AddElement(soldier.ObjID, displayOwner); // 创建RanderControl var randerControl = display.AddComponent<RanderControl>(); randerControl.PosObj = cluster; displayOwner.RanderControl = randerControl; // 挂载事件处理器 var triggerRunner = display.AddComponent<TriggerRunner>(); // 设置数据 triggerRunner.Display = displayOwner; // 设置目标选择权重数据 var aimData = SData_armyaim_c.Single.GetDataOfID(soldier.ArmyID); cluster.AllData.SelectWeightData = new SelectWeightData(aimData); if (soldier.AttackType == Utils.BulletTypeScope) { // 加载单位的AOE数据 var aoeData = SData_armyaoe_c.Single.GetDataOfID(soldier.ArmyID); cluster.AllData.AOEData = new ArmyAOEData(aoeData); } // 加载单位Effect数据 var effectData = SData_effect_c.Single.GetDataOfID(soldier.ArmyID); cluster.AllData.EffectData = new EffectData(effectData); // 加载单位 var armyTypeData = SData_UnitFightData_c.Single.GetDataOfID(soldier.ArmyID); cluster.AllData.ArmyTypeData = new ArmyTypeData(armyTypeData); cluster.AllData.ArmyTypeData.Camp = (short) soldier.Camp; // 加载并设置技能 displayOwner.ClusterData.AllData.SkillInfoList = SkillManager.Single.CreateSkillInfoList(new List<int>() { soldier.Skill1, soldier.Skill2, soldier.Skill3, soldier.Skill4, soldier.Skill5, }, displayOwner); // 创建单位是将技能属性(如果有)附加到单位上 foreach (var skill in displayOwner.ClusterData.AllData.SkillInfoList) { SkillManager.Single.AttachSkillAttribute(skill, displayOwner.ClusterData.AllData.MemberData); } return displayOwner; }
/// <summary> /// 创建防御塔 /// </summary> /// <param name="turretVo">防御塔数据</param> /// <param name="otherParam">其他参数</param> /// <returns></returns> private DisplayOwner CreateTurret(TurretVO turretVo, CreateActorParam otherParam) { if (turretVo == null || otherParam == null) { return null; } DisplayOwner result = null; // 加载数据 var turretConfig = SData_armybase_c.Single.GetDataOfID(Utils.TurretBaseId + otherParam.Level); turretVo.SetSoldierData(turretConfig); //通过对象池创建角色 var turretObj = DisplayerManager.Single.CreateAvatar(turretVo); turretObj.transform.position = new Vector3(otherParam.X, 0, otherParam.Y); // 设置父级 ParentManager.Instance().SetParent(turretObj, ParentManager.BuildingParent); // 区分阵营加载不同皮肤 switch (turretVo.Camp) { case Utils.MyCamp: // 我方阵营 // 放入列表 _myTurretDict.Add(turretVo.ObjID.ID, turretVo); // 旋转角度 turretObj.transform.Rotate(new Vector3(0, 90, 0)); break; case Utils.EnemyCamp: // 敌方阵营 // 放入列表 _enemyTurretDict.Add(turretVo.ObjID.ID, turretVo); // 旋转角度 turretObj.transform.Rotate(new Vector3(0, -90, 0)); break; } // 设置位置 var height = SData_Constant.Single.GetDataOfID(Utils.SurfaceTypeConstantId).Value; turretObj.transform.position = new Vector3(otherParam.X, height, otherParam.Y); // 添加ClusterData // TODO 添加BuildingClusterData var cluster = turretObj.AddComponent<FixtureData>(); // 设置在地面上 cluster.Height = SData_Constant.Single.GetDataOfID(Utils.SurfaceTypeConstantId).Value; cluster.CollisionGroup = Utils.SurfaceCollisionGroup; cluster.AllData.MemberData = turretVo; cluster.X = otherParam.X; cluster.Y = otherParam.Y; cluster.StopMove(); // 设置目标选择权重数据 var aimData = SData_armyaim_c.Single.GetDataOfID(turretVo.ArmyID); cluster.AllData.SelectWeightData = new SelectWeightData(aimData); // 创建外层持有类 result = new DisplayOwner(turretObj, cluster); DisplayerManager.Single.AddElement(turretVo.ObjID, result); // 加载单位Effect数据 var effectData = SData_effect_c.Single.GetDataOfID(turretVo.ArmyID); cluster.AllData.EffectData = new EffectData(effectData); // 创建RanderControl var randerControl = turretObj.AddComponent<RanderControl>(); randerControl.PosObj = cluster; result.RanderControl = randerControl; // 启动RanderControl randerControl.Begin(); // 创建事件检查器 var triggerRunner = turretObj.AddComponent<TriggerRunner>(); triggerRunner.Display = result; return result; }
/// <summary> /// 创建基地 /// </summary> /// <param name="jidiVo">基地数据</param> /// <param name="otherParam">其他参数</param> /// <returns></returns> private DisplayOwner CreateBase(JiDiVO jidiVo, CreateActorParam otherParam) { DisplayOwner result = null; if (jidiVo == null || otherParam == null) { return result; } // 根据等级获得对应数据 var baseConfig = SData_armybase_c.Single.GetDataOfID(Utils.BaseBaseId + otherParam.Level); jidiVo.SetSoldierData(baseConfig); // 创建基地模型 // 通过对象池创建角色 var baseObj = DisplayerManager.Single.CreateAvatar(jidiVo); baseObj.transform.position = new Vector3(otherParam.X, 0, otherParam.Y); // 设置父级 ParentManager.Instance().SetParent(baseObj, ParentManager.BuildingParent); switch (jidiVo.Camp) { case Utils.MyCamp: _myJidiDict.Add(jidiVo.ObjID.ID, jidiVo); // 旋转角度 baseObj.transform.Rotate(new Vector3(0, 90, 0)); break; case Utils.EnemyCamp: _enemyJidiDict.Add(jidiVo.ObjID.ID, jidiVo); // 旋转角度 baseObj.transform.Rotate(new Vector3(0, -90, 0)); break; } // 获取距离地面高度 var height = SData_Constant.Single.GetDataOfID(Utils.SurfaceTypeConstantId).Value; baseObj.transform.position = new Vector3(otherParam.X, height, otherParam.Y); // TODO 添加BuildingClusterData var cluster = baseObj.AddComponent<FixtureData>(); // 设置在地面上 cluster.Height = SData_Constant.Single.GetDataOfID(Utils.SurfaceTypeConstantId).Value; cluster.CollisionGroup = Utils.SurfaceCollisionGroup; cluster.AllData.MemberData = jidiVo; cluster.X = otherParam.X; cluster.Y = otherParam.Y; cluster.StopMove(); // 保存基地位置 FightManager.Single.SetMemberPos(jidiVo.Camp, FightManager.MemberType.Base, new Vector3(cluster.X, cluster.Height, cluster.Y)); // 创建外层持有类 result = new DisplayOwner(baseObj, cluster); DisplayerManager.Single.AddElement(jidiVo.ObjID, result); // 创建RanderControl var randerControl = baseObj.AddComponent<RanderControl>(); randerControl.PosObj = cluster; result.RanderControl = randerControl; randerControl.Begin(); // 创建事件检查器 var triggerRunner = baseObj.AddComponent<TriggerRunner>(); triggerRunner.Display = result; return result; }